summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/glx/apple/apple_glapi.c12
-rw-r--r--src/mapi/glapi/gen/gl_gentable.py14
-rw-r--r--src/mapi/glapi/glapi.h3
3 files changed, 22 insertions, 7 deletions
diff --git a/src/glx/apple/apple_glapi.c b/src/glx/apple/apple_glapi.c
index 4d19f7f6a3e..f2248ab01a2 100644
--- a/src/glx/apple/apple_glapi.c
+++ b/src/glx/apple/apple_glapi.c
@@ -41,7 +41,6 @@
#include "main/glheader.h"
#include "glapi.h"
#include "glapitable.h"
-#include "main/dispatch.h"
#include "apple_glx.h"
#include "apple_xgl_api.h"
@@ -61,12 +60,11 @@ static void _apple_glapi_create_table(void) {
assert(__applegl_api);
memcpy(__applegl_api, __ogl_framework_api, sizeof(struct _glapi_table));
- SET_ReadPixels(__applegl_api, __applegl_glReadPixels);
- SET_CopyPixels(__applegl_api, __applegl_glCopyPixels);
- SET_CopyColorTable(__applegl_api, __applegl_glCopyColorTable);
- SET_DrawBuffer(__applegl_api, __applegl_glDrawBuffer);
- SET_DrawBuffers(__applegl_api, __applegl_glDrawBuffers);
- SET_Viewport(__applegl_api, __applegl_glViewport);
+ _glapi_table_patch(__applegl_api, "ReadPixels", __applegl_glReadPixels);
+ _glapi_table_patch(__applegl_api, "CopyPixels", __applegl_glCopyPixels);
+ _glapi_table_patch(__applegl_api, "CopyColorTable", __applegl_glCopyColorTable);
+ _glapi_table_patch(__applegl_api, "DrawBuffers", __applegl_glDrawBuffer);
+ _glapi_table_patch(__applegl_api, "Viewport", __applegl_glViewport);
}
void apple_glapi_set_dispatch(void) {
diff --git a/src/mapi/glapi/gen/gl_gentable.py b/src/mapi/glapi/gen/gl_gentable.py
index 2f54d1d5792..50153bbabd5 100644
--- a/src/mapi/glapi/gen/gl_gentable.py
+++ b/src/mapi/glapi/gen/gl_gentable.py
@@ -56,6 +56,7 @@ header = """/* GLXEXT is the define used in the xserver when the GLX extension i
#endif
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#include "main/glheader.h"
@@ -144,6 +145,19 @@ _glapi_create_table_from_handle(void *handle, const char *symbol_prefix) {
return disp;
}
+
+void
+ _glapi_table_patch(struct _glapi_table *table, const char *name, void *wrapper)
+{
+ for (int func_index = 0; func_index < GLAPI_TABLE_COUNT; ++func_index) {
+ if (!strcmp(_glapi_table_func_names[func_index], name)) {
+ ((void **)table)[func_index] = wrapper;
+ return;
+ }
+ }
+ fprintf(stderr, "could not patch %s in dispatch table\\n", name);
+}
+
"""
diff --git a/src/mapi/glapi/glapi.h b/src/mapi/glapi/glapi.h
index f1ad4c1b5e8..d5d4e0a03a6 100644
--- a/src/mapi/glapi/glapi.h
+++ b/src/mapi/glapi/glapi.h
@@ -161,6 +161,9 @@ _glapi_get_proc_name(unsigned int offset);
#if defined(GLX_USE_APPLEGL) || defined(GLX_USE_WINDOWSGL)
_GLAPI_EXPORT struct _glapi_table *
_glapi_create_table_from_handle(void *handle, const char *symbol_prefix);
+
+_GLAPI_EXPORT void
+_glapi_table_patch(struct _glapi_table *, const char *name, void *wrapper);
#endif