Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1492)

Unified Diff: src/gpu/gl/GrGLInterface.cpp

Issue 12328111: Use glGetStringi to get extensions when available. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/gl/GrGLExtensions.cpp ('k') | src/gpu/gl/GrGLNoOpInterface.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLInterface.cpp
===================================================================
--- src/gpu/gl/GrGLInterface.cpp (revision 7868)
+++ src/gpu/gl/GrGLInterface.cpp (working copy)
@@ -7,7 +7,8 @@
#include "gl/GrGLInterface.h"
-#include "GrGLUtil.h"
+#include "gl/GrGLExtensions.h"
+#include "gl/GrGLUtil.h"
#include <stdio.h>
@@ -37,6 +38,11 @@
if (0 == (binding & fBindingsExported)) {
return false;
}
+
+ GrGLExtensions extensions;
+ if (!extensions.init(binding, this)) {
+ return false;
+ }
// functions that are always required
if (NULL == fActiveTexture ||
@@ -131,9 +137,7 @@
return false;
}
- const char* ext;
GrGLVersion glVer = GrGLGetVersion(this);
- ext = (const char*)fGetString(GR_GL_EXTENSIONS);
// Now check that baseline ES/Desktop fns not covered above are present
// and that we have fn pointers for any advertised extensions that we will
@@ -160,15 +164,13 @@
if (glVer >= GR_GL_VER(3,0) && NULL == fBindFragDataLocation) {
return false;
}
- if (glVer >= GR_GL_VER(2,0) ||
- GrGLHasExtensionFromString("GL_ARB_draw_buffers", ext)) {
+ if (glVer >= GR_GL_VER(2,0) || extensions.has("GL_ARB_draw_buffers")) {
if (NULL == fDrawBuffers) {
return false;
}
}
- if (glVer >= GR_GL_VER(1,5) ||
- GrGLHasExtensionFromString("GL_ARB_occlusion_query", ext)) {
+ if (glVer >= GR_GL_VER(1,5) || extensions.has("GL_ARB_occlusion_query")) {
if (NULL == fGenQueries ||
NULL == fDeleteQueries ||
NULL == fBeginQuery ||
@@ -180,15 +182,14 @@
}
}
if (glVer >= GR_GL_VER(3,3) ||
- GrGLHasExtensionFromString("GL_ARB_timer_query", ext) ||
- GrGLHasExtensionFromString("GL_EXT_timer_query", ext)) {
+ extensions.has("GL_ARB_timer_query") ||
+ extensions.has("GL_EXT_timer_query")) {
if (NULL == fGetQueryObjecti64v ||
NULL == fGetQueryObjectui64v) {
return false;
}
}
- if (glVer >= GR_GL_VER(3,3) ||
- GrGLHasExtensionFromString("GL_ARB_timer_query", ext)) {
+ if (glVer >= GR_GL_VER(3,3) || extensions.has("GL_ARB_timer_query")) {
if (NULL == fQueryCounter) {
return false;
}
@@ -202,7 +203,7 @@
NULL == fLoadMatrixf)) {
return false;
}
- if (false && GrGLHasExtensionFromString("GL_NV_path_rendering", ext)) {
+ if (false && extensions.has("GL_NV_path_rendering")) {
if (NULL == fPathCommands ||
NULL == fPathCoords ||
NULL == fPathSubCommands ||
@@ -259,8 +260,8 @@
// optional function on desktop before 1.3
if (kDesktop_GrGLBinding != binding ||
- (glVer >= GR_GL_VER(1,3) ||
- GrGLHasExtensionFromString("GL_ARB_texture_compression", ext))) {
+ (glVer >= GR_GL_VER(1,3)) ||
+ extensions.has("GL_ARB_texture_compression")) {
if (NULL == fCompressedTexImage2D) {
return false;
}
@@ -279,13 +280,13 @@
// There is a desktop ARB extension and an ES+desktop EXT extension
if (kDesktop_GrGLBinding == binding) {
if (glVer >= GR_GL_VER(4,2) ||
- GrGLHasExtensionFromString("GL_ARB_texture_storage", ext) ||
- GrGLHasExtensionFromString("GL_EXT_texture_storage", ext)) {
+ extensions.has("GL_ARB_texture_storage") ||
+ extensions.has("GL_EXT_texture_storage")) {
if (NULL == fTexStorage2D) {
return false;
}
}
- } else if (GrGLHasExtensionFromString("GL_EXT_texture_storage", ext)) {
+ } else if (extensions.has("GL_EXT_texture_storage")) {
if (NULL == fTexStorage2D) {
return false;
}
@@ -294,29 +295,29 @@
// FBO MSAA
if (kDesktop_GrGLBinding == binding) {
// GL 3.0 and the ARB extension have multisample + blit
- if (glVer >= GR_GL_VER(3,0) || GrGLHasExtensionFromString("GL_ARB_framebuffer_object", ext)) {
+ if (glVer >= GR_GL_VER(3,0) || extensions.has("GL_ARB_framebuffer_object")) {
if (NULL == fRenderbufferStorageMultisample ||
NULL == fBlitFramebuffer) {
return false;
}
} else {
- if (GrGLHasExtensionFromString("GL_EXT_framebuffer_blit", ext) &&
+ if (extensions.has("GL_EXT_framebuffer_blit") &&
NULL == fBlitFramebuffer) {
return false;
}
- if (GrGLHasExtensionFromString("GL_EXT_framebuffer_multisample", ext) &&
+ if (extensions.has("GL_EXT_framebuffer_multisample") &&
NULL == fRenderbufferStorageMultisample) {
return false;
}
}
} else {
- if (GrGLHasExtensionFromString("GL_CHROMIUM_framebuffer_multisample", ext)) {
+ if (extensions.has("GL_CHROMIUM_framebuffer_multisample")) {
if (NULL == fRenderbufferStorageMultisample ||
NULL == fBlitFramebuffer) {
return false;
}
}
- if (GrGLHasExtensionFromString("GL_APPLE_framebuffer_multisample", ext)) {
+ if (extensions.has("GL_APPLE_framebuffer_multisample")) {
if (NULL == fRenderbufferStorageMultisample ||
NULL == fResolveMultisampleFramebuffer) {
return false;
@@ -327,8 +328,7 @@
// On ES buffer mapping is an extension. On Desktop
// buffer mapping was part of original VBO extension
// which we require.
- if (kDesktop_GrGLBinding == binding ||
- GrGLHasExtensionFromString("GL_OES_mapbuffer", ext)) {
+ if (kDesktop_GrGLBinding == binding || extensions.has("GL_OES_mapbuffer")) {
if (NULL == fMapBuffer ||
NULL == fUnmapBuffer) {
return false;
@@ -337,12 +337,17 @@
// Dual source blending
if (kDesktop_GrGLBinding == binding &&
- (glVer >= GR_GL_VER(3,3) ||
- GrGLHasExtensionFromString("GL_ARB_blend_func_extended", ext))) {
+ (glVer >= GR_GL_VER(3,3) || extensions.has("GL_ARB_blend_func_extended"))) {
if (NULL == fBindFragDataLocationIndexed) {
return false;
}
}
+
+ if (kDesktop_GrGLBinding == binding && glVer >= GR_GL_VER(3, 0)) {
+ if (NULL == fGetStringi) {
+ return false;
+ }
+ }
return true;
}
« no previous file with comments | « src/gpu/gl/GrGLExtensions.cpp ('k') | src/gpu/gl/GrGLNoOpInterface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698