[grits] Support OpenGL extensions under Win32
- From: Andy Spencer <andys src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [grits] Support OpenGL extensions under Win32
- Date: Thu, 16 Feb 2012 23:19:35 +0000 (UTC)
commit c605da71628f672c2ff94018e92eb245685d51a1
Author: Andy Spencer <andy753421 gmail com>
Date: Thu Feb 16 21:34:21 2012 +0000
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 deletions(-)
---
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 <windows.h>
#include <gdk/gdkwin32.h>
+#include <GL/gl.h>
+
+/* 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 <GL/glext.h>
+#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 <GL/glext.h>
+#endif
+
guint grits_tile_mask = 0;
gchar *grits_tile_path_table[2][2] = {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]