فهرست منبع

More extensions, less bugs

Zachary Lund 11 سال پیش
والد
کامیت
92f253d65f
4فایلهای تغییر یافته به همراه484 افزوده شده و 22 حذف شده
  1. 1 1
      libobs-opengl/GL/gl_obs.c
  2. 238 14
      libobs-opengl/GL/glx_obs.c
  3. 244 6
      libobs-opengl/GL/glx_obs.h
  4. 1 1
      libobs-opengl/GL/wgl_obs.c

+ 1 - 1
libobs-opengl/GL/gl_obs.c

@@ -7,7 +7,7 @@
 #if defined(__APPLE__)
 #include <dlfcn.h>
 
-static void* AppleGLGetProcAddress (const const char *name)
+static void* AppleGLGetProcAddress (const char *name)
 {
 	static void* image = NULL;
 	

+ 238 - 14
libobs-opengl/GL/glx_obs.c

@@ -7,7 +7,7 @@
 #if defined(__APPLE__)
 #include <dlfcn.h>
 
-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;
 }
 
 

+ 244 - 6
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,

+ 1 - 1
libobs-opengl/GL/wgl_obs.c

@@ -7,7 +7,7 @@
 #if defined(__APPLE__)
 #include <dlfcn.h>
 
-static void* AppleGLGetProcAddress (const const char *name)
+static void* AppleGLGetProcAddress (const char *name)
 {
 	static void* image = NULL;