Ticket #2649: util-opengl.h

File util-opengl.h, 3.2 KB (added by anonymous, 20 years ago)
Line 
1#ifndef UTIL_OPENGL_H_
2#define UTIL_OPENGL_H_
3
4#include <qstring.h>
5#include <qrect.h>
6#include <vector>
7
8#define GL_GLEXT_PROTOTYPES
9#define GLX_GLXEXT_PROTOTYPES
10#define XMD_H 1
11#include <GL/glx.h>
12#include <GL/gl.h>
13#undef GLX_ARB_get_proc_address
14#include <GL/glxext.h>
15#include <GL/glext.h>
16
17typedef enum GLEXTS
18{
19 SUPP_NONE = 0x00,
20 SUPP_RECT = 0x01,
21 SUPP_PROG = 0x02,
22 SUPP_FBUF = 0x04
23};
24
25class OpenglVideo;
26
27class OpenglContext
28{
29 public:
30
31 friend class OpenglVideo;
32
33 OpenglContext();
34 ~OpenglContext();
35 bool Create(Window window, int width, int height, bool visible);
36 void Init(void);
37 void MakeCurrent(bool current);
38 void SwapBuffers(void);
39 bool TextureSupport(void) { return m_supported & SUPP_RECT; };
40 bool FragProgSupport(void) { return m_supported & SUPP_PROG; };
41 bool FrameBufSupport(void) { return m_supported & SUPP_FBUF; };
42 GLint GetMaxTexSize(void) { return m_max_tex_size; };
43 Display* GetDisplay(void) { return m_display; };
44 int GetScreenNum(void) { return m_screen_num; };
45 Window GetWindow(void) { return m_window; };
46 void CreateTexture(GLuint *tex);
47 bool SetupTexture(QSize size, GLuint *tex, int filt);
48 void SetupTextureFilters(GLuint *tex, int filt);
49 void DeleteTexture(GLuint *tex);
50 bool CreateProgram(QString *program, GLuint *prog);
51 void DeleteProgram(GLuint *prog);
52 bool CreateFrameBuffer(GLuint *buf, GLuint *tex, int width, int height);
53 void DeleteFrameBuffer(GLuint *buf);
54 void EnableTextures(void);
55
56 private:
57 int EnableTextureRects(void);
58 int EnableFragProgs(void);
59 int EnableFrameBufs(void);
60 void DeleteTextures(void);
61 void DeletePrograms(void);
62 void DeleteFrameBuffers(void);
63 bool CheckGlx(void);
64 bool GetVisual(void);
65 bool CreateWindow(Window winid, int width, int height);
66 bool CreateContext(void);
67 __GLXextFuncPtr glXGetProcAddress(const char * const procName);
68
69 int m_texture;
70 Display *m_display;
71 int m_screen_num;
72 Window m_window;
73 XVisualInfo* m_visual;
74 GLXContext m_context;
75 bool m_visible;
76 QString m_extensions;
77 int m_supported;
78 GLint m_max_tex_size;
79 bool m_textures_enabled;
80
81 vector<GLuint> textures;
82 vector<GLuint> programs;
83 vector<GLuint> framebuffers;
84
85 unsigned char *scratchspace;
86
87 PFNGLGENPROGRAMSARBPROC m_glGenProgramsARB;
88 PFNGLBINDPROGRAMARBPROC m_glBindProgramARB;
89 PFNGLPROGRAMSTRINGARBPROC m_glProgramStringARB;
90 PFNGLPROGRAMENVPARAMETER4FARBPROC m_glProgramEnvParameter4fARB;
91 PFNGLDELETEPROGRAMSARBPROC m_glDeleteProgramsARB;
92 PFNGLGETPROGRAMIVARBPROC m_glGetProgramivARB;
93
94 PFNGLGENFRAMEBUFFERSEXTPROC m_glGenFramebuffersEXT;
95 PFNGLBINDFRAMEBUFFEREXTPROC m_glBindFramebufferEXT;
96 PFNGLFRAMEBUFFERTEXTURE2DEXTPROC m_glFramebufferTexture2DEXT;
97 PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC m_glCheckFramebufferStatusEXT;
98 PFNGLDELETEFRAMEBUFFERSEXTPROC m_glDeleteFramebuffersEXT;
99};
100
101#endif