diff --git a/doomsday/libgui/include/de/gui/glentrypoints.h b/doomsday/libgui/include/de/gui/glentrypoints.h index 644b5da5bb..49993f1d9c 100644 --- a/doomsday/libgui/include/de/gui/glentrypoints.h +++ b/doomsday/libgui/include/de/gui/glentrypoints.h @@ -35,22 +35,33 @@ extern PFNGLATTACHSHADERPROC glAttachShader; extern PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation; extern PFNGLBINDBUFFERPROC glBindBuffer; +extern PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; +extern PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer; +extern PFNGLBLENDEQUATIONPROC glBlendEquation; extern PFNGLBUFFERDATAPROC glBufferData; +extern PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; extern PFNGLCOMPILESHADERPROC glCompileShader; extern PFNGLCREATEPROGRAMPROC glCreateProgram; extern PFNGLCREATESHADERPROC glCreateShader; extern PFNGLDELETEBUFFERSPROC glDeleteBuffers; +extern PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; extern PFNGLDELETEPROGRAMPROC glDeleteProgram; +extern PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers; extern PFNGLDELETESHADERPROC glDeleteShader; extern PFNGLDETACHSHADERPROC glDetachShader; extern PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray; extern PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; +extern PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer; +extern PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; + extern PFNGLGENBUFFERSPROC glGenBuffers; +extern PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; extern PFNGLGENERATEMIPMAPPROC glGenerateMipmap; +extern PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers; extern PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation; extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; extern PFNGLGETPROGRAMIVPROC glGetProgramiv; @@ -63,6 +74,8 @@ extern PFNGLISBUFFERPROC glIsBuffer; extern PFNGLLINKPROGRAMPROC glLinkProgram; +extern PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage; + extern PFNGLSHADERSOURCEPROC glShaderSource; extern PFNGLUNIFORM1FPROC glUniform1f; diff --git a/doomsday/libgui/src/canvas.cpp b/doomsday/libgui/src/canvas.cpp index 25c00d3ea9..1a36885560 100644 --- a/doomsday/libgui/src/canvas.cpp +++ b/doomsday/libgui/src/canvas.cpp @@ -279,6 +279,11 @@ void Canvas::showEvent(QShowEvent* ev) { LOG_DEBUG("Received first show event, scheduling GL ready notification"); +#ifdef WIN32 + makeCurrent(); + getAllOpenGLEntryPoints(); + doneCurrent(); +#endif QTimer::singleShot(1, this, SLOT(notifyReady())); } } diff --git a/doomsday/libgui/src/glentrypoints.cpp b/doomsday/libgui/src/glentrypoints.cpp index f3d104cf5d..ece2943044 100644 --- a/doomsday/libgui/src/glentrypoints.cpp +++ b/doomsday/libgui/src/glentrypoints.cpp @@ -26,22 +26,33 @@ PFNGLATTACHSHADERPROC glAttachShader; PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation; PFNGLBINDBUFFERPROC glBindBuffer; +PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; +PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer; +PFNGLBLENDEQUATIONPROC glBlendEquation; PFNGLBUFFERDATAPROC glBufferData; +PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; PFNGLCOMPILESHADERPROC glCompileShader; PFNGLCREATEPROGRAMPROC glCreateProgram; PFNGLCREATESHADERPROC glCreateShader; PFNGLDELETEBUFFERSPROC glDeleteBuffers; +PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; PFNGLDELETEPROGRAMPROC glDeleteProgram; +PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers; PFNGLDELETESHADERPROC glDeleteShader; PFNGLDETACHSHADERPROC glDetachShader; PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray; PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; +PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer; +PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; + PFNGLGENBUFFERSPROC glGenBuffers; +PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; PFNGLGENERATEMIPMAPPROC glGenerateMipmap; +PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers; PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation; PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; PFNGLGETPROGRAMIVPROC glGetProgramiv; @@ -54,6 +65,8 @@ PFNGLISBUFFERPROC glIsBuffer; PFNGLLINKPROGRAMPROC glLinkProgram; +PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage; + PFNGLSHADERSOURCEPROC glShaderSource; PFNGLUNIFORM1FPROC glUniform1f; @@ -69,10 +82,10 @@ PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; void getAllOpenGLEntryPoints() { -#define GET_PROC(name) { \ - void **assign = (void **) &name; \ - (*assign) = (void *) wglGetProcAddress(#name); \ - DENG2_ASSERT(name != 0); } + static bool haveProcs = false; + if(haveProcs) return; + +#define GET_PROC(name) *((void**)&name) = wglGetProcAddress(#name); DENG2_ASSERT(name != 0) LOG_AS("getAllOpenGLEntryPoints"); @@ -82,18 +95,28 @@ void getAllOpenGLEntryPoints() GET_PROC(glAttachShader); GET_PROC(glBindAttribLocation); GET_PROC(glBindBuffer); + GET_PROC(glBindFramebuffer); + GET_PROC(glBindRenderbuffer); + GET_PROC(glBlendEquation); GET_PROC(glBufferData); + GET_PROC(glCheckFramebufferStatus); GET_PROC(glCompileShader); GET_PROC(glCreateProgram); GET_PROC(glCreateShader); GET_PROC(glDeleteBuffers); + GET_PROC(glDeleteFramebuffers); GET_PROC(glDeleteProgram); + GET_PROC(glDeleteRenderbuffers); GET_PROC(glDeleteShader); GET_PROC(glDetachShader); GET_PROC(glDisableVertexAttribArray); GET_PROC(glEnableVertexAttribArray); + GET_PROC(glFramebufferRenderbuffer); + GET_PROC(glFramebufferTexture2D); GET_PROC(glGenBuffers); + GET_PROC(glGenFramebuffers); GET_PROC(glGenerateMipmap); + GET_PROC(glGenRenderbuffers); GET_PROC(glGetAttribLocation); GET_PROC(glGetProgramInfoLog); GET_PROC(glGetProgramiv); @@ -103,6 +126,7 @@ void getAllOpenGLEntryPoints() GET_PROC(glGetUniformLocation); GET_PROC(glIsBuffer); GET_PROC(glLinkProgram); + GET_PROC(glRenderbufferStorage); GET_PROC(glShaderSource); GET_PROC(glUniform1f); GET_PROC(glUniform1i); @@ -114,6 +138,7 @@ void getAllOpenGLEntryPoints() GET_PROC(glUseProgram); GET_PROC(glVertexAttribPointer); + haveProcs = true; } #endif // WIN32 diff --git a/doomsday/libgui/src/guiapp.cpp b/doomsday/libgui/src/guiapp.cpp index b5098444b6..128b4a4550 100644 --- a/doomsday/libgui/src/guiapp.cpp +++ b/doomsday/libgui/src/guiapp.cpp @@ -35,10 +35,6 @@ DENG2_PIMPL(GuiApp) Instance(Public *i) : Base(i) { loop.audienceForIteration += self; - -#ifdef WIN32 - getAllOpenGLEntryPoints(); -#endif } };