From c605da71628f672c2ff94018e92eb245685d51a1 Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Thu, 16 Feb 2012 21:34:21 +0000 Subject: [PATCH] Support OpenGL extensions under Win32 --- src/gtkgl.c | 38 +++++++++++++++++++++++++++++++++++++- src/objects/grits-marker.c | 4 ++++ src/objects/grits-tile.c | 5 +++++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/gtkgl.c b/src/gtkgl.c index bb87494..b10c52d 100644 --- a/src/gtkgl.c +++ b/src/gtkgl.c @@ -119,6 +119,42 @@ void gtk_gl_disable(GtkWidget *widget) #elif defined(SYS_WIN) #include #include +#include + +/* Windows doens't define OpenGL extensions */ +static void APIENTRY (*glMultiTexCoord2dvPtr)(int target, const double *v); +static void APIENTRY (*glActiveTexturePtr)(int texture); + +void APIENTRY glMultiTexCoord2dv(int target, const double *v) +{ + glMultiTexCoord2dvPtr(target, v); +} + +void APIENTRY glActiveTexture(int texture) +{ + glActiveTexturePtr(texture); +} + +static void init_extensions(void) +{ + static gboolean init_done = FALSE; + if (init_done) + return; + init_done = TRUE; + + g_debug("GtkGl: init_extensions"); + const guchar *exts = NULL; + if (!(exts = glGetString(GL_EXTENSIONS))) + g_error("GtkGl: Unable to query extensions"); + if (!(glMultiTexCoord2dvPtr = (void*)wglGetProcAddress("glMultiTexCoord2dvARB"))) + g_error("GtkGl: Unable to load glMultiTexCoord2dv extension:\n%s", exts); + if (!(glActiveTexturePtr = (void*)wglGetProcAddress("glActiveTextureARB"))) + g_error("GtkGl: Unable to load glActiveTexture extension\n%s", exts); + g_debug("GtkGl: extensions - glMultiTexCoord2dvPtr=%p glActiveTexturePtr=%p", + glMultiTexCoord2dvPtr, glActiveTexturePtr); +} + +/* gtkgl implementation */ static void on_realize(GtkWidget *widget, gpointer _) { g_debug("GtkGl: on_realize"); @@ -167,6 +203,7 @@ void gtk_gl_begin(GtkWidget *widget) HGLRC hRC = g_object_get_data(G_OBJECT(widget), "glcontext"); if (!wglMakeCurrent(hDC, hRC)) g_error("GtkGl: wglMakeCurrent failed"); + init_extensions(); } void gtk_gl_end(GtkWidget *widget) @@ -186,7 +223,6 @@ void gtk_gl_disable(GtkWidget *widget) } - /************************** * Mac OSX implementation * **************************/ diff --git a/src/objects/grits-marker.c b/src/objects/grits-marker.c index 338cf1b..3bbaf79 100644 --- a/src/objects/grits-marker.c +++ b/src/objects/grits-marker.c @@ -35,6 +35,10 @@ #include "gtkgl.h" #include "grits-marker.h" +#ifdef SYS_WIN +#include +#endif + /* Texture setup functions */ static void render_point(GritsMarker *marker) { diff --git a/src/objects/grits-tile.c b/src/objects/grits-tile.c index e2aeb45..61ed022 100644 --- a/src/objects/grits-tile.c +++ b/src/objects/grits-tile.c @@ -37,6 +37,11 @@ #include "gtkgl.h" #include "grits-tile.h" +#ifdef SYS_WIN +#define GL_GLEXT_PROTOTYPES +#include +#endif + guint grits_tile_mask = 0; gchar *grits_tile_path_table[2][2] = { -- 2.43.2