00001
00002
00003 #ifndef _UTIL_OPENGL_H_
00004 #define _UTIL_OPENGL_H_
00005
00006 #ifdef USING_OPENGL
00007
00008
00009 #include "mythcontext.h"
00010 #include "util-x11.h"
00011
00012
00013 #define GLX_GLXEXT_PROTOTYPES
00014 #include <GL/glx.h>
00015 #include <GL/glu.h>
00016
00017
00018 #include <qstring.h>
00019
00020 #ifndef APIENTRY
00021 #define APIENTRY
00022 #endif
00023 #ifndef APIENTRYP
00024 #define APIENTRYP APIENTRY *
00025 #endif
00026
00027 #ifndef GL_TEXTURE_RECTANGLE_ARB
00028 #define GL_TEXTURE_RECTANGLE_ARB 0x84F5
00029 #endif
00030
00031 #ifndef GL_TEXTURE_RECTANGLE_EXT
00032 #define GL_TEXTURE_RECTANGLE_EXT 0x84F5
00033 #endif
00034
00035 #ifndef GL_TEXTURE_RECTANGLE_NV
00036 #define GL_TEXTURE_RECTANGLE_NV 0x84F5
00037 #endif
00038
00039 #ifndef GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT
00040 #define GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT 0x8CD8
00041 #endif
00042
00043 #ifndef GL_FRAGMENT_PROGRAM_ARB
00044 #define GL_FRAGMENT_PROGRAM_ARB 0x8804
00045 #endif
00046
00047
00048
00049 #ifndef GL_FRAMEBUFFER_EXT
00050 #define GL_FRAMEBUFFER_EXT 0x8D40
00051 #endif
00052 #ifndef GL_COLOR_ATTACHMENT0_EXT
00053 #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
00054 #endif
00055 #ifndef GL_FRAMEBUFFER_COMPLETE_EXT
00056 #define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5
00057 #endif
00058 #ifndef GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT
00059 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6
00060 #endif
00061 #ifndef GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT
00062 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7
00063 #endif
00064 #ifndef GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT
00065 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9
00066 #endif
00067 #ifndef GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT
00068 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA
00069 #endif
00070 #ifndef GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT
00071 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB
00072 #endif
00073 #ifndef GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT
00074 #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC
00075 #endif
00076 #ifndef GL_FRAMEBUFFER_UNSUPPORTED_EXT
00077 #define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD
00078 #endif
00079
00080
00081 #ifndef GLX_VERSION_1_3
00082 typedef XID GLXPbuffer;
00083 #endif // GLX_VERSION_1_3
00084
00085 static inline int __glCheck__(const QString &loc, const char* fileName, int n)
00086 {
00087 int error = glGetError();
00088 if (error)
00089 {
00090 VERBOSE(VB_IMPORTANT, loc << gluErrorString(error) << " @ "
00091 << fileName << ", #" << n);
00092 }
00093 return error;
00094 }
00095
00096 #define glCheck() __glCheck__(LOC, __FILE__, __LINE__)
00097
00098 bool get_glx_version(Display *XJ_disp, uint &major, uint &minor);
00099
00100 bool init_opengl(void);
00101
00102 typedef enum { kRenderRGBA, kSimpleRGBA } FrameBufferType;
00103 int const *get_attr_cfg(FrameBufferType type);
00104
00105
00106 GLXFBConfig get_fbuffer_cfg(Display *XJ_disp, int XJ_screen_num,
00107 const int*);
00108
00109 GLXPbuffer get_pbuffer(Display *XJ_disp,
00110 GLXFBConfig glx_fbconfig,
00111 const QSize &video_dim);
00112
00113 Window get_gl_window(Display *XJ_disp,
00114 Window XJ_curwin,
00115 XVisualInfo *visinfo,
00116 const QSize &window_size,
00117 bool map_window);
00118
00119 GLXWindow get_glx_window(Display *XJ_disp,
00120 GLXFBConfig glx_fbconfig,
00121 Window gl_window,
00122 GLXContext glx_context,
00123 GLXPbuffer glx_pbuffer,
00124 const QSize &window_size);
00125
00126 void copy_pixels_to_texture(const unsigned char *buf,
00127 int buffer_format,
00128 const QSize &buffer_size,
00129 int texture,
00130 int texture_type);
00131
00132 __GLXextFuncPtr get_gl_proc_address(const QString &procName);
00133
00134 int get_gl_texture_rect_type(const QString &extensions);
00135 bool has_gl_fbuffer_object_support(const QString &extensions);
00136 bool has_gl_fragment_program_support(const QString &extensions);
00137 bool has_glx_video_sync_support(const QString &glx_extensions);
00138
00139 extern QString gMythGLExtensions;
00140 extern uint gMythGLExtSupported;
00141
00142 extern PFNGLGENPROGRAMSARBPROC gMythGLGenProgramsARB;
00143 extern PFNGLBINDPROGRAMARBPROC gMythGLBindProgramARB;
00144 extern PFNGLPROGRAMSTRINGARBPROC gMythGLProgramStringARB;
00145 extern PFNGLPROGRAMENVPARAMETER4FARBPROC gMythGLProgramEnvParameter4fARB;
00146 extern PFNGLDELETEPROGRAMSARBPROC gMythGLDeleteProgramsARB;
00147 extern PFNGLGETPROGRAMIVARBPROC gMythGLGetProgramivARB;
00148
00149
00150
00151 typedef void (APIENTRYP MYTH_GLGENFRAMEBUFFERSEXTPROC)
00152 (GLsizei n, GLuint *framebuffers);
00153 typedef void (APIENTRYP MYTH_GLBINDFRAMEBUFFEREXTPROC)
00154 (GLenum target, GLuint framebuffer);
00155 typedef void (APIENTRYP MYTH_GLFRAMEBUFFERTEXTURE2DEXTPROC)
00156 (GLenum target, GLenum attachment, GLenum textarget,
00157 GLuint texture, GLint level);
00158 typedef GLenum (APIENTRYP MYTH_GLCHECKFRAMEBUFFERSTATUSEXTPROC)
00159 (GLenum target);
00160 typedef void (APIENTRYP MYTH_GLDELETEFRAMEBUFFERSEXTPROC)
00161 (GLsizei n, const GLuint *framebuffers);
00162
00163 extern MYTH_GLGENFRAMEBUFFERSEXTPROC gMythGLGenFramebuffersEXT;
00164 extern MYTH_GLBINDFRAMEBUFFEREXTPROC gMythGLBindFramebufferEXT;
00165 extern MYTH_GLFRAMEBUFFERTEXTURE2DEXTPROC gMythGLFramebufferTexture2DEXT;
00166 extern MYTH_GLCHECKFRAMEBUFFERSTATUSEXTPROC gMythGLCheckFramebufferStatusEXT;
00167 extern MYTH_GLDELETEFRAMEBUFFERSEXTPROC gMythGLDeleteFramebuffersEXT;
00168
00169 extern PFNGLXGETVIDEOSYNCSGIPROC gMythGLXGetVideoSyncSGI;
00170 extern PFNGLXWAITVIDEOSYNCSGIPROC gMythGLXWaitVideoSyncSGI;
00171
00172 #endif // USING_OPENGL
00173
00174 #endif // _UTIL_OPENGL_H_