Index: ui/gl/gl_gl_api_implementation.cc |
diff --git a/ui/gl/gl_gl_api_implementation.cc b/ui/gl/gl_gl_api_implementation.cc |
index 9184fc3066a0e43fabfbc3e83f1c66267be0ec22..fe98fba36624db6e8c75ce6b72b86899cd48ed04 100644 |
--- a/ui/gl/gl_gl_api_implementation.cc |
+++ b/ui/gl/gl_gl_api_implementation.cc |
@@ -14,6 +14,7 @@ |
#include "ui/gl/gl_state_restorer.h" |
#include "ui/gl/gl_surface.h" |
#include "ui/gl/gl_switches.h" |
+#include "ui/gl/gl_version_info.h" |
namespace gfx { |
@@ -23,6 +24,8 @@ static GLApi* g_gl; |
static RealGLApi* g_real_gl; |
// A GL Api that calls TRACE and then calls another GL api. |
static TraceGLApi* g_trace_gl; |
+// GL version used when initializing dynamic bindings. |
+static GLVersionInfo* g_version_info = NULL; |
namespace { |
@@ -40,7 +43,28 @@ static inline GLenum GetTexInternalFormat(GLenum internal_format, |
GLenum type) { |
GLenum gl_internal_format = GetInternalFormat(internal_format); |
- if (gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) |
+ // g_version_info must be initialized when this function is bound. |
+ DCHECK(gfx::g_version_info); |
+ if (type == GL_FLOAT && gfx::g_version_info->is_angle && |
+ gfx::g_version_info->is_es2) { |
+ // It's possible that the texture is using a sized internal format, and |
+ // ANGLE exposing GLES2 API doesn't support those. |
+ // TODO(oetuaho@nvidia.com): Remove these conversions once ANGLE has the |
+ // support. |
+ // http://code.google.com/p/angleproject/issues/detail?id=556 |
+ switch (format) { |
+ case GL_RGBA: |
+ gl_internal_format = GL_RGBA; |
+ break; |
+ case GL_RGB: |
+ gl_internal_format = GL_RGB; |
+ break; |
+ default: |
+ break; |
+ } |
+ } |
+ |
+ if (gfx::g_version_info->is_es) |
return gl_internal_format; |
if (type == GL_FLOAT) { |
@@ -208,6 +232,9 @@ void SetGLToRealGLApi() { |
void InitializeDynamicGLBindingsGL(GLContext* context) { |
g_driver_gl.InitializeCustomDynamicBindings(context); |
+ DCHECK(context && context->IsCurrent(NULL) && !g_version_info); |
+ g_version_info = new GLVersionInfo(context->GetGLVersion().c_str(), |
+ context->GetGLRenderer().c_str()); |
} |
void InitializeDebugGLBindingsGL() { |
@@ -233,6 +260,10 @@ void ClearGLBindingsGL() { |
delete g_current_gl_context_tls; |
g_current_gl_context_tls = NULL; |
} |
+ if (g_version_info) { |
+ delete g_version_info; |
+ g_version_info = NULL; |
+ } |
} |
GLApi::GLApi() { |