diff --git a/libobs-opengl/GL/gl_obs.c b/libobs-opengl/GL/gl_obs.c index bb594bb0663d20e1924fa86d1bb57b70da597da4..d07863805573115787edc4fe805bfbfc57d220c9 100644 --- a/libobs-opengl/GL/gl_obs.c +++ b/libobs-opengl/GL/gl_obs.c @@ -7,7 +7,7 @@ #if defined(__APPLE__) #include -static void* AppleGLGetProcAddress (const const char *name) +static void* AppleGLGetProcAddress (const char *name) { static void* image = NULL; diff --git a/libobs-opengl/GL/glx_obs.c b/libobs-opengl/GL/glx_obs.c index cdf5440e2911055bd7f34a740b21c2d760c6aea9..4cffc9421208b2b6a45a44b8220a54ecc870d4ed 100644 --- a/libobs-opengl/GL/glx_obs.c +++ b/libobs-opengl/GL/glx_obs.c @@ -7,7 +7,7 @@ #if defined(__APPLE__) #include -static void* AppleGLGetProcAddress (const const char *name) +static void* AppleGLGetProcAddress (const char *name) { static void* image = NULL; @@ -52,37 +52,59 @@ static PROC WinGetProcAddress(const char *name) /* TODO: Need to eventually use eglGetProcAddress */ -int glx_ext_NV_copy_image = glx_LOAD_FAILED; +int glx_ext_AMD_gpu_association = glx_LOAD_FAILED; int glx_ext_ARB_create_context = glx_LOAD_FAILED; int glx_ext_ARB_create_context_profile = glx_LOAD_FAILED; int glx_ext_ARB_create_context_robustness = glx_LOAD_FAILED; int glx_ext_ARB_fbconfig_float = glx_LOAD_FAILED; int glx_ext_ARB_framebuffer_sRGB = glx_LOAD_FAILED; +int glx_ext_ARB_get_proc_address = glx_LOAD_FAILED; int glx_ext_ARB_multisample = glx_LOAD_FAILED; +int glx_ext_ARB_robustness_application_isolation = glx_LOAD_FAILED; +int glx_ext_ARB_robustness_share_group_isolation = glx_LOAD_FAILED; +int glx_ext_ARB_vertex_buffer_object = glx_LOAD_FAILED; +int glx_ext_EXT_buffer_age = glx_LOAD_FAILED; int glx_ext_EXT_create_context_es2_profile = glx_LOAD_FAILED; +int glx_ext_EXT_create_context_es_profile = glx_LOAD_FAILED; int glx_ext_EXT_fbconfig_packed_float = glx_LOAD_FAILED; int glx_ext_EXT_framebuffer_sRGB = glx_LOAD_FAILED; int glx_ext_EXT_import_context = glx_LOAD_FAILED; int glx_ext_EXT_swap_control = glx_LOAD_FAILED; int glx_ext_EXT_swap_control_tear = glx_LOAD_FAILED; +int glx_ext_EXT_texture_from_pixmap = glx_LOAD_FAILED; +int glx_ext_EXT_visual_info = glx_LOAD_FAILED; +int glx_ext_EXT_visual_rating = glx_LOAD_FAILED; +int glx_ext_INTEL_swap_event = glx_LOAD_FAILED; +int glx_ext_MESA_agp_offset = glx_LOAD_FAILED; +int glx_ext_MESA_copy_sub_buffer = glx_LOAD_FAILED; +int glx_ext_MESA_pixmap_colormap = glx_LOAD_FAILED; +int glx_ext_MESA_release_buffers = glx_LOAD_FAILED; +int glx_ext_MESA_set_3dfx_mode = glx_LOAD_FAILED; +int glx_ext_NV_copy_image = glx_LOAD_FAILED; +int glx_ext_NV_float_buffer = glx_LOAD_FAILED; +int glx_ext_NV_multisample_coverage = glx_LOAD_FAILED; +int glx_ext_NV_present_video = glx_LOAD_FAILED; +int glx_ext_NV_swap_group = glx_LOAD_FAILED; +int glx_ext_NV_video_capture = glx_LOAD_FAILED; +int glx_ext_NV_video_output = glx_LOAD_FAILED; -void (CODEGEN_FUNCPTR *_ptrc_glXCopyImageSubDataNV)(Display *, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei) = NULL; +GLXContext (CODEGEN_FUNCPTR *_ptrc_glXCreateContextAttribsARB)(Display *, GLXFBConfig, GLXContext, Bool, const int *) = NULL; -static int Load_NV_copy_image(void) +static int Load_ARB_create_context(void) { int numFailed = 0; - _ptrc_glXCopyImageSubDataNV = (void (CODEGEN_FUNCPTR *)(Display *, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei))IntGetProcAddress("glXCopyImageSubDataNV"); - if(!_ptrc_glXCopyImageSubDataNV) numFailed++; + _ptrc_glXCreateContextAttribsARB = (GLXContext (CODEGEN_FUNCPTR *)(Display *, GLXFBConfig, GLXContext, Bool, const int *))IntGetProcAddress("glXCreateContextAttribsARB"); + if(!_ptrc_glXCreateContextAttribsARB) numFailed++; return numFailed; } -GLXContext (CODEGEN_FUNCPTR *_ptrc_glXCreateContextAttribsARB)(Display *, GLXFBConfig, GLXContext, Bool, const int *) = NULL; +__GLXextFuncPtr (CODEGEN_FUNCPTR *_ptrc_glXGetProcAddressARB)(const GLubyte *) = NULL; -static int Load_ARB_create_context(void) +static int Load_ARB_get_proc_address(void) { int numFailed = 0; - _ptrc_glXCreateContextAttribsARB = (GLXContext (CODEGEN_FUNCPTR *)(Display *, GLXFBConfig, GLXContext, Bool, const int *))IntGetProcAddress("glXCreateContextAttribsARB"); - if(!_ptrc_glXCreateContextAttribsARB) numFailed++; + _ptrc_glXGetProcAddressARB = (__GLXextFuncPtr (CODEGEN_FUNCPTR *)(const GLubyte *))IntGetProcAddress("glXGetProcAddressARB"); + if(!_ptrc_glXGetProcAddressARB) numFailed++; return numFailed; } @@ -118,6 +140,164 @@ static int Load_EXT_swap_control(void) return numFailed; } +void (CODEGEN_FUNCPTR *_ptrc_glXBindTexImageEXT)(Display *, GLXDrawable, int, const int *) = NULL; +void (CODEGEN_FUNCPTR *_ptrc_glXReleaseTexImageEXT)(Display *, GLXDrawable, int) = NULL; + +static int Load_EXT_texture_from_pixmap(void) +{ + int numFailed = 0; + _ptrc_glXBindTexImageEXT = (void (CODEGEN_FUNCPTR *)(Display *, GLXDrawable, int, const int *))IntGetProcAddress("glXBindTexImageEXT"); + if(!_ptrc_glXBindTexImageEXT) numFailed++; + _ptrc_glXReleaseTexImageEXT = (void (CODEGEN_FUNCPTR *)(Display *, GLXDrawable, int))IntGetProcAddress("glXReleaseTexImageEXT"); + if(!_ptrc_glXReleaseTexImageEXT) numFailed++; + return numFailed; +} + +unsigned int (CODEGEN_FUNCPTR *_ptrc_glXGetAGPOffsetMESA)(const void *) = NULL; + +static int Load_MESA_agp_offset(void) +{ + int numFailed = 0; + _ptrc_glXGetAGPOffsetMESA = (unsigned int (CODEGEN_FUNCPTR *)(const void *))IntGetProcAddress("glXGetAGPOffsetMESA"); + if(!_ptrc_glXGetAGPOffsetMESA) numFailed++; + return numFailed; +} + +void (CODEGEN_FUNCPTR *_ptrc_glXCopySubBufferMESA)(Display *, GLXDrawable, int, int, int, int) = NULL; + +static int Load_MESA_copy_sub_buffer(void) +{ + int numFailed = 0; + _ptrc_glXCopySubBufferMESA = (void (CODEGEN_FUNCPTR *)(Display *, GLXDrawable, int, int, int, int))IntGetProcAddress("glXCopySubBufferMESA"); + if(!_ptrc_glXCopySubBufferMESA) numFailed++; + return numFailed; +} + +GLXPixmap (CODEGEN_FUNCPTR *_ptrc_glXCreateGLXPixmapMESA)(Display *, XVisualInfo *, Pixmap, Colormap) = NULL; + +static int Load_MESA_pixmap_colormap(void) +{ + int numFailed = 0; + _ptrc_glXCreateGLXPixmapMESA = (GLXPixmap (CODEGEN_FUNCPTR *)(Display *, XVisualInfo *, Pixmap, Colormap))IntGetProcAddress("glXCreateGLXPixmapMESA"); + if(!_ptrc_glXCreateGLXPixmapMESA) numFailed++; + return numFailed; +} + +Bool (CODEGEN_FUNCPTR *_ptrc_glXReleaseBuffersMESA)(Display *, GLXDrawable) = NULL; + +static int Load_MESA_release_buffers(void) +{ + int numFailed = 0; + _ptrc_glXReleaseBuffersMESA = (Bool (CODEGEN_FUNCPTR *)(Display *, GLXDrawable))IntGetProcAddress("glXReleaseBuffersMESA"); + if(!_ptrc_glXReleaseBuffersMESA) numFailed++; + return numFailed; +} + +Bool (CODEGEN_FUNCPTR *_ptrc_glXSet3DfxModeMESA)(int) = NULL; + +static int Load_MESA_set_3dfx_mode(void) +{ + int numFailed = 0; + _ptrc_glXSet3DfxModeMESA = (Bool (CODEGEN_FUNCPTR *)(int))IntGetProcAddress("glXSet3DfxModeMESA"); + if(!_ptrc_glXSet3DfxModeMESA) numFailed++; + return numFailed; +} + +void (CODEGEN_FUNCPTR *_ptrc_glXCopyImageSubDataNV)(Display *, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei) = NULL; + +static int Load_NV_copy_image(void) +{ + int numFailed = 0; + _ptrc_glXCopyImageSubDataNV = (void (CODEGEN_FUNCPTR *)(Display *, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei))IntGetProcAddress("glXCopyImageSubDataNV"); + if(!_ptrc_glXCopyImageSubDataNV) numFailed++; + return numFailed; +} + +int (CODEGEN_FUNCPTR *_ptrc_glXBindVideoDeviceNV)(Display *, unsigned int, unsigned int, const int *) = NULL; +unsigned int * (CODEGEN_FUNCPTR *_ptrc_glXEnumerateVideoDevicesNV)(Display *, int, int *) = NULL; + +static int Load_NV_present_video(void) +{ + int numFailed = 0; + _ptrc_glXBindVideoDeviceNV = (int (CODEGEN_FUNCPTR *)(Display *, unsigned int, unsigned int, const int *))IntGetProcAddress("glXBindVideoDeviceNV"); + if(!_ptrc_glXBindVideoDeviceNV) numFailed++; + _ptrc_glXEnumerateVideoDevicesNV = (unsigned int * (CODEGEN_FUNCPTR *)(Display *, int, int *))IntGetProcAddress("glXEnumerateVideoDevicesNV"); + if(!_ptrc_glXEnumerateVideoDevicesNV) numFailed++; + return numFailed; +} + +Bool (CODEGEN_FUNCPTR *_ptrc_glXBindSwapBarrierNV)(Display *, GLuint, GLuint) = NULL; +Bool (CODEGEN_FUNCPTR *_ptrc_glXJoinSwapGroupNV)(Display *, GLXDrawable, GLuint) = NULL; +Bool (CODEGEN_FUNCPTR *_ptrc_glXQueryFrameCountNV)(Display *, int, GLuint *) = NULL; +Bool (CODEGEN_FUNCPTR *_ptrc_glXQueryMaxSwapGroupsNV)(Display *, int, GLuint *, GLuint *) = NULL; +Bool (CODEGEN_FUNCPTR *_ptrc_glXQuerySwapGroupNV)(Display *, GLXDrawable, GLuint *, GLuint *) = NULL; +Bool (CODEGEN_FUNCPTR *_ptrc_glXResetFrameCountNV)(Display *, int) = NULL; + +static int Load_NV_swap_group(void) +{ + int numFailed = 0; + _ptrc_glXBindSwapBarrierNV = (Bool (CODEGEN_FUNCPTR *)(Display *, GLuint, GLuint))IntGetProcAddress("glXBindSwapBarrierNV"); + if(!_ptrc_glXBindSwapBarrierNV) numFailed++; + _ptrc_glXJoinSwapGroupNV = (Bool (CODEGEN_FUNCPTR *)(Display *, GLXDrawable, GLuint))IntGetProcAddress("glXJoinSwapGroupNV"); + if(!_ptrc_glXJoinSwapGroupNV) numFailed++; + _ptrc_glXQueryFrameCountNV = (Bool (CODEGEN_FUNCPTR *)(Display *, int, GLuint *))IntGetProcAddress("glXQueryFrameCountNV"); + if(!_ptrc_glXQueryFrameCountNV) numFailed++; + _ptrc_glXQueryMaxSwapGroupsNV = (Bool (CODEGEN_FUNCPTR *)(Display *, int, GLuint *, GLuint *))IntGetProcAddress("glXQueryMaxSwapGroupsNV"); + if(!_ptrc_glXQueryMaxSwapGroupsNV) numFailed++; + _ptrc_glXQuerySwapGroupNV = (Bool (CODEGEN_FUNCPTR *)(Display *, GLXDrawable, GLuint *, GLuint *))IntGetProcAddress("glXQuerySwapGroupNV"); + if(!_ptrc_glXQuerySwapGroupNV) numFailed++; + _ptrc_glXResetFrameCountNV = (Bool (CODEGEN_FUNCPTR *)(Display *, int))IntGetProcAddress("glXResetFrameCountNV"); + if(!_ptrc_glXResetFrameCountNV) numFailed++; + return numFailed; +} + +int (CODEGEN_FUNCPTR *_ptrc_glXBindVideoCaptureDeviceNV)(Display *, unsigned int, GLXVideoCaptureDeviceNV) = NULL; +GLXVideoCaptureDeviceNV * (CODEGEN_FUNCPTR *_ptrc_glXEnumerateVideoCaptureDevicesNV)(Display *, int, int *) = NULL; +void (CODEGEN_FUNCPTR *_ptrc_glXLockVideoCaptureDeviceNV)(Display *, GLXVideoCaptureDeviceNV) = NULL; +int (CODEGEN_FUNCPTR *_ptrc_glXQueryVideoCaptureDeviceNV)(Display *, GLXVideoCaptureDeviceNV, int, int *) = NULL; +void (CODEGEN_FUNCPTR *_ptrc_glXReleaseVideoCaptureDeviceNV)(Display *, GLXVideoCaptureDeviceNV) = NULL; + +static int Load_NV_video_capture(void) +{ + int numFailed = 0; + _ptrc_glXBindVideoCaptureDeviceNV = (int (CODEGEN_FUNCPTR *)(Display *, unsigned int, GLXVideoCaptureDeviceNV))IntGetProcAddress("glXBindVideoCaptureDeviceNV"); + if(!_ptrc_glXBindVideoCaptureDeviceNV) numFailed++; + _ptrc_glXEnumerateVideoCaptureDevicesNV = (GLXVideoCaptureDeviceNV * (CODEGEN_FUNCPTR *)(Display *, int, int *))IntGetProcAddress("glXEnumerateVideoCaptureDevicesNV"); + if(!_ptrc_glXEnumerateVideoCaptureDevicesNV) numFailed++; + _ptrc_glXLockVideoCaptureDeviceNV = (void (CODEGEN_FUNCPTR *)(Display *, GLXVideoCaptureDeviceNV))IntGetProcAddress("glXLockVideoCaptureDeviceNV"); + if(!_ptrc_glXLockVideoCaptureDeviceNV) numFailed++; + _ptrc_glXQueryVideoCaptureDeviceNV = (int (CODEGEN_FUNCPTR *)(Display *, GLXVideoCaptureDeviceNV, int, int *))IntGetProcAddress("glXQueryVideoCaptureDeviceNV"); + if(!_ptrc_glXQueryVideoCaptureDeviceNV) numFailed++; + _ptrc_glXReleaseVideoCaptureDeviceNV = (void (CODEGEN_FUNCPTR *)(Display *, GLXVideoCaptureDeviceNV))IntGetProcAddress("glXReleaseVideoCaptureDeviceNV"); + if(!_ptrc_glXReleaseVideoCaptureDeviceNV) numFailed++; + return numFailed; +} + +int (CODEGEN_FUNCPTR *_ptrc_glXBindVideoImageNV)(Display *, GLXVideoDeviceNV, GLXPbuffer, int) = NULL; +int (CODEGEN_FUNCPTR *_ptrc_glXGetVideoDeviceNV)(Display *, int, int, GLXVideoDeviceNV *) = NULL; +int (CODEGEN_FUNCPTR *_ptrc_glXGetVideoInfoNV)(Display *, int, GLXVideoDeviceNV, unsigned long *, unsigned long *) = NULL; +int (CODEGEN_FUNCPTR *_ptrc_glXReleaseVideoDeviceNV)(Display *, int, GLXVideoDeviceNV) = NULL; +int (CODEGEN_FUNCPTR *_ptrc_glXReleaseVideoImageNV)(Display *, GLXPbuffer) = NULL; +int (CODEGEN_FUNCPTR *_ptrc_glXSendPbufferToVideoNV)(Display *, GLXPbuffer, int, unsigned long *, GLboolean) = NULL; + +static int Load_NV_video_output(void) +{ + int numFailed = 0; + _ptrc_glXBindVideoImageNV = (int (CODEGEN_FUNCPTR *)(Display *, GLXVideoDeviceNV, GLXPbuffer, int))IntGetProcAddress("glXBindVideoImageNV"); + if(!_ptrc_glXBindVideoImageNV) numFailed++; + _ptrc_glXGetVideoDeviceNV = (int (CODEGEN_FUNCPTR *)(Display *, int, int, GLXVideoDeviceNV *))IntGetProcAddress("glXGetVideoDeviceNV"); + if(!_ptrc_glXGetVideoDeviceNV) numFailed++; + _ptrc_glXGetVideoInfoNV = (int (CODEGEN_FUNCPTR *)(Display *, int, GLXVideoDeviceNV, unsigned long *, unsigned long *))IntGetProcAddress("glXGetVideoInfoNV"); + if(!_ptrc_glXGetVideoInfoNV) numFailed++; + _ptrc_glXReleaseVideoDeviceNV = (int (CODEGEN_FUNCPTR *)(Display *, int, GLXVideoDeviceNV))IntGetProcAddress("glXReleaseVideoDeviceNV"); + if(!_ptrc_glXReleaseVideoDeviceNV) numFailed++; + _ptrc_glXReleaseVideoImageNV = (int (CODEGEN_FUNCPTR *)(Display *, GLXPbuffer))IntGetProcAddress("glXReleaseVideoImageNV"); + if(!_ptrc_glXReleaseVideoImageNV) numFailed++; + _ptrc_glXSendPbufferToVideoNV = (int (CODEGEN_FUNCPTR *)(Display *, GLXPbuffer, int, unsigned long *, GLboolean))IntGetProcAddress("glXSendPbufferToVideoNV"); + if(!_ptrc_glXSendPbufferToVideoNV) numFailed++; + return numFailed; +} + typedef int (*PFN_LOADFUNCPOINTERS)(void); typedef struct glx_StrToExtMap_s { @@ -126,23 +306,45 @@ typedef struct glx_StrToExtMap_s PFN_LOADFUNCPOINTERS LoadExtension; } glx_StrToExtMap; -static glx_StrToExtMap ExtensionMap[13] = { - {"GLX_NV_copy_image", &glx_ext_NV_copy_image, Load_NV_copy_image}, +static glx_StrToExtMap ExtensionMap[35] = { + {"GLX_AMD_gpu_association", &glx_ext_AMD_gpu_association, NULL}, {"GLX_ARB_create_context", &glx_ext_ARB_create_context, Load_ARB_create_context}, {"GLX_ARB_create_context_profile", &glx_ext_ARB_create_context_profile, NULL}, {"GLX_ARB_create_context_robustness", &glx_ext_ARB_create_context_robustness, NULL}, {"GLX_ARB_fbconfig_float", &glx_ext_ARB_fbconfig_float, NULL}, {"GLX_ARB_framebuffer_sRGB", &glx_ext_ARB_framebuffer_sRGB, NULL}, + {"GLX_ARB_get_proc_address", &glx_ext_ARB_get_proc_address, Load_ARB_get_proc_address}, {"GLX_ARB_multisample", &glx_ext_ARB_multisample, NULL}, + {"GLX_ARB_robustness_application_isolation", &glx_ext_ARB_robustness_application_isolation, NULL}, + {"GLX_ARB_robustness_share_group_isolation", &glx_ext_ARB_robustness_share_group_isolation, NULL}, + {"GLX_ARB_vertex_buffer_object", &glx_ext_ARB_vertex_buffer_object, NULL}, + {"GLX_EXT_buffer_age", &glx_ext_EXT_buffer_age, NULL}, {"GLX_EXT_create_context_es2_profile", &glx_ext_EXT_create_context_es2_profile, NULL}, + {"GLX_EXT_create_context_es_profile", &glx_ext_EXT_create_context_es_profile, NULL}, {"GLX_EXT_fbconfig_packed_float", &glx_ext_EXT_fbconfig_packed_float, NULL}, {"GLX_EXT_framebuffer_sRGB", &glx_ext_EXT_framebuffer_sRGB, NULL}, {"GLX_EXT_import_context", &glx_ext_EXT_import_context, Load_EXT_import_context}, {"GLX_EXT_swap_control", &glx_ext_EXT_swap_control, Load_EXT_swap_control}, {"GLX_EXT_swap_control_tear", &glx_ext_EXT_swap_control_tear, NULL}, + {"GLX_EXT_texture_from_pixmap", &glx_ext_EXT_texture_from_pixmap, Load_EXT_texture_from_pixmap}, + {"GLX_EXT_visual_info", &glx_ext_EXT_visual_info, NULL}, + {"GLX_EXT_visual_rating", &glx_ext_EXT_visual_rating, NULL}, + {"GLX_INTEL_swap_event", &glx_ext_INTEL_swap_event, NULL}, + {"GLX_MESA_agp_offset", &glx_ext_MESA_agp_offset, Load_MESA_agp_offset}, + {"GLX_MESA_copy_sub_buffer", &glx_ext_MESA_copy_sub_buffer, Load_MESA_copy_sub_buffer}, + {"GLX_MESA_pixmap_colormap", &glx_ext_MESA_pixmap_colormap, Load_MESA_pixmap_colormap}, + {"GLX_MESA_release_buffers", &glx_ext_MESA_release_buffers, Load_MESA_release_buffers}, + {"GLX_MESA_set_3dfx_mode", &glx_ext_MESA_set_3dfx_mode, Load_MESA_set_3dfx_mode}, + {"GLX_NV_copy_image", &glx_ext_NV_copy_image, Load_NV_copy_image}, + {"GLX_NV_float_buffer", &glx_ext_NV_float_buffer, NULL}, + {"GLX_NV_multisample_coverage", &glx_ext_NV_multisample_coverage, NULL}, + {"GLX_NV_present_video", &glx_ext_NV_present_video, Load_NV_present_video}, + {"GLX_NV_swap_group", &glx_ext_NV_swap_group, Load_NV_swap_group}, + {"GLX_NV_video_capture", &glx_ext_NV_video_capture, Load_NV_video_capture}, + {"GLX_NV_video_output", &glx_ext_NV_video_output, Load_NV_video_output}, }; -static int g_extensionMapSize = 13; +static int g_extensionMapSize = 35; static glx_StrToExtMap *FindExtEntry(const char *extensionName) { @@ -159,19 +361,41 @@ static glx_StrToExtMap *FindExtEntry(const char *extensionName) static void ClearExtensionVars(void) { - glx_ext_NV_copy_image = glx_LOAD_FAILED; + glx_ext_AMD_gpu_association = glx_LOAD_FAILED; glx_ext_ARB_create_context = glx_LOAD_FAILED; glx_ext_ARB_create_context_profile = glx_LOAD_FAILED; glx_ext_ARB_create_context_robustness = glx_LOAD_FAILED; glx_ext_ARB_fbconfig_float = glx_LOAD_FAILED; glx_ext_ARB_framebuffer_sRGB = glx_LOAD_FAILED; + glx_ext_ARB_get_proc_address = glx_LOAD_FAILED; glx_ext_ARB_multisample = glx_LOAD_FAILED; + glx_ext_ARB_robustness_application_isolation = glx_LOAD_FAILED; + glx_ext_ARB_robustness_share_group_isolation = glx_LOAD_FAILED; + glx_ext_ARB_vertex_buffer_object = glx_LOAD_FAILED; + glx_ext_EXT_buffer_age = glx_LOAD_FAILED; glx_ext_EXT_create_context_es2_profile = glx_LOAD_FAILED; + glx_ext_EXT_create_context_es_profile = glx_LOAD_FAILED; glx_ext_EXT_fbconfig_packed_float = glx_LOAD_FAILED; glx_ext_EXT_framebuffer_sRGB = glx_LOAD_FAILED; glx_ext_EXT_import_context = glx_LOAD_FAILED; glx_ext_EXT_swap_control = glx_LOAD_FAILED; glx_ext_EXT_swap_control_tear = glx_LOAD_FAILED; + glx_ext_EXT_texture_from_pixmap = glx_LOAD_FAILED; + glx_ext_EXT_visual_info = glx_LOAD_FAILED; + glx_ext_EXT_visual_rating = glx_LOAD_FAILED; + glx_ext_INTEL_swap_event = glx_LOAD_FAILED; + glx_ext_MESA_agp_offset = glx_LOAD_FAILED; + glx_ext_MESA_copy_sub_buffer = glx_LOAD_FAILED; + glx_ext_MESA_pixmap_colormap = glx_LOAD_FAILED; + glx_ext_MESA_release_buffers = glx_LOAD_FAILED; + glx_ext_MESA_set_3dfx_mode = glx_LOAD_FAILED; + glx_ext_NV_copy_image = glx_LOAD_FAILED; + glx_ext_NV_float_buffer = glx_LOAD_FAILED; + glx_ext_NV_multisample_coverage = glx_LOAD_FAILED; + glx_ext_NV_present_video = glx_LOAD_FAILED; + glx_ext_NV_swap_group = glx_LOAD_FAILED; + glx_ext_NV_video_capture = glx_LOAD_FAILED; + glx_ext_NV_video_output = glx_LOAD_FAILED; } diff --git a/libobs-opengl/GL/glx_obs.h b/libobs-opengl/GL/glx_obs.h index 87c8c951361324661f72f1ec77f2cce2aa38ca5f..46f95a76f62e80272b0628a283433e2936ce8bac 100644 --- a/libobs-opengl/GL/glx_obs.h +++ b/libobs-opengl/GL/glx_obs.h @@ -119,19 +119,52 @@ typedef unsigned __int64 uint64_t; extern "C" { #endif /*__cplusplus*/ -extern int glx_ext_NV_copy_image; +extern int glx_ext_AMD_gpu_association; extern int glx_ext_ARB_create_context; extern int glx_ext_ARB_create_context_profile; extern int glx_ext_ARB_create_context_robustness; extern int glx_ext_ARB_fbconfig_float; extern int glx_ext_ARB_framebuffer_sRGB; +extern int glx_ext_ARB_get_proc_address; extern int glx_ext_ARB_multisample; +extern int glx_ext_ARB_robustness_application_isolation; +extern int glx_ext_ARB_robustness_share_group_isolation; +extern int glx_ext_ARB_vertex_buffer_object; +extern int glx_ext_EXT_buffer_age; extern int glx_ext_EXT_create_context_es2_profile; +extern int glx_ext_EXT_create_context_es_profile; extern int glx_ext_EXT_fbconfig_packed_float; extern int glx_ext_EXT_framebuffer_sRGB; extern int glx_ext_EXT_import_context; extern int glx_ext_EXT_swap_control; extern int glx_ext_EXT_swap_control_tear; +extern int glx_ext_EXT_texture_from_pixmap; +extern int glx_ext_EXT_visual_info; +extern int glx_ext_EXT_visual_rating; +extern int glx_ext_INTEL_swap_event; +extern int glx_ext_MESA_agp_offset; +extern int glx_ext_MESA_copy_sub_buffer; +extern int glx_ext_MESA_pixmap_colormap; +extern int glx_ext_MESA_release_buffers; +extern int glx_ext_MESA_set_3dfx_mode; +extern int glx_ext_NV_copy_image; +extern int glx_ext_NV_float_buffer; +extern int glx_ext_NV_multisample_coverage; +extern int glx_ext_NV_present_video; +extern int glx_ext_NV_swap_group; +extern int glx_ext_NV_video_capture; +extern int glx_ext_NV_video_output; + +#define GLX_GPU_CLOCK_AMD 0x21A4 +#define GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 +#define GLX_GPU_NUM_PIPES_AMD 0x21A5 +#define GLX_GPU_NUM_RB_AMD 0x21A7 +#define GLX_GPU_NUM_SIMD_AMD 0x21A6 +#define GLX_GPU_NUM_SPI_AMD 0x21A8 +#define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 +#define GLX_GPU_RAM_AMD 0x21A3 +#define GLX_GPU_RENDERER_STRING_AMD 0x1F01 +#define GLX_GPU_VENDOR_AMD 0x1F00 #define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001 #define GLX_CONTEXT_FLAGS_ARB 0x2094 @@ -156,8 +189,18 @@ extern int glx_ext_EXT_swap_control_tear; #define GLX_SAMPLES_ARB 100001 #define GLX_SAMPLE_BUFFERS_ARB 100000 +#define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 + +/*Copied GLX_CONTEXT_RESET_ISOLATION_BIT_ARB From: ARB_robustness_application_isolation*/ + +#define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095 + +#define GLX_BACK_BUFFER_AGE_EXT 0x20F4 + #define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 +#define GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 + #define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 #define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 @@ -172,11 +215,92 @@ extern int glx_ext_EXT_swap_control_tear; #define GLX_LATE_SWAPS_TEAR_EXT 0x20F3 -#ifndef GLX_NV_copy_image -#define GLX_NV_copy_image 1 -extern void (CODEGEN_FUNCPTR *_ptrc_glXCopyImageSubDataNV)(Display *, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei); -#define glXCopyImageSubDataNV _ptrc_glXCopyImageSubDataNV -#endif /*GLX_NV_copy_image*/ +#define GLX_AUX0_EXT 0x20E2 +#define GLX_AUX1_EXT 0x20E3 +#define GLX_AUX2_EXT 0x20E4 +#define GLX_AUX3_EXT 0x20E5 +#define GLX_AUX4_EXT 0x20E6 +#define GLX_AUX5_EXT 0x20E7 +#define GLX_AUX6_EXT 0x20E8 +#define GLX_AUX7_EXT 0x20E9 +#define GLX_AUX8_EXT 0x20EA +#define GLX_AUX9_EXT 0x20EB +#define GLX_BACK_EXT 0x20E0 +#define GLX_BACK_LEFT_EXT 0x20E0 +#define GLX_BACK_RIGHT_EXT 0x20E1 +#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 +#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 +#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 +#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 +#define GLX_FRONT_EXT 0x20DE +#define GLX_FRONT_LEFT_EXT 0x20DE +#define GLX_FRONT_RIGHT_EXT 0x20DF +#define GLX_MIPMAP_TEXTURE_EXT 0x20D7 +#define GLX_TEXTURE_1D_BIT_EXT 0x00000001 +#define GLX_TEXTURE_1D_EXT 0x20DB +#define GLX_TEXTURE_2D_BIT_EXT 0x00000002 +#define GLX_TEXTURE_2D_EXT 0x20DC +#define GLX_TEXTURE_FORMAT_EXT 0x20D5 +#define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 +#define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA +#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 +#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 +#define GLX_TEXTURE_RECTANGLE_EXT 0x20DD +#define GLX_TEXTURE_TARGET_EXT 0x20D6 +#define GLX_Y_INVERTED_EXT 0x20D4 + +#define GLX_DIRECT_COLOR_EXT 0x8003 +#define GLX_GRAY_SCALE_EXT 0x8006 +#define GLX_NONE_EXT 0x8000 +#define GLX_PSEUDO_COLOR_EXT 0x8004 +#define GLX_STATIC_COLOR_EXT 0x8005 +#define GLX_STATIC_GRAY_EXT 0x8007 +#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 +#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 +#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 +#define GLX_TRANSPARENT_INDEX_EXT 0x8009 +#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 +#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 +#define GLX_TRANSPARENT_RGB_EXT 0x8008 +#define GLX_TRANSPARENT_TYPE_EXT 0x23 +#define GLX_TRUE_COLOR_EXT 0x8002 +#define GLX_X_VISUAL_TYPE_EXT 0x22 + +/*Copied GLX_NONE_EXT From: EXT_visual_info*/ +#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D +#define GLX_SLOW_VISUAL_EXT 0x8001 +#define GLX_VISUAL_CAVEAT_EXT 0x20 + +#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000 +#define GLX_COPY_COMPLETE_INTEL 0x8181 +#define GLX_EXCHANGE_COMPLETE_INTEL 0x8180 +#define GLX_FLIP_COMPLETE_INTEL 0x8182 + +#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 +#define GLX_3DFX_WINDOW_MODE_MESA 0x1 + +#define GLX_FLOAT_COMPONENTS_NV 0x20B0 + +#define GLX_COLOR_SAMPLES_NV 0x20B3 +#define GLX_COVERAGE_SAMPLES_NV 100001 + +#define GLX_NUM_VIDEO_SLOTS_NV 0x20F0 + +#define GLX_DEVICE_ID_NV 0x20CD +#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF +#define GLX_UNIQUE_ID_NV 0x20CE + +#define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 +#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 +#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 +#define GLX_VIDEO_OUT_COLOR_NV 0x20C3 +#define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 +#define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 +#define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA +#define GLX_VIDEO_OUT_FRAME_NV 0x20C8 +#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB +#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC + #ifndef GLX_ARB_create_context #define GLX_ARB_create_context 1 @@ -188,6 +312,17 @@ extern GLXContext (CODEGEN_FUNCPTR *_ptrc_glXCreateContextAttribsARB)(Display *, +#ifndef GLX_ARB_get_proc_address +#define GLX_ARB_get_proc_address 1 +extern __GLXextFuncPtr (CODEGEN_FUNCPTR *_ptrc_glXGetProcAddressARB)(const GLubyte *); +#define glXGetProcAddressARB _ptrc_glXGetProcAddressARB +#endif /*GLX_ARB_get_proc_address*/ + + + + + + @@ -213,6 +348,109 @@ extern void (CODEGEN_FUNCPTR *_ptrc_glXSwapIntervalEXT)(Display *, GLXDrawable, #endif /*GLX_EXT_swap_control*/ +#ifndef GLX_EXT_texture_from_pixmap +#define GLX_EXT_texture_from_pixmap 1 +extern void (CODEGEN_FUNCPTR *_ptrc_glXBindTexImageEXT)(Display *, GLXDrawable, int, const int *); +#define glXBindTexImageEXT _ptrc_glXBindTexImageEXT +extern void (CODEGEN_FUNCPTR *_ptrc_glXReleaseTexImageEXT)(Display *, GLXDrawable, int); +#define glXReleaseTexImageEXT _ptrc_glXReleaseTexImageEXT +#endif /*GLX_EXT_texture_from_pixmap*/ + + + + +#ifndef GLX_MESA_agp_offset +#define GLX_MESA_agp_offset 1 +extern unsigned int (CODEGEN_FUNCPTR *_ptrc_glXGetAGPOffsetMESA)(const void *); +#define glXGetAGPOffsetMESA _ptrc_glXGetAGPOffsetMESA +#endif /*GLX_MESA_agp_offset*/ + +#ifndef GLX_MESA_copy_sub_buffer +#define GLX_MESA_copy_sub_buffer 1 +extern void (CODEGEN_FUNCPTR *_ptrc_glXCopySubBufferMESA)(Display *, GLXDrawable, int, int, int, int); +#define glXCopySubBufferMESA _ptrc_glXCopySubBufferMESA +#endif /*GLX_MESA_copy_sub_buffer*/ + +#ifndef GLX_MESA_pixmap_colormap +#define GLX_MESA_pixmap_colormap 1 +extern GLXPixmap (CODEGEN_FUNCPTR *_ptrc_glXCreateGLXPixmapMESA)(Display *, XVisualInfo *, Pixmap, Colormap); +#define glXCreateGLXPixmapMESA _ptrc_glXCreateGLXPixmapMESA +#endif /*GLX_MESA_pixmap_colormap*/ + +#ifndef GLX_MESA_release_buffers +#define GLX_MESA_release_buffers 1 +extern Bool (CODEGEN_FUNCPTR *_ptrc_glXReleaseBuffersMESA)(Display *, GLXDrawable); +#define glXReleaseBuffersMESA _ptrc_glXReleaseBuffersMESA +#endif /*GLX_MESA_release_buffers*/ + +#ifndef GLX_MESA_set_3dfx_mode +#define GLX_MESA_set_3dfx_mode 1 +extern Bool (CODEGEN_FUNCPTR *_ptrc_glXSet3DfxModeMESA)(int); +#define glXSet3DfxModeMESA _ptrc_glXSet3DfxModeMESA +#endif /*GLX_MESA_set_3dfx_mode*/ + +#ifndef GLX_NV_copy_image +#define GLX_NV_copy_image 1 +extern void (CODEGEN_FUNCPTR *_ptrc_glXCopyImageSubDataNV)(Display *, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLXContext, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei); +#define glXCopyImageSubDataNV _ptrc_glXCopyImageSubDataNV +#endif /*GLX_NV_copy_image*/ + + + +#ifndef GLX_NV_present_video +#define GLX_NV_present_video 1 +extern int (CODEGEN_FUNCPTR *_ptrc_glXBindVideoDeviceNV)(Display *, unsigned int, unsigned int, const int *); +#define glXBindVideoDeviceNV _ptrc_glXBindVideoDeviceNV +extern unsigned int * (CODEGEN_FUNCPTR *_ptrc_glXEnumerateVideoDevicesNV)(Display *, int, int *); +#define glXEnumerateVideoDevicesNV _ptrc_glXEnumerateVideoDevicesNV +#endif /*GLX_NV_present_video*/ + +#ifndef GLX_NV_swap_group +#define GLX_NV_swap_group 1 +extern Bool (CODEGEN_FUNCPTR *_ptrc_glXBindSwapBarrierNV)(Display *, GLuint, GLuint); +#define glXBindSwapBarrierNV _ptrc_glXBindSwapBarrierNV +extern Bool (CODEGEN_FUNCPTR *_ptrc_glXJoinSwapGroupNV)(Display *, GLXDrawable, GLuint); +#define glXJoinSwapGroupNV _ptrc_glXJoinSwapGroupNV +extern Bool (CODEGEN_FUNCPTR *_ptrc_glXQueryFrameCountNV)(Display *, int, GLuint *); +#define glXQueryFrameCountNV _ptrc_glXQueryFrameCountNV +extern Bool (CODEGEN_FUNCPTR *_ptrc_glXQueryMaxSwapGroupsNV)(Display *, int, GLuint *, GLuint *); +#define glXQueryMaxSwapGroupsNV _ptrc_glXQueryMaxSwapGroupsNV +extern Bool (CODEGEN_FUNCPTR *_ptrc_glXQuerySwapGroupNV)(Display *, GLXDrawable, GLuint *, GLuint *); +#define glXQuerySwapGroupNV _ptrc_glXQuerySwapGroupNV +extern Bool (CODEGEN_FUNCPTR *_ptrc_glXResetFrameCountNV)(Display *, int); +#define glXResetFrameCountNV _ptrc_glXResetFrameCountNV +#endif /*GLX_NV_swap_group*/ + +#ifndef GLX_NV_video_capture +#define GLX_NV_video_capture 1 +extern int (CODEGEN_FUNCPTR *_ptrc_glXBindVideoCaptureDeviceNV)(Display *, unsigned int, GLXVideoCaptureDeviceNV); +#define glXBindVideoCaptureDeviceNV _ptrc_glXBindVideoCaptureDeviceNV +extern GLXVideoCaptureDeviceNV * (CODEGEN_FUNCPTR *_ptrc_glXEnumerateVideoCaptureDevicesNV)(Display *, int, int *); +#define glXEnumerateVideoCaptureDevicesNV _ptrc_glXEnumerateVideoCaptureDevicesNV +extern void (CODEGEN_FUNCPTR *_ptrc_glXLockVideoCaptureDeviceNV)(Display *, GLXVideoCaptureDeviceNV); +#define glXLockVideoCaptureDeviceNV _ptrc_glXLockVideoCaptureDeviceNV +extern int (CODEGEN_FUNCPTR *_ptrc_glXQueryVideoCaptureDeviceNV)(Display *, GLXVideoCaptureDeviceNV, int, int *); +#define glXQueryVideoCaptureDeviceNV _ptrc_glXQueryVideoCaptureDeviceNV +extern void (CODEGEN_FUNCPTR *_ptrc_glXReleaseVideoCaptureDeviceNV)(Display *, GLXVideoCaptureDeviceNV); +#define glXReleaseVideoCaptureDeviceNV _ptrc_glXReleaseVideoCaptureDeviceNV +#endif /*GLX_NV_video_capture*/ + +#ifndef GLX_NV_video_output +#define GLX_NV_video_output 1 +extern int (CODEGEN_FUNCPTR *_ptrc_glXBindVideoImageNV)(Display *, GLXVideoDeviceNV, GLXPbuffer, int); +#define glXBindVideoImageNV _ptrc_glXBindVideoImageNV +extern int (CODEGEN_FUNCPTR *_ptrc_glXGetVideoDeviceNV)(Display *, int, int, GLXVideoDeviceNV *); +#define glXGetVideoDeviceNV _ptrc_glXGetVideoDeviceNV +extern int (CODEGEN_FUNCPTR *_ptrc_glXGetVideoInfoNV)(Display *, int, GLXVideoDeviceNV, unsigned long *, unsigned long *); +#define glXGetVideoInfoNV _ptrc_glXGetVideoInfoNV +extern int (CODEGEN_FUNCPTR *_ptrc_glXReleaseVideoDeviceNV)(Display *, int, GLXVideoDeviceNV); +#define glXReleaseVideoDeviceNV _ptrc_glXReleaseVideoDeviceNV +extern int (CODEGEN_FUNCPTR *_ptrc_glXReleaseVideoImageNV)(Display *, GLXPbuffer); +#define glXReleaseVideoImageNV _ptrc_glXReleaseVideoImageNV +extern int (CODEGEN_FUNCPTR *_ptrc_glXSendPbufferToVideoNV)(Display *, GLXPbuffer, int, unsigned long *, GLboolean); +#define glXSendPbufferToVideoNV _ptrc_glXSendPbufferToVideoNV +#endif /*GLX_NV_video_output*/ + enum glx_LoadStatus { glx_LOAD_FAILED = 0, diff --git a/libobs-opengl/GL/wgl_obs.c b/libobs-opengl/GL/wgl_obs.c index 86c9ab68d2b99f767e3765c48e690dbfde1230ef..6bb95bd6e5e02a274f5e9b4a0b580141a2c8cd3b 100644 --- a/libobs-opengl/GL/wgl_obs.c +++ b/libobs-opengl/GL/wgl_obs.c @@ -7,7 +7,7 @@ #if defined(__APPLE__) #include -static void* AppleGLGetProcAddress (const const char *name) +static void* AppleGLGetProcAddress (const char *name) { static void* image = NULL;