Skip to content

Commit

Permalink
Fixed|Windows|libgui: Missing GL entrypoints, fetch them after Canvas…
Browse files Browse the repository at this point in the history
… ready

The GL entrypoints are not available until the GL context is in use.
  • Loading branch information
skyjake committed Apr 26, 2013
1 parent 39603e9 commit c6d0eeb
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 8 deletions.
13 changes: 13 additions & 0 deletions doomsday/libgui/include/de/gui/glentrypoints.h
Expand Up @@ -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;
Expand All @@ -63,6 +74,8 @@ extern PFNGLISBUFFERPROC glIsBuffer;

extern PFNGLLINKPROGRAMPROC glLinkProgram;

extern PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;

extern PFNGLSHADERSOURCEPROC glShaderSource;

extern PFNGLUNIFORM1FPROC glUniform1f;
Expand Down
5 changes: 5 additions & 0 deletions doomsday/libgui/src/canvas.cpp
Expand Up @@ -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()));
}
}
Expand Down
33 changes: 29 additions & 4 deletions doomsday/libgui/src/glentrypoints.cpp
Expand Up @@ -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;
Expand All @@ -54,6 +65,8 @@ PFNGLISBUFFERPROC glIsBuffer;

PFNGLLINKPROGRAMPROC glLinkProgram;

PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;

PFNGLSHADERSOURCEPROC glShaderSource;

PFNGLUNIFORM1FPROC glUniform1f;
Expand All @@ -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");

Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -114,6 +138,7 @@ void getAllOpenGLEntryPoints()
GET_PROC(glUseProgram);
GET_PROC(glVertexAttribPointer);

haveProcs = true;
}

#endif // WIN32
4 changes: 0 additions & 4 deletions doomsday/libgui/src/guiapp.cpp
Expand Up @@ -35,10 +35,6 @@ DENG2_PIMPL(GuiApp)
Instance(Public *i) : Base(i)
{
loop.audienceForIteration += self;

#ifdef WIN32
getAllOpenGLEntryPoints();
#endif
}
};

Expand Down

0 comments on commit c6d0eeb

Please sign in to comment.