Cleanup including of GL headers and provide way to include custom headers, extension getter.
git-svn-id: http://skia.googlecode.com/svn/trunk@713 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrGpuGL.cpp b/gpu/src/GrGpuGL.cpp
index 2951895..0198481 100644
--- a/gpu/src/GrGpuGL.cpp
+++ b/gpu/src/GrGpuGL.cpp
@@ -16,7 +16,6 @@
#include "GrGpuGL.h"
#include "GrMemory.h"
-#include <stdio.h>
#if GR_WIN32_BUILD
// need to get wglGetProcAddress
#undef WIN32_LEAN_AND_MEAN
@@ -48,57 +47,13 @@
GL_ONE_MINUS_DST_ALPHA,
};
-bool has_gl_extension(const char* ext) {
- const char* glstr = (const char*) glGetString(GL_EXTENSIONS);
- int extLength = strlen(ext);
- while (true) {
- int n = strcspn(glstr, " ");
- if (n == extLength && 0 == strncmp(ext, glstr, n)) {
- return true;
- }
- if (0 == glstr[n]) {
- return false;
- }
- glstr += n+1;
- }
-}
-
-void gl_version(int* major, int* minor) {
- const char* v = (const char*) glGetString(GL_VERSION);
- if (NULL == v) {
- GrAssert(0);
- *major = 0;
- *minor = 0;
- return;
- }
-#if GR_SUPPORT_GLDESKTOP
- int n = sscanf(v, "%d.%d", major, minor);
- if (n != 2) {
- GrAssert(0);
- *major = 0;
- *minor = 0;
- return;
- }
-#else
- char profile[2];
- int n = sscanf(v, "OpenGL ES-%c%c %d.%d", profile, profile+1, major, minor);
- bool ok = 4 == n;
- if (!ok) {
- int n = sscanf(v, "OpenGL ES %d.%d", major, minor);
- ok = 2 == n;
- }
- if (!ok) {
- GrAssert(0);
- *major = 0;
- *minor = 0;
- return;
- }
-#endif
-}
///////////////////////////////////////////////////////////////////////////////
+static bool gPrintStartupSpew;
+
+
bool fbo_test(GrGLExts exts, int w, int h) {
GLint savedFBO;
@@ -132,10 +87,6 @@
return status == GR_FRAMEBUFFER_COMPLETE;
}
-///////////////////////////////////////////////////////////////////////////////
-
-static bool gPrintStartupSpew;
-
GrGpuGL::GrGpuGL() {
if (gPrintStartupSpew) {
GrPrintf("------------------------- create GrGpuGL %p --------------\n",
@@ -527,14 +478,14 @@
}
GrRenderTarget* GrGpuGL::createRenderTargetFrom3DApiState() {
-
+
GrGLRenderTarget::GLRenderTargetIDs rtIDs;
-
+
GR_GL_GetIntegerv(GR_FRAMEBUFFER_BINDING, (GLint*)&rtIDs.fRTFBOID);
rtIDs.fTexFBOID = rtIDs.fRTFBOID;
rtIDs.fMSColorRenderbufferID = 0;
rtIDs.fStencilRenderbufferID = 0;
-
+
GLint vp[4];
GR_GL_GetIntegerv(GL_VIEWPORT, vp);
GrIRect viewportRect;
@@ -1755,197 +1706,3 @@
return false;
}
}
-
-///////////////////////////////////////////////////////////////////////////////
-
-void GrGLCheckErr(const char* location, const char* call) {
- uint32_t err = glGetError();
- if (GL_NO_ERROR != err) {
- GrPrintf("---- glGetError %x", err);
- if (NULL != location) {
- GrPrintf(" at\n\t%s", location);
- }
- if (NULL != call) {
- GrPrintf("\n\t\t%s", call);
- }
- GrPrintf("\n");
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-typedef void (*glProc)(void);
-
-void get_gl_proc(const char procName[], glProc *address) {
-#if GR_CHROME_BUILD
- GrAssert(!"should not get called");
-#elif GR_WIN32_BUILD
- *address = (glProc)wglGetProcAddress(procName);
- GrAssert(NULL != *address);
-#elif GR_MAC_BUILD || GR_IOS_BUILD
- GrAssert(!"Extensions don't need to be initialized!");
-#elif GR_ANDROID_BUILD
- *address = eglGetProcAddress(procName);
- GrAssert(NULL != *address);
-#elif GR_LINUX_BUILD
-// GR_STATIC_ASSERT(!"Add environment-dependent implementation here");
- //*address = glXGetProcAddressARB(procName);
- *address = NULL;//eglGetProcAddress(procName);
-#elif GR_QNX_BUILD
- *address = eglGetProcAddress(procName);
- GrAssert(NULL != *address);
-#else
- // hopefully we're on a system with EGL
- *address = eglGetProcAddress(procName);
- GrAssert(NULL != *address);
-#endif
-}
-
-#define GET_PROC(EXT_STRUCT, PROC_NAME, EXT_TAG) \
- get_gl_proc("gl" #PROC_NAME #EXT_TAG, (glProc*)&EXT_STRUCT-> PROC_NAME);
-
-extern void GrGLInitExtensions(GrGLExts* exts) {
- exts->GenFramebuffers = NULL;
- exts->BindFramebuffer = NULL;
- exts->FramebufferTexture2D = NULL;
- exts->CheckFramebufferStatus = NULL;
- exts->DeleteFramebuffers = NULL;
- exts->RenderbufferStorage = NULL;
- exts->GenRenderbuffers = NULL;
- exts->DeleteRenderbuffers = NULL;
- exts->FramebufferRenderbuffer = NULL;
- exts->BindRenderbuffer = NULL;
- exts->RenderbufferStorageMultisample = NULL;
- exts->BlitFramebuffer = NULL;
- exts->ResolveMultisampleFramebuffer = NULL;
- exts->FramebufferTexture2DMultisample = NULL;
- exts->MapBuffer = NULL;
- exts->UnmapBuffer = NULL;
-
-#if GR_MAC_BUILD
- exts->GenFramebuffers = glGenFramebuffers;
- exts->BindFramebuffer = glBindFramebuffer;
- exts->FramebufferTexture2D = glFramebufferTexture2D;
- exts->CheckFramebufferStatus = glCheckFramebufferStatus;
- exts->DeleteFramebuffers = glDeleteFramebuffers;
- exts->RenderbufferStorage = glRenderbufferStorage;
- exts->GenRenderbuffers = glGenRenderbuffers;
- exts->DeleteRenderbuffers = glDeleteRenderbuffers;
- exts->FramebufferRenderbuffer = glFramebufferRenderbuffer;
- exts->BindRenderbuffer = glBindRenderbuffer;
- exts->RenderbufferStorageMultisample = glRenderbufferStorageMultisample;
- exts->BlitFramebuffer = glBlitFramebuffer;
- exts->MapBuffer = glMapBuffer;
- exts->UnmapBuffer = glUnmapBuffer;
-#elif GR_IOS_BUILD
- exts->GenFramebuffers = glGenFramebuffers;
- exts->BindFramebuffer = glBindFramebuffer;
- exts->FramebufferTexture2D = glFramebufferTexture2D;
- exts->CheckFramebufferStatus = glCheckFramebufferStatus;
- exts->DeleteFramebuffers = glDeleteFramebuffers;
- exts->RenderbufferStorage = glRenderbufferStorage;
- exts->GenRenderbuffers = glGenRenderbuffers;
- exts->DeleteRenderbuffers = glDeleteRenderbuffers;
- exts->FramebufferRenderbuffer = glFramebufferRenderbuffer;
- exts->BindRenderbuffer = glBindRenderbuffer;
- exts->RenderbufferStorageMultisample = glRenderbufferStorageMultisampleAPPLE;
- exts->ResolveMultisampleFramebuffer = glResolveMultisampleFramebufferAPPLE;
- exts->MapBuffer = glMapBufferOES;
- exts->UnmapBuffer = glUnmapBufferOES;
-#else
- GLint major, minor;
- gl_version(&major, &minor);
- #if GR_SUPPORT_GLDESKTOP
- if (major >= 3) {// FBO, FBOMS, and FBOBLIT part of 3.0
- exts->GenFramebuffers = glGenFramebuffers;
- exts->BindFramebuffer = glBindFramebuffer;
- exts->FramebufferTexture2D = glFramebufferTexture2D;
- exts->CheckFramebufferStatus = glCheckFramebufferStatus;
- exts->DeleteFramebuffers = glDeleteFramebuffers;
- exts->RenderbufferStorage = glRenderbufferStorage;
- exts->GenRenderbuffers = glGenRenderbuffers;
- exts->DeleteRenderbuffers = glDeleteRenderbuffers;
- exts->FramebufferRenderbuffer = glFramebufferRenderbuffer;
- exts->BindRenderbuffer = glBindRenderbuffer;
- exts->RenderbufferStorageMultisample = glRenderbufferStorageMultisample;
- exts->BlitFramebuffer = glBlitFramebuffer;
- } else if (has_gl_extension("GL_ARB_framebuffer_object")) {
- GET_PROC(exts, GenFramebuffers, ARB);
- GET_PROC(exts, BindFramebuffer, ARB);
- GET_PROC(exts, FramebufferTexture2D, ARB);
- GET_PROC(exts, CheckFramebufferStatus, ARB);
- GET_PROC(exts, DeleteFramebuffers, ARB);
- GET_PROC(exts, RenderbufferStorage, ARB);
- GET_PROC(exts, GenRenderbuffers, ARB);
- GET_PROC(exts, DeleteRenderbuffers, ARB);
- GET_PROC(exts, FramebufferRenderbuffer, ARB);
- GET_PROC(exts, BindRenderbuffer, ARB);
- GET_PROC(exts, RenderbufferStorageMultisample, ARB);
- GET_PROC(exts, BlitFramebuffer, ARB);
- } else {
- // we require some form of FBO
- GrAssert(has_gl_extension("GL_EXT_framebuffer_object"));
- GET_PROC(exts, GenFramebuffers, EXT);
- GET_PROC(exts, BindFramebuffer, EXT);
- GET_PROC(exts, FramebufferTexture2D, EXT);
- GET_PROC(exts, CheckFramebufferStatus, EXT);
- GET_PROC(exts, DeleteFramebuffers, EXT);
- GET_PROC(exts, RenderbufferStorage, EXT);
- GET_PROC(exts, GenRenderbuffers, EXT);
- GET_PROC(exts, DeleteRenderbuffers, EXT);
- GET_PROC(exts, FramebufferRenderbuffer, EXT);
- GET_PROC(exts, BindRenderbuffer, EXT);
- if (has_gl_extension("GL_EXT_framebuffer_multisample")) {
- GET_PROC(exts, RenderbufferStorageMultisample, EXT);
- }
- if (has_gl_extension("GL_EXT_framebuffer_blit")) {
- GET_PROC(exts, BlitFramebuffer, EXT);
- }
- }
- // we assume we have at least GL 1.5 or higher (VBOs introduced in 1.5)
- exts->MapBuffer = glMapBuffer;
- exts->UnmapBuffer = glUnmapBuffer;
- #else // !GR_SUPPORT_GLDESKTOP
- if (major >= 2) {// ES 2.0 supports FBO
- exts->GenFramebuffers = glGenFramebuffers;
- exts->BindFramebuffer = glBindFramebuffer;
- exts->FramebufferTexture2D = glFramebufferTexture2D;
- exts->CheckFramebufferStatus = glCheckFramebufferStatus;
- exts->DeleteFramebuffers = glDeleteFramebuffers;
- exts->RenderbufferStorage = glRenderbufferStorage;
- exts->GenRenderbuffers = glGenRenderbuffers;
- exts->DeleteRenderbuffers = glDeleteRenderbuffers;
- exts->FramebufferRenderbuffer = glFramebufferRenderbuffer;
- exts->BindRenderbuffer = glBindRenderbuffer;
- } else {
- // we require some form of FBO
- GrAssert(has_gl_extension("GL_OES_framebuffer_object"));
-
- GET_PROC(exts, GenFramebuffers, OES);
- GET_PROC(exts, BindFramebuffer, OES);
- GET_PROC(exts, FramebufferTexture2D, OES);
- GET_PROC(exts, CheckFramebufferStatus, OES);
- GET_PROC(exts, DeleteFramebuffers, OES);
- GET_PROC(exts, RenderbufferStorage, OES);
- GET_PROC(exts, GenRenderbuffers, OES);
- GET_PROC(exts, DeleteRenderbuffers, OES);
- GET_PROC(exts, FramebufferRenderbuffer, OES);
- GET_PROC(exts, BindRenderbuffer, OES);
- }
- if (has_gl_extension("GL_APPLE_framebuffer_multisample")) {
- GET_PROC(exts, ResolveMultisampleFramebuffer, APPLE);
- }
- if (has_gl_extension("GL_IMG_multisampled_render_to_texture")) {
- GET_PROC(exts, FramebufferTexture2DMultisample, IMG);
- }
- if (has_gl_extension("GL_OES_mapbuffer")) {
- GET_PROC(exts, MapBuffer, OES);
- GET_PROC(exts, UnmapBuffer, OES);
- }
- #endif // !GR_SUPPORT_GLDESKTOP
-#endif // BUILD
-}
-
-bool gPrintGL = true;
-
-