| Index: src/gpu/gl/GrGLInterface.cpp
|
| diff --git a/src/gpu/gl/GrGLInterface.cpp b/src/gpu/gl/GrGLInterface.cpp
|
| index 6e8306b9110e8ce1395612444ad06eff29dafc22..72c9178db42d265941c15aa44b3781934b4a35d6 100644
|
| --- a/src/gpu/gl/GrGLInterface.cpp
|
| +++ b/src/gpu/gl/GrGLInterface.cpp
|
| @@ -33,9 +33,13 @@ bool GrGLInterface::validate() const {
|
| return false;
|
| }
|
|
|
| - GrGLExtensions extensions;
|
| - if (!extensions.init(this)) {
|
| - return false;
|
| + // This const hackery is necessary because the factories in Chromium do not yet initialize
|
| + // fExtensions.
|
| + if (!fExtensions.isInitialized()) {
|
| + GrGLExtensions* extensions = const_cast<GrGLExtensions*>(&fExtensions);
|
| + if (!extensions->init(fStandard, fGetString, fGetStringi, fGetIntegerv)) {
|
| + return false;
|
| + }
|
| }
|
|
|
| // functions that are always required
|
| @@ -144,7 +148,7 @@ bool GrGLInterface::validate() const {
|
| }
|
|
|
| // 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
|
| + // and that we have fn pointers for any advertised fExtensions that we will
|
| // try to use.
|
|
|
| // these functions are part of ES2, we assume they are available
|
| @@ -168,13 +172,13 @@ bool GrGLInterface::validate() const {
|
| if (glVer >= GR_GL_VER(3,0) && NULL == fBindFragDataLocation) {
|
| return false;
|
| }
|
| - if (glVer >= GR_GL_VER(2,0) || extensions.has("GL_ARB_draw_buffers")) {
|
| + if (glVer >= GR_GL_VER(2,0) || fExtensions.has("GL_ARB_draw_buffers")) {
|
| if (NULL == fDrawBuffers) {
|
| return false;
|
| }
|
| }
|
|
|
| - if (glVer >= GR_GL_VER(1,5) || extensions.has("GL_ARB_occlusion_query")) {
|
| + if (glVer >= GR_GL_VER(1,5) || fExtensions.has("GL_ARB_occlusion_query")) {
|
| if (NULL == fGenQueries ||
|
| NULL == fDeleteQueries ||
|
| NULL == fBeginQuery ||
|
| @@ -186,14 +190,14 @@ bool GrGLInterface::validate() const {
|
| }
|
| }
|
| if (glVer >= GR_GL_VER(3,3) ||
|
| - extensions.has("GL_ARB_timer_query") ||
|
| - extensions.has("GL_EXT_timer_query")) {
|
| + fExtensions.has("GL_ARB_timer_query") ||
|
| + fExtensions.has("GL_EXT_timer_query")) {
|
| if (NULL == fGetQueryObjecti64v ||
|
| NULL == fGetQueryObjectui64v) {
|
| return false;
|
| }
|
| }
|
| - if (glVer >= GR_GL_VER(3,3) || extensions.has("GL_ARB_timer_query")) {
|
| + if (glVer >= GR_GL_VER(3,3) || fExtensions.has("GL_ARB_timer_query")) {
|
| if (NULL == fQueryCounter) {
|
| return false;
|
| }
|
| @@ -212,7 +216,7 @@ bool GrGLInterface::validate() const {
|
| return false;
|
| }
|
| }
|
| - if (false && extensions.has("GL_NV_path_rendering")) {
|
| + if (false && fExtensions.has("GL_NV_path_rendering")) {
|
| if (NULL == fPathCommands ||
|
| NULL == fPathCoords ||
|
| NULL == fPathSubCommands ||
|
| @@ -270,7 +274,7 @@ bool GrGLInterface::validate() const {
|
| // optional function on desktop before 1.3
|
| if (kGL_GrGLStandard != fStandard ||
|
| (glVer >= GR_GL_VER(1,3)) ||
|
| - extensions.has("GL_ARB_texture_compression")) {
|
| + fExtensions.has("GL_ARB_texture_compression")) {
|
| if (NULL == fCompressedTexImage2D) {
|
| return false;
|
| }
|
| @@ -288,19 +292,19 @@ bool GrGLInterface::validate() const {
|
| // There is a desktop ARB extension and an ES+desktop EXT extension
|
| if (kGL_GrGLStandard == fStandard) {
|
| if (glVer >= GR_GL_VER(4,2) ||
|
| - extensions.has("GL_ARB_texture_storage") ||
|
| - extensions.has("GL_EXT_texture_storage")) {
|
| + fExtensions.has("GL_ARB_texture_storage") ||
|
| + fExtensions.has("GL_EXT_texture_storage")) {
|
| if (NULL == fTexStorage2D) {
|
| return false;
|
| }
|
| }
|
| - } else if (glVer >= GR_GL_VER(3,0) || extensions.has("GL_EXT_texture_storage")) {
|
| + } else if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_EXT_texture_storage")) {
|
| if (NULL == fTexStorage2D) {
|
| return false;
|
| }
|
| }
|
|
|
| - if (extensions.has("GL_EXT_discard_framebuffer")) {
|
| + if (fExtensions.has("GL_EXT_discard_framebuffer")) {
|
| // FIXME: Remove this once Chromium is updated to provide this function
|
| #if 0
|
| if (NULL == fDiscardFramebuffer) {
|
| @@ -312,36 +316,36 @@ bool GrGLInterface::validate() const {
|
| // FBO MSAA
|
| if (kGL_GrGLStandard == fStandard) {
|
| // GL 3.0 and the ARB extension have multisample + blit
|
| - if (glVer >= GR_GL_VER(3,0) || extensions.has("GL_ARB_framebuffer_object")) {
|
| + if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_ARB_framebuffer_object")) {
|
| if (NULL == fRenderbufferStorageMultisample ||
|
| NULL == fBlitFramebuffer) {
|
| return false;
|
| }
|
| } else {
|
| - if (extensions.has("GL_EXT_framebuffer_blit") &&
|
| + if (fExtensions.has("GL_EXT_framebuffer_blit") &&
|
| NULL == fBlitFramebuffer) {
|
| return false;
|
| }
|
| - if (extensions.has("GL_EXT_framebuffer_multisample") &&
|
| + if (fExtensions.has("GL_EXT_framebuffer_multisample") &&
|
| NULL == fRenderbufferStorageMultisample) {
|
| return false;
|
| }
|
| }
|
| } else {
|
| - if (glVer >= GR_GL_VER(3,0) || extensions.has("GL_CHROMIUM_framebuffer_multisample")) {
|
| + if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_CHROMIUM_framebuffer_multisample")) {
|
| if (NULL == fRenderbufferStorageMultisample ||
|
| NULL == fBlitFramebuffer) {
|
| return false;
|
| }
|
| }
|
| - if (extensions.has("GL_APPLE_framebuffer_multisample")) {
|
| + if (fExtensions.has("GL_APPLE_framebuffer_multisample")) {
|
| if (NULL == fRenderbufferStorageMultisampleES2APPLE ||
|
| NULL == fResolveMultisampleFramebuffer) {
|
| return false;
|
| }
|
| }
|
| - if (extensions.has("GL_IMG_multisampled_render_to_texture") ||
|
| - extensions.has("GL_EXT_multisampled_render_to_texture")) {
|
| + if (fExtensions.has("GL_IMG_multisampled_render_to_texture") ||
|
| + fExtensions.has("GL_EXT_multisampled_render_to_texture")) {
|
| if (NULL == fRenderbufferStorageMultisampleES2EXT ||
|
| NULL == fFramebufferTexture2DMultisample) {
|
| return false;
|
| @@ -352,7 +356,7 @@ bool GrGLInterface::validate() const {
|
| // On ES buffer mapping is an extension. On Desktop
|
| // buffer mapping was part of original VBO extension
|
| // which we require.
|
| - if (kGL_GrGLStandard == fStandard || extensions.has("GL_OES_mapbuffer")) {
|
| + if (kGL_GrGLStandard == fStandard || fExtensions.has("GL_OES_mapbuffer")) {
|
| if (NULL == fMapBuffer ||
|
| NULL == fUnmapBuffer) {
|
| return false;
|
| @@ -361,7 +365,7 @@ bool GrGLInterface::validate() const {
|
|
|
| // Dual source blending
|
| if (kGL_GrGLStandard == fStandard &&
|
| - (glVer >= GR_GL_VER(3,3) || extensions.has("GL_ARB_blend_func_extended"))) {
|
| + (glVer >= GR_GL_VER(3,3) || fExtensions.has("GL_ARB_blend_func_extended"))) {
|
| if (NULL == fBindFragDataLocationIndexed) {
|
| return false;
|
| }
|
| @@ -375,7 +379,7 @@ bool GrGLInterface::validate() const {
|
| }
|
|
|
| if (kGL_GrGLStandard == fStandard) {
|
| - if (glVer >= GR_GL_VER(3, 0) || extensions.has("GL_ARB_vertex_array_object")) {
|
| + if (glVer >= GR_GL_VER(3, 0) || fExtensions.has("GL_ARB_vertex_array_object")) {
|
| if (NULL == fBindVertexArray ||
|
| NULL == fDeleteVertexArrays ||
|
| NULL == fGenVertexArrays) {
|
| @@ -383,7 +387,7 @@ bool GrGLInterface::validate() const {
|
| }
|
| }
|
| } else {
|
| - if (glVer >= GR_GL_VER(3,0) || extensions.has("GL_OES_vertex_array_object")) {
|
| + if (glVer >= GR_GL_VER(3,0) || fExtensions.has("GL_OES_vertex_array_object")) {
|
| if (NULL == fBindVertexArray ||
|
| NULL == fDeleteVertexArrays ||
|
| NULL == fGenVertexArrays) {
|
|
|