diff options
author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-07 02:23:26 +0000 |
---|---|---|
committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-07 02:23:26 +0000 |
commit | 4b192392eaf11e4fa24c364fd3a34ea35eaa5414 (patch) | |
tree | ac23470b673b46601f7a0350903d3eb99319ec28 /ui | |
parent | d4f1754e80b5f427f2c82f1515447943b8921a51 (diff) | |
download | chromium_src-4b192392eaf11e4fa24c364fd3a34ea35eaa5414.zip chromium_src-4b192392eaf11e4fa24c364fd3a34ea35eaa5414.tar.gz chromium_src-4b192392eaf11e4fa24c364fd3a34ea35eaa5414.tar.bz2 |
Revert "Revert 198403 "Move WrappedTexImage functionality to ui/gl""
This reverts commit 774a135353b9b6eadaf6d074c135c3a433de3eee.
BUG=235031
TBR=piman@chromium.org
Review URL: https://chromiumcodereview.appspot.com/14872010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@198596 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/gl/gl_gl_api_implementation.cc | 100 | ||||
-rw-r--r-- | ui/gl/gl_gl_api_implementation.h | 11 |
2 files changed, 111 insertions, 0 deletions
diff --git a/ui/gl/gl_gl_api_implementation.cc b/ui/gl/gl_gl_api_implementation.cc index 303ae1d..b8d8c5c 100644 --- a/ui/gl/gl_gl_api_implementation.cc +++ b/ui/gl/gl_gl_api_implementation.cc @@ -10,6 +10,7 @@ #include "base/command_line.h" #include "base/string_util.h" #include "ui/gl/gl_context.h" +#include "ui/gl/gl_implementation.h" #include "ui/gl/gl_state_restorer.h" #include "ui/gl/gl_surface.h" #include "ui/gl/gl_switches.h" @@ -99,6 +100,105 @@ void RealGLApi::Initialize(DriverGL* driver) { InitializeBase(driver); } +static inline GLenum GetTexInternalFormat(GLenum internal_format) { + if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) { + if (internal_format == GL_BGRA_EXT || internal_format == GL_BGRA8_EXT) + return GL_RGBA8; + } + return internal_format; +} + +// TODO(epenner): Could the above function be merged into this and removed? +static inline GLenum GetTexInternalFormat(GLenum internal_format, + GLenum format, + GLenum type) { + GLenum gl_internal_format = GetTexInternalFormat(internal_format); + + if (gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) + return gl_internal_format; + + if (type == GL_FLOAT) { + switch (format) { + case GL_RGBA: + gl_internal_format = GL_RGBA32F_ARB; + break; + case GL_RGB: + gl_internal_format = GL_RGB32F_ARB; + break; + case GL_LUMINANCE_ALPHA: + gl_internal_format = GL_LUMINANCE_ALPHA32F_ARB; + break; + case GL_LUMINANCE: + gl_internal_format = GL_LUMINANCE32F_ARB; + break; + case GL_ALPHA: + gl_internal_format = GL_ALPHA32F_ARB; + break; + default: + NOTREACHED(); + break; + } + } else if (type == GL_HALF_FLOAT_OES) { + switch (format) { + case GL_RGBA: + gl_internal_format = GL_RGBA16F_ARB; + break; + case GL_RGB: + gl_internal_format = GL_RGB16F_ARB; + break; + case GL_LUMINANCE_ALPHA: + gl_internal_format = GL_LUMINANCE_ALPHA16F_ARB; + break; + case GL_LUMINANCE: + gl_internal_format = GL_LUMINANCE16F_ARB; + break; + case GL_ALPHA: + gl_internal_format = GL_ALPHA16F_ARB; + break; + default: + NOTREACHED(); + break; + } + } + return gl_internal_format; +} + +static inline GLenum GetTexType(GLenum type) { + if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) { + if (type == GL_HALF_FLOAT_OES) + return GL_HALF_FLOAT_ARB; + } + return type; +} + +void RealGLApi::glTexImage2DFn( + GLenum target, GLint level, GLint internalformat, + GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, + const void* pixels) { + GLenum gl_internal_format = GetTexInternalFormat( + internalformat, format, type); + GLenum gl_type = GetTexType(type); + return driver_->fn.glTexImage2DFn( + target, level, gl_internal_format, width, height, border, format, gl_type, + pixels); +} + +void RealGLApi::glTexSubImage2DFn( + GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, + GLsizei height, GLenum format, GLenum type, const void* pixels) { + GLenum gl_type = GetTexType(type); + return driver_->fn.glTexSubImage2DFn( + target, level, xoffset, yoffset, width, height, format, gl_type, pixels); +} + +void RealGLApi::glTexStorage2DEXTFn( + GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, + GLsizei height) { + GLenum gl_internal_format = GetTexInternalFormat(internalformat); + return driver_->fn.glTexStorage2DEXTFn( + target, levels, gl_internal_format, width, height); +} + TraceGLApi::~TraceGLApi() { } diff --git a/ui/gl/gl_gl_api_implementation.h b/ui/gl/gl_gl_api_implementation.h index 579739e..156fae3 100644 --- a/ui/gl/gl_gl_api_implementation.h +++ b/ui/gl/gl_gl_api_implementation.h @@ -47,6 +47,17 @@ class GL_EXPORT RealGLApi : public GLApiBase { RealGLApi(); virtual ~RealGLApi(); void Initialize(DriverGL* driver); + + virtual void glTexImage2DFn( + GLenum target, GLint level, GLint internalformat, + GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, + const void* pixels) OVERRIDE; + virtual void glTexStorage2DEXTFn( + GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, + GLsizei height) OVERRIDE; + virtual void glTexSubImage2DFn( + GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, + GLsizei height, GLenum format, GLenum type, const void* pixels) OVERRIDE; }; // Inserts a TRACE for every GL call. |