1 // This file may be redistributed and modified only under the terms of 2 // the GNU Lesser General Public License (See COPYING for details). 3 // Copyright (C) 2003-2005 Simon Goodall 4 5 #include <sage/sage_glx.h> 6 #include "SDL.h" 7 #include <sage/utility.h> 8 9 #ifdef SAGE_GLX_VERSION_1_3 10 PFNGLXGETFBCONFIGATTRIBPROC SAGE_glXGetFBConfigAttrib = NULL; 11 PFNGLXCREATEWINDOWPROC SAGE_glXCreateWindow = NULL; 12 PFNGLXDESTROYWINDOWPROC SAGE_glXDestroyWindow = NULL; 13 PFNGLXCREATEPIXMAPPROC SAGE_glXCreatePixmap = NULL; 14 PFNGLXDESTROYPIXMAPPROC SAGE_glXDestroyPixmap = NULL; 15 PFNGLXCREATEPBUFFERPROC SAGE_glXCreatePbuffer = NULL; 16 PFNGLXDESTROYPBUFFERPROC SAGE_glXDestroyPbuffer = NULL; 17 PFNGLXQUERYDRAWABLEPROC SAGE_glXQueryDrawable = NULL; 18 PFNGLXCREATENEWCONTEXTPROC SAGE_glXCreateNewContext = NULL; 19 PFNGLXMAKECONTEXTCURRENTPROC SAGE_glXMakeContextCurrent = NULL; 20 PFNGLXGETCURRENTREADDRAWABLEPROC SAGE_glXGetCurrentReadDrawable = NULL; 21 PFNGLXQUERYCONTEXTPROC SAGE_glXQueryContext = NULL; 22 PFNGLXSELECTEVENTPROC SAGE_glXSelectEvent = NULL; 23 PFNGLXGETSELECTEDEVENTPROC SAGE_glXGetSelectedEvent = NULL; 24 #endif 25 #ifdef SAGE_GLX_VERSION_1_4 26 #endif 27 #ifdef SAGE_GLX_ARB_get_proc_address 28 #endif 29 #ifdef SAGE_GLX_ARB_multisample 30 #endif 31 #ifdef SAGE_GLX_SGIS_multisample 32 #endif 33 #ifdef SAGE_GLX_EXT_visual_info 34 #endif 35 #ifdef SAGE_GLX_SGI_swap_control 36 PFNGLXSWAPINTERVALSGIPROC SAGE_glXSwapIntervalSGI = NULL; 37 #endif 38 #ifdef SAGE_GLX_SGI_video_sync 39 PFNGLXGETVIDEOSYNCSGIPROC SAGE_glXGetVideoSyncSGI = NULL; 40 PFNGLXWAITVIDEOSYNCSGIPROC SAGE_glXWaitVideoSyncSGI = NULL; 41 #endif 42 #ifdef SAGE_GLX_SGI_make_current_read 43 PFNGLXMAKECURRENTREADSGIPROC SAGE_glXMakeCurrentReadSGI = NULL; 44 PFNGLXGETCURRENTREADDRAWABLESGIPROC SAGE_glXGetCurrentReadDrawableSGI = NULL; 45 #endif 46 #ifdef SAGE_GLX_SGIX_video_source 47 PFNGLXCREATEGLXVIDEOSOURCESGIXPROC SAGE_glXCreateGLXVideoSourceSGIX = NULL; 48 PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC SAGE_glXDestroyGLXVideoSourceSGIX = NULL; 49 #endif 50 #ifdef SAGE_GLX_EXT_visual_rating 51 #endif 52 #ifdef SAGE_GLX_EXT_import_context 53 PFNGLXQUERYCONTEXTINFOEXTPROC SAGE_glXQueryContextInfoEXT = NULL; 54 PFNGLXGETCONTEXTIDEXTPROC SAGE_glXGetContextIDEXT = NULL; 55 PFNGLXIMPORTCONTEXTEXTPROC SAGE_glXImportContextEXT = NULL; 56 PFNGLXFREECONTEXTEXTPROC SAGE_glXFreeContextEXT = NULL; 57 #endif 58 #ifdef SAGE_GLX_SGIX_fbconfig 59 PFNGLXGETFBCONFIGATTRIBSGIXPROC SAGE_glXGetFBConfigAttribSGIX = NULL; 60 PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC SAGE_glXCreateGLXPixmapWithConfigSGIX = NULL; 61 PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC SAGE_glXCreateContextWithConfigSGIX = NULL; 62 PFNGLXGETFBCONFIGFROMVISUALSGIXPROC SAGE_glXGetFBConfigFromVisualSGIX = NULL; 63 #endif 64 #ifdef SAGE_GLX_SGIX_pbuffer 65 PFNGLXCREATEGLXPBUFFERSGIXPROC SAGE_glXCreateGLXPbufferSGIX = NULL; 66 PFNGLXDESTROYGLXPBUFFERSGIXPROC SAGE_glXDestroyGLXPbufferSGIX = NULL; 67 PFNGLXQUERYGLXPBUFFERSGIXPROC SAGE_glXQueryGLXPbufferSGIX = NULL; 68 PFNGLXSELECTEVENTSGIXPROC SAGE_glXSelectEventSGIX = NULL; 69 PFNGLXGETSELECTEDEVENTSGIXPROC SAGE_glXGetSelectedEventSGIX = NULL; 70 #endif 71 #ifdef SAGE_GLX_SGI_cushion 72 PFNGLXCUSHIONSGIPROC SAGE_glXCushionSGI = NULL; 73 #endif 74 #ifdef SAGE_GLX_SGIX_video_resize 75 PFNGLXBINDCHANNELTOWINDOWSGIXPROC SAGE_glXBindChannelToWindowSGIX = NULL; 76 PFNGLXCHANNELRECTSGIXPROC SAGE_glXChannelRectSGIX = NULL; 77 PFNGLXQUERYCHANNELRECTSGIXPROC SAGE_glXQueryChannelRectSGIX = NULL; 78 PFNGLXQUERYCHANNELDELTASSGIXPROC SAGE_glXQueryChannelDeltasSGIX = NULL; 79 PFNGLXCHANNELRECTSYNCSGIXPROC SAGE_glXChannelRectSyncSGIX = NULL; 80 #endif 81 #ifdef SAGE_GLX_SGIX_dmbuffer 82 PFNGLXASSOCIATEDMPBUFFERSGIXPROC SAGE_glXAssociateDMPbufferSGIX = NULL; 83 #endif 84 #ifdef SAGE_GLX_SGIX_swap_group 85 PFNGLXJOINSWAPGROUPSGIXPROC SAGE_glXJoinSwapGroupSGIX = NULL; 86 #endif 87 #ifdef SAGE_GLX_SGIX_swap_barrier 88 PFNGLXBINDSWAPBARRIERSGIXPROC SAGE_glXBindSwapBarrierSGIX = NULL; 89 PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC SAGE_glXQueryMaxSwapBarriersSGIX = NULL; 90 #endif 91 #ifdef SAGE_GLX_SUN_get_transparent_index 92 PFNGLXGETTRANSPARENTINDEXSUNPROC SAGE_glXGetTransparentIndexSUN = NULL; 93 #endif 94 #ifdef SAGE_GLX_MESA_copy_sub_buffer 95 PFNGLXCOPYSUBBUFFERMESAPROC SAGE_glXCopySubBufferMESA = NULL; 96 #endif 97 #ifdef SAGE_GLX_MESA_pixmap_colormap 98 PFNGLXCREATEGLXPIXMAPMESAPROC SAGE_glXCreateGLXPixmapMESA = NULL; 99 #endif 100 #ifdef SAGE_GLX_MESA_release_buffers 101 PFNGLXRELEASEBUFFERSMESAPROC SAGE_glXReleaseBuffersMESA = NULL; 102 #endif 103 #ifdef SAGE_GLX_MESA_set_3dfx_mode 104 PFNGLXSET3DFXMODEMESAPROC SAGE_glXSet3DfxModeMESA = NULL; 105 #endif 106 #ifdef SAGE_GLX_SGIX_visual_select_group 107 #endif 108 #ifdef SAGE_GLX_OML_swap_method 109 #endif 110 #ifdef SAGE_GLX_OML_sync_control 111 PFNGLXGETSYNCVALUESOMLPROC SAGE_glXGetSyncValuesOML = NULL; 112 PFNGLXGETMSCRATEOMLPROC SAGE_glXGetMscRateOML = NULL; 113 PFNGLXWAITFORMSCOMLPROC SAGE_glXWaitForMscOML = NULL; 114 PFNGLXWAITFORSBCOMLPROC SAGE_glXWaitForSbcOML = NULL; 115 #endif 116 117 int sage_glx_ext[SAGE_GLX_LAST_EXTENSION]; 118 sage_glx_init(void)119void sage_glx_init(void) { 120 #ifdef SAGE_GLX_VERSION_1_3 121 SAGE_glXGetFBConfigAttrib = (PFNGLXGETFBCONFIGATTRIBPROC)SDL_GL_GetProcAddress("glXGetFBConfigAttrib"); 122 SAGE_glXCreateWindow = (PFNGLXCREATEWINDOWPROC)SDL_GL_GetProcAddress("glXCreateWindow"); 123 SAGE_glXDestroyWindow = (PFNGLXDESTROYWINDOWPROC)SDL_GL_GetProcAddress("glXDestroyWindow"); 124 SAGE_glXCreatePixmap = (PFNGLXCREATEPIXMAPPROC)SDL_GL_GetProcAddress("glXCreatePixmap"); 125 SAGE_glXDestroyPixmap = (PFNGLXDESTROYPIXMAPPROC)SDL_GL_GetProcAddress("glXDestroyPixmap"); 126 SAGE_glXCreatePbuffer = (PFNGLXCREATEPBUFFERPROC)SDL_GL_GetProcAddress("glXCreatePbuffer"); 127 SAGE_glXDestroyPbuffer = (PFNGLXDESTROYPBUFFERPROC)SDL_GL_GetProcAddress("glXDestroyPbuffer"); 128 SAGE_glXQueryDrawable = (PFNGLXQUERYDRAWABLEPROC)SDL_GL_GetProcAddress("glXQueryDrawable"); 129 SAGE_glXCreateNewContext = (PFNGLXCREATENEWCONTEXTPROC)SDL_GL_GetProcAddress("glXCreateNewContext"); 130 SAGE_glXMakeContextCurrent = (PFNGLXMAKECONTEXTCURRENTPROC)SDL_GL_GetProcAddress("glXMakeContextCurrent"); 131 SAGE_glXGetCurrentReadDrawable = (PFNGLXGETCURRENTREADDRAWABLEPROC)SDL_GL_GetProcAddress("glXGetCurrentReadDrawable"); 132 SAGE_glXQueryContext = (PFNGLXQUERYCONTEXTPROC)SDL_GL_GetProcAddress("glXQueryContext"); 133 SAGE_glXSelectEvent = (PFNGLXSELECTEVENTPROC)SDL_GL_GetProcAddress("glXSelectEvent"); 134 SAGE_glXGetSelectedEvent = (PFNGLXGETSELECTEDEVENTPROC)SDL_GL_GetProcAddress("glXGetSelectedEvent"); 135 #endif 136 #ifdef SAGE_GLX_VERSION_1_4 137 #endif 138 #ifdef SAGE_GLX_ARB_get_proc_address 139 #endif 140 #ifdef SAGE_GLX_ARB_multisample 141 #endif 142 #ifdef SAGE_GLX_SGIS_multisample 143 #endif 144 #ifdef SAGE_GLX_EXT_visual_info 145 #endif 146 #ifdef SAGE_GLX_SGI_swap_control 147 SAGE_glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)SDL_GL_GetProcAddress("glXSwapIntervalSGI"); 148 #endif 149 #ifdef SAGE_GLX_SGI_video_sync 150 SAGE_glXGetVideoSyncSGI = (PFNGLXGETVIDEOSYNCSGIPROC)SDL_GL_GetProcAddress("glXGetVideoSyncSGI"); 151 SAGE_glXWaitVideoSyncSGI = (PFNGLXWAITVIDEOSYNCSGIPROC)SDL_GL_GetProcAddress("glXWaitVideoSyncSGI"); 152 #endif 153 #ifdef SAGE_GLX_SGI_make_current_read 154 SAGE_glXMakeCurrentReadSGI = (PFNGLXMAKECURRENTREADSGIPROC)SDL_GL_GetProcAddress("glXMakeCurrentReadSGI"); 155 SAGE_glXGetCurrentReadDrawableSGI = (PFNGLXGETCURRENTREADDRAWABLESGIPROC)SDL_GL_GetProcAddress("glXGetCurrentReadDrawableSGI"); 156 #endif 157 #ifdef SAGE_GLX_SGIX_video_source 158 SAGE_glXCreateGLXVideoSourceSGIX = (PFNGLXCREATEGLXVIDEOSOURCESGIXPROC)SDL_GL_GetProcAddress("glXCreateGLXVideoSourceSGIX"); 159 SAGE_glXDestroyGLXVideoSourceSGIX = (PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC)SDL_GL_GetProcAddress("glXDestroyGLXVideoSourceSGIX"); 160 #endif 161 #ifdef SAGE_GLX_EXT_visual_rating 162 #endif 163 #ifdef SAGE_GLX_EXT_import_context 164 SAGE_glXQueryContextInfoEXT = (PFNGLXQUERYCONTEXTINFOEXTPROC)SDL_GL_GetProcAddress("glXQueryContextInfoEXT"); 165 SAGE_glXGetContextIDEXT = (PFNGLXGETCONTEXTIDEXTPROC)SDL_GL_GetProcAddress("glXGetContextIDEXT"); 166 SAGE_glXImportContextEXT = (PFNGLXIMPORTCONTEXTEXTPROC)SDL_GL_GetProcAddress("glXImportContextEXT"); 167 SAGE_glXFreeContextEXT = (PFNGLXFREECONTEXTEXTPROC)SDL_GL_GetProcAddress("glXFreeContextEXT"); 168 #endif 169 #ifdef SAGE_GLX_SGIX_fbconfig 170 SAGE_glXGetFBConfigAttribSGIX = (PFNGLXGETFBCONFIGATTRIBSGIXPROC)SDL_GL_GetProcAddress("glXGetFBConfigAttribSGIX"); 171 SAGE_glXCreateGLXPixmapWithConfigSGIX = (PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC)SDL_GL_GetProcAddress("glXCreateGLXPixmapWithConfigSGIX"); 172 SAGE_glXCreateContextWithConfigSGIX = (PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC)SDL_GL_GetProcAddress("glXCreateContextWithConfigSGIX"); 173 SAGE_glXGetFBConfigFromVisualSGIX = (PFNGLXGETFBCONFIGFROMVISUALSGIXPROC)SDL_GL_GetProcAddress("glXGetFBConfigFromVisualSGIX"); 174 #endif 175 #ifdef SAGE_GLX_SGIX_pbuffer 176 SAGE_glXCreateGLXPbufferSGIX = (PFNGLXCREATEGLXPBUFFERSGIXPROC)SDL_GL_GetProcAddress("glXCreateGLXPbufferSGIX"); 177 SAGE_glXDestroyGLXPbufferSGIX = (PFNGLXDESTROYGLXPBUFFERSGIXPROC)SDL_GL_GetProcAddress("glXDestroyGLXPbufferSGIX"); 178 SAGE_glXQueryGLXPbufferSGIX = (PFNGLXQUERYGLXPBUFFERSGIXPROC)SDL_GL_GetProcAddress("glXQueryGLXPbufferSGIX"); 179 SAGE_glXSelectEventSGIX = (PFNGLXSELECTEVENTSGIXPROC)SDL_GL_GetProcAddress("glXSelectEventSGIX"); 180 SAGE_glXGetSelectedEventSGIX = (PFNGLXGETSELECTEDEVENTSGIXPROC)SDL_GL_GetProcAddress("glXGetSelectedEventSGIX"); 181 #endif 182 #ifdef SAGE_GLX_SGI_cushion 183 SAGE_glXCushionSGI = (PFNGLXCUSHIONSGIPROC)SDL_GL_GetProcAddress("glXCushionSGI"); 184 #endif 185 #ifdef SAGE_GLX_SGIX_video_resize 186 SAGE_glXBindChannelToWindowSGIX = (PFNGLXBINDCHANNELTOWINDOWSGIXPROC)SDL_GL_GetProcAddress("glXBindChannelToWindowSGIX"); 187 SAGE_glXChannelRectSGIX = (PFNGLXCHANNELRECTSGIXPROC)SDL_GL_GetProcAddress("glXChannelRectSGIX"); 188 SAGE_glXQueryChannelRectSGIX = (PFNGLXQUERYCHANNELRECTSGIXPROC)SDL_GL_GetProcAddress("glXQueryChannelRectSGIX"); 189 SAGE_glXQueryChannelDeltasSGIX = (PFNGLXQUERYCHANNELDELTASSGIXPROC)SDL_GL_GetProcAddress("glXQueryChannelDeltasSGIX"); 190 SAGE_glXChannelRectSyncSGIX = (PFNGLXCHANNELRECTSYNCSGIXPROC)SDL_GL_GetProcAddress("glXChannelRectSyncSGIX"); 191 #endif 192 #ifdef SAGE_GLX_SGIX_dmbuffer 193 SAGE_glXAssociateDMPbufferSGIX = (PFNGLXASSOCIATEDMPBUFFERSGIXPROC)SDL_GL_GetProcAddress("glXAssociateDMPbufferSGIX"); 194 #endif 195 #ifdef SAGE_GLX_SGIX_swap_group 196 SAGE_glXJoinSwapGroupSGIX = (PFNGLXJOINSWAPGROUPSGIXPROC)SDL_GL_GetProcAddress("glXJoinSwapGroupSGIX"); 197 #endif 198 #ifdef SAGE_GLX_SGIX_swap_barrier 199 SAGE_glXBindSwapBarrierSGIX = (PFNGLXBINDSWAPBARRIERSGIXPROC)SDL_GL_GetProcAddress("glXBindSwapBarrierSGIX"); 200 SAGE_glXQueryMaxSwapBarriersSGIX = (PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC)SDL_GL_GetProcAddress("glXQueryMaxSwapBarriersSGIX"); 201 #endif 202 #ifdef SAGE_GLX_SUN_get_transparent_index 203 SAGE_glXGetTransparentIndexSUN = (PFNGLXGETTRANSPARENTINDEXSUNPROC)SDL_GL_GetProcAddress("glXGetTransparentIndexSUN"); 204 #endif 205 #ifdef SAGE_GLX_MESA_copy_sub_buffer 206 SAGE_glXCopySubBufferMESA = (PFNGLXCOPYSUBBUFFERMESAPROC)SDL_GL_GetProcAddress("glXCopySubBufferMESA"); 207 #endif 208 #ifdef SAGE_GLX_MESA_pixmap_colormap 209 SAGE_glXCreateGLXPixmapMESA = (PFNGLXCREATEGLXPIXMAPMESAPROC)SDL_GL_GetProcAddress("glXCreateGLXPixmapMESA"); 210 #endif 211 #ifdef SAGE_GLX_MESA_release_buffers 212 SAGE_glXReleaseBuffersMESA = (PFNGLXRELEASEBUFFERSMESAPROC)SDL_GL_GetProcAddress("glXReleaseBuffersMESA"); 213 #endif 214 #ifdef SAGE_GLX_MESA_set_3dfx_mode 215 SAGE_glXSet3DfxModeMESA = (PFNGLXSET3DFXMODEMESAPROC)SDL_GL_GetProcAddress("glXSet3DfxModeMESA"); 216 #endif 217 #ifdef SAGE_GLX_SGIX_visual_select_group 218 #endif 219 #ifdef SAGE_GLX_OML_swap_method 220 #endif 221 #ifdef SAGE_GLX_OML_sync_control 222 SAGE_glXGetSyncValuesOML = (PFNGLXGETSYNCVALUESOMLPROC)SDL_GL_GetProcAddress("glXGetSyncValuesOML"); 223 SAGE_glXGetMscRateOML = (PFNGLXGETMSCRATEOMLPROC)SDL_GL_GetProcAddress("glXGetMscRateOML"); 224 SAGE_glXWaitForMscOML = (PFNGLXWAITFORMSCOMLPROC)SDL_GL_GetProcAddress("glXWaitForMscOML"); 225 SAGE_glXWaitForSbcOML = (PFNGLXWAITFORSBCOMLPROC)SDL_GL_GetProcAddress("glXWaitForSbcOML"); 226 #endif 227 sage_glx_ext[GLX_VERSION_1_3] = isExtensionSupported("GLX_VERSION_1_3"); 228 sage_glx_ext[GLX_VERSION_1_4] = isExtensionSupported("GLX_VERSION_1_4"); 229 sage_glx_ext[GLX_ARB_GET_PROC_ADDRESS] = isExtensionSupported("GLX_ARB_get_proc_address"); 230 sage_glx_ext[GLX_ARB_MULTISAMPLE] = isExtensionSupported("GLX_ARB_multisample"); 231 sage_glx_ext[GLX_SGIS_MULTISAMPLE] = isExtensionSupported("GLX_SGIS_multisample"); 232 sage_glx_ext[GLX_EXT_VISUAL_INFO] = isExtensionSupported("GLX_EXT_visual_info"); 233 sage_glx_ext[GLX_SGI_SWAP_CONTROL] = isExtensionSupported("GLX_SGI_swap_control"); 234 sage_glx_ext[GLX_SGI_VIDEO_SYNC] = isExtensionSupported("GLX_SGI_video_sync"); 235 sage_glx_ext[GLX_SGI_MAKE_CURRENT_READ] = isExtensionSupported("GLX_SGI_make_current_read"); 236 sage_glx_ext[GLX_SGIX_VIDEO_SOURCE] = isExtensionSupported("GLX_SGIX_video_source"); 237 sage_glx_ext[GLX_EXT_VISUAL_RATING] = isExtensionSupported("GLX_EXT_visual_rating"); 238 sage_glx_ext[GLX_EXT_IMPORT_CONTEXT] = isExtensionSupported("GLX_EXT_import_context"); 239 sage_glx_ext[GLX_SGIX_FBCONFIG] = isExtensionSupported("GLX_SGIX_fbconfig"); 240 sage_glx_ext[GLX_SGIX_PBUFFER] = isExtensionSupported("GLX_SGIX_pbuffer"); 241 sage_glx_ext[GLX_SGI_CUSHION] = isExtensionSupported("GLX_SGI_cushion"); 242 sage_glx_ext[GLX_SGIX_VIDEO_RESIZE] = isExtensionSupported("GLX_SGIX_video_resize"); 243 sage_glx_ext[GLX_SGIX_DMBUFFER] = isExtensionSupported("GLX_SGIX_dmbuffer"); 244 sage_glx_ext[GLX_SGIX_SWAP_GROUP] = isExtensionSupported("GLX_SGIX_swap_group"); 245 sage_glx_ext[GLX_SGIX_SWAP_BARRIER] = isExtensionSupported("GLX_SGIX_swap_barrier"); 246 sage_glx_ext[GLX_SUN_GET_TRANSPARENT_INDEX] = isExtensionSupported("GLX_SUN_get_transparent_index"); 247 sage_glx_ext[GLX_MESA_COPY_SUB_BUFFER] = isExtensionSupported("GLX_MESA_copy_sub_buffer"); 248 sage_glx_ext[GLX_MESA_PIXMAP_COLORMAP] = isExtensionSupported("GLX_MESA_pixmap_colormap"); 249 sage_glx_ext[GLX_MESA_RELEASE_BUFFERS] = isExtensionSupported("GLX_MESA_release_buffers"); 250 sage_glx_ext[GLX_MESA_SET_3DFX_MODE] = isExtensionSupported("GLX_MESA_set_3dfx_mode"); 251 sage_glx_ext[GLX_SGIX_VISUAL_SELECT_GROUP] = isExtensionSupported("GLX_SGIX_visual_select_group"); 252 sage_glx_ext[GLX_OML_SWAP_METHOD] = isExtensionSupported("GLX_OML_swap_method"); 253 sage_glx_ext[GLX_OML_SYNC_CONTROL] = isExtensionSupported("GLX_OML_sync_control"); 254 } 255