Cleanup handling of GL versions, fix function names
Review URL: http://codereview.appspot.com/5097044/
git-svn-id: http://skia.googlecode.com/svn/trunk@2308 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrGLInterface.cpp b/gpu/src/GrGLInterface.cpp
index e943d58..0b433d1 100644
--- a/gpu/src/GrGLInterface.cpp
+++ b/gpu/src/GrGLInterface.cpp
@@ -19,58 +19,31 @@
}
#endif
-void gl_version_from_string(int* major, int* minor,
- const char* versionString) {
- if (NULL == versionString) {
- GrAssert(0);
- *major = 0;
- *minor = 0;
- return;
- }
+GrGLVersion GrGLGetVersionFromString(const char* versionString) {
+ GrAssert(versionString);
+ int major, minor;
- int n = sscanf(versionString, "%d.%d", major, minor);
+ int n = sscanf(versionString, "%d.%d", &major, &minor);
if (2 == n) {
- return;
+ return GR_GL_VER(major, minor);
}
char profile[2];
n = sscanf(versionString, "OpenGL ES-%c%c %d.%d", profile, profile+1,
- major, minor);
- bool ok = 4 == n;
- if (!ok) {
- n = sscanf(versionString, "OpenGL ES %d.%d", major, minor);
- ok = 2 == n;
+ &major, &minor);
+ if (4 == n) {
+ return GR_GL_VER(major, minor);
+ }
+
+ n = sscanf(versionString, "OpenGL ES %d.%d", &major, &minor);
+ if (2 == n) {
+ return GR_GL_VER(major, minor);
}
- if (!ok) {
- GrAssert(0);
- *major = 0;
- *minor = 0;
- return;
- }
+ return 0;
}
-float gl_version_as_float_from_string(const char* versionString) {
- int major, minor;
- gl_version_from_string(&major, &minor, versionString);
- GrAssert(minor >= 0);
- // AFAIK there are only single digit minor numbers
- if (minor < 10) {
- return major + minor / 10.f;
- } else if (minor < 100) {
- return major + minor / 100.f;
- } else if (minor < 1000) {
- return major + minor / 1000.f;
- } else {
- GrAssert(!"Why so many digits in minor revision number?");
- char temp[32];
- sprintf(temp, "%d.%d", major, minor);
- return (float) atof(temp);
- }
-}
-
-bool has_gl_extension_from_string(const char* ext,
- const char* extensionString) {
+bool GrGLHasExtensionFromString(const char* ext, const char* extensionString) {
int extLength = strlen(ext);
while (true) {
@@ -87,22 +60,16 @@
return false;
}
-bool has_gl_extension(const GrGLInterface* gl, const char* ext) {
+bool GrGLHasExtension(const GrGLInterface* gl, const char* ext) {
const GrGLubyte* glstr;
GR_GL_CALL_RET(gl, glstr, GetString(GR_GL_EXTENSIONS));
- return has_gl_extension_from_string(ext, (const char*) glstr);
+ return GrGLHasExtensionFromString(ext, (const char*) glstr);
}
-void gl_version(const GrGLInterface* gl, int* major, int* minor) {
+GrGLVersion GrGLGetVersion(const GrGLInterface* gl) {
const GrGLubyte* v;
GR_GL_CALL_RET(gl, v, GetString(GR_GL_VERSION));
- gl_version_from_string(major, minor, (const char*) v);
-}
-
-float gl_version_as_float(const GrGLInterface* gl) {
- const GrGLubyte* v;
- GR_GL_CALL_RET(gl, v, GetString(GR_GL_VERSION));
- return gl_version_as_float_from_string((const char*)v);
+ return GrGLGetVersionFromString((const char*) v);
}
GrGLInterface::GrGLInterface() {
@@ -379,10 +346,8 @@
return false;
}
- int major, minor;
const char* ext;
-
- gl_version(this, &major, &minor);
+ GrGLVersion glVer = GrGLGetVersion(this);
ext = (const char*)fGetString(GR_GL_EXTENSIONS);
// Now check that baseline ES/Desktop fns not covered above are present
@@ -400,24 +365,24 @@
return false;
}
} else if (kDesktop_GrGLBinding == fBindingsExported) {
- if (major >= 2) {
+ if (glVer >= GR_GL_VER(2,0)) {
if (NULL == fStencilFuncSeparate ||
NULL == fStencilMaskSeparate ||
NULL == fStencilOpSeparate) {
return false;
}
}
- if (major >= 3 && NULL == fBindFragDataLocation) {
+ if (glVer >= GR_GL_VER(3,0) && NULL == fBindFragDataLocation) {
return false;
}
- if (major >= 2 ||
- has_gl_extension_from_string("GL_ARB_draw_buffers", ext)) {
+ if (glVer >= GR_GL_VER(2,0) ||
+ GrGLHasExtensionFromString("GL_ARB_draw_buffers", ext)) {
if (NULL == fDrawBuffers) {
return false;
}
}
- if (1 < major || (1 == major && 4 <= minor) ||
- has_gl_extension_from_string("GL_EXT_blend_color", ext)) {
+ if (glVer >= GR_GL_VER(1,4) ||
+ GrGLHasExtensionFromString("GL_EXT_blend_color", ext)) {
if (NULL == fBlendColor) {
return false;
}
@@ -426,8 +391,8 @@
// optional function on desktop before 1.3
if (kDesktop_GrGLBinding != fBindingsExported ||
- (1 < major || (1 == major && 3 <= minor)) ||
- has_gl_extension_from_string("GL_ARB_texture_compression", ext)) {
+ (glVer >= GR_GL_VER(1,3) ||
+ GrGLHasExtensionFromString("GL_ARB_texture_compression", ext))) {
if (NULL == fCompressedTexImage2D) {
return false;
}
@@ -445,29 +410,29 @@
// FBO MSAA
if (kDesktop_GrGLBinding == fBindingsExported) {
// GL 3.0 and the ARB extension have multisample + blit
- if ((major >= 3) || has_gl_extension_from_string("GL_ARB_framebuffer_object", ext)) {
+ if (glVer >= GR_GL_VER(3,0) || GrGLHasExtensionFromString("GL_ARB_framebuffer_object", ext)) {
if (NULL == fRenderbufferStorageMultisample ||
NULL == fBlitFramebuffer) {
return false;
}
} else {
- if (has_gl_extension_from_string("GL_EXT_framebuffer_blit", ext) &&
+ if (GrGLHasExtensionFromString("GL_EXT_framebuffer_blit", ext) &&
NULL == fBlitFramebuffer) {
return false;
}
- if (has_gl_extension_from_string("GL_EXT_framebuffer_multisample", ext) &&
+ if (GrGLHasExtensionFromString("GL_EXT_framebuffer_multisample", ext) &&
NULL == fRenderbufferStorageMultisample) {
return false;
}
}
} else {
- if (has_gl_extension_from_string("GL_CHROMIUM_framebuffer_multisample", ext)) {
+ if (GrGLHasExtensionFromString("GL_CHROMIUM_framebuffer_multisample", ext)) {
if (NULL == fRenderbufferStorageMultisample ||
NULL == fBlitFramebuffer) {
return false;
}
}
- if (has_gl_extension_from_string("GL_APPLE_framebuffer_multisample", ext)) {
+ if (GrGLHasExtensionFromString("GL_APPLE_framebuffer_multisample", ext)) {
if (NULL == fRenderbufferStorageMultisample ||
NULL == fResolveMultisampleFramebuffer) {
return false;
@@ -479,7 +444,7 @@
// buffer mapping was part of original VBO extension
// which we require.
if (kDesktop_GrGLBinding == fBindingsExported ||
- has_gl_extension_from_string("GL_OES_mapbuffer", ext)) {
+ GrGLHasExtensionFromString("GL_OES_mapbuffer", ext)) {
if (NULL == fMapBuffer ||
NULL == fUnmapBuffer) {
return false;
@@ -488,8 +453,8 @@
// Dual source blending
if (kDesktop_GrGLBinding == fBindingsExported &&
- (has_gl_extension_from_string("GL_ARB_blend_func_extended", ext) ||
- (3 < major) || (3 == major && 3 <= minor))) {
+ (glVer >= GR_GL_VER(3,3) ||
+ GrGLHasExtensionFromString("GL_ARB_blend_func_extended", ext))) {
if (NULL == fBindFragDataLocationIndexed) {
return false;
}