From 7c325d75b853c33da43ede36eede1907a35350c7 Mon Sep 17 00:00:00 2001 From: malc Date: Fri, 31 Oct 2008 23:52:19 +0300 Subject: [PATCH] Check the result of wglGetProcAddress and make typedef independant of APIENTRYP definition --- skin.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/skin.c b/skin.c index 2075a41..e2123e6 100644 --- a/skin.c +++ b/skin.c @@ -16,9 +16,9 @@ #define GL_WRITE_ONLY 0x88B9 #ifndef APIENTRYP #define APIENTRYP APIENTRY * +#endif typedef ptrdiff_t GLintptr; typedef ptrdiff_t GLsizeiptr; -#endif typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); @@ -29,6 +29,14 @@ static PFNGLGENBUFFERSPROC glGenBuffers; static PFNGLBUFFERDATAPROC glBufferData; static PFNGLMAPBUFFERPROC glMapBuffer; static PFNGLUNMAPBUFFERPROC glUnmapBuffer; +#define GETPA(name) for (;;) { \ + *(PROC *) &gl##name = wglGetProcAddress ("gl" # name); \ + if (!gl##name) { \ + fprintf (stderr, "could not get address of gl"#name"\n"); \ + exit (EXIT_FAILURE); \ + } \ + break; \ +} #endif #include @@ -188,11 +196,11 @@ CAMLprim value ml_skin_init (value geom_v) State *s = &glob_state; #ifdef _WIN32 - *(PROC *) &glBindBuffer = wglGetProcAddress ("glBindBuffer"); - *(PROC *) &glGenBuffers = wglGetProcAddress ("glGenBuffers"); - *(PROC *) &glBufferData = wglGetProcAddress ("glBufferData"); - *(PROC *) &glMapBuffer = wglGetProcAddress ("glMapBuffer"); - *(PROC *) &glUnmapBuffer = wglGetProcAddress ("glUnmapBuffer"); + GETPA (BindBuffer); + GETPA (GenBuffers); + GETPA (BufferData); + GETPA (MapBuffer); + GETPA (UnmapBuffer); #endif vertexa_v = Field (geom_v, 0); normala_v = Field (geom_v, 1); -- 2.11.4.GIT