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 ce8a711cdff0d0ba5ec55189599e4b2036604edb..f795862563cd250429cad3fa19ec7dda7ae023ba 100644 |
--- a/ui/gl/gl_gl_api_implementation.cc |
+++ b/ui/gl/gl_gl_api_implementation.cc |
@@ -7,6 +7,7 @@ |
#include <algorithm> |
#include <vector> |
+#include "base/at_exit.h" |
#include "base/command_line.h" |
#include "base/strings/string_util.h" |
#include "ui/gl/gl_context.h" |
@@ -14,6 +15,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 +25,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,8 +44,31 @@ static inline GLenum GetTexInternalFormat(GLenum internal_format, |
GLenum type) { |
GLenum gl_internal_format = GetInternalFormat(internal_format); |
- if (gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) |
+ if (gfx::g_version_info && gfx::g_version_info->is_es) { |
+ if (gfx::g_version_info->is_es3) { |
piman
2014/01/21 22:37:12
I think we want to limit the amount of magic that
oetuaho-nv
2014/01/22 09:46:54
Traditionally in OpenGL, the mechanism for the cli
|
+ // Use sized internal formats from core ES3 to get support for rendering |
no sievers
2014/01/21 22:21:13
Why is the format being renderable relevant in thi
oetuaho-nv
2014/01/22 09:46:54
When creating textures, it's better to choose a re
|
+ // to 32-bit float render targets using EXT_color_buffer_float. ES2 |
+ // extension is still relied on to provide the float LUMINANCE/ALPHA |
+ // formats missing from ES3. |
+ if (type == GL_FLOAT) { |
+ switch(format) { |
+ case GL_RGBA: |
+ gl_internal_format = GL_RGBA32F; |
+ break; |
+ case GL_RGB: |
+ gl_internal_format = GL_RGB32F; |
+ break; |
+ default: |
+ break; |
+ } |
+ } |
+ // GL_HALF_FLOAT_OES textures can be renderable with |
no sievers
2014/01/21 22:21:13
same here
|
+ // EXT_color_buffer_half_float, GL_HALF_FLOAT textures would require |
+ // EXT_color_buffer_float and similar enum conversions as above. |
+ DCHECK(type != GL_HALF_FLOAT); |
no sievers
2014/01/21 22:21:13
Does this compile? Isn't it GL_HALF_FLOAT_OES?
no sievers
2014/01/21 22:21:13
Don't we need to allow this? Looking at feature_in
oetuaho-nv
2014/01/22 09:46:54
Both of these enums exist, and have different valu
|
+ } |
return gl_internal_format; |
+ } |
if (type == GL_FLOAT) { |
switch (format) { |
@@ -144,6 +171,13 @@ static void GL_BINDING_CALL CustomRenderbufferStorageMultisampleEXT( |
target, samples, gl_internal_format, width, height); |
} |
+static void CleanupVersionInfo(void* unused) { |
+ if (g_version_info) { |
+ delete g_version_info; |
+ g_version_info = NULL; |
+ } |
+} |
+ |
} // anonymous namespace |
void DriverGL::InitializeCustomDynamicBindings(GLContext* context) { |
@@ -193,6 +227,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()); |
+ base::AtExitManager::RegisterCallback(CleanupVersionInfo, NULL); |
no sievers
2014/01/21 22:21:13
Hmm, are you doing this because we are actually no
oetuaho-nv
2014/01/22 09:46:54
Ah, I should have realized from the code that putt
|
} |
void InitializeDebugGLBindingsGL() { |
@@ -218,6 +255,7 @@ void ClearGLBindingsGL() { |
delete g_current_gl_context_tls; |
g_current_gl_context_tls = NULL; |
} |
+ CleanupVersionInfo(NULL); |
} |
GLApi::GLApi() { |