diff options
author | jbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-26 21:09:27 +0000 |
---|---|---|
committer | jbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-26 21:09:27 +0000 |
commit | 5763796867cd36dc07dbba82e38c61a5879a0c77 (patch) | |
tree | e7ce1e2150db516a842e278f013b1ebc7585d7e3 /ppapi/lib/gl/gles2 | |
parent | ffbec69cf826b6c5e88f2f29500c2f6f277130b9 (diff) | |
download | chromium_src-5763796867cd36dc07dbba82e38c61a5879a0c77.zip chromium_src-5763796867cd36dc07dbba82e38c61a5879a0c77.tar.gz chromium_src-5763796867cd36dc07dbba82e38c61a5879a0c77.tar.bz2 |
Add Pepper support for several GL extensions
Add support to the command buffer code generator to generate multiple pepper interfaces, and use that to generate interfaces for ANGLE_instanced_arrays, ANGLE_framebuffer_blit, ANGLE_framebuffer_multisample, CHROMIUM_enable_feature, and CHROMIUM_map_sub.
BUG=93148
TEST=
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=123696
Review URL: https://chromiumcodereview.appspot.com/9420017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@123702 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/lib/gl/gles2')
-rw-r--r-- | ppapi/lib/gl/gles2/gl2ext_ppapi.c | 58 | ||||
-rw-r--r-- | ppapi/lib/gl/gles2/gl2ext_ppapi.h | 13 | ||||
-rw-r--r-- | ppapi/lib/gl/gles2/gles2.c | 94 |
3 files changed, 162 insertions, 3 deletions
diff --git a/ppapi/lib/gl/gles2/gl2ext_ppapi.c b/ppapi/lib/gl/gles2/gl2ext_ppapi.c index 62d842d..6bdc09d 100644 --- a/ppapi/lib/gl/gles2/gl2ext_ppapi.c +++ b/ppapi/lib/gl/gles2/gl2ext_ppapi.c @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -26,6 +26,16 @@ // TODO(alokp): This will need to be thread-safe if we build gles2 as a // shared library. static const struct PPB_OpenGLES2* g_gles2_interface = NULL; +static const struct PPB_OpenGLES2InstancedArrays_Dev* + g_gles2_instanced_arrays_interface = NULL; +static const struct PPB_OpenGLES2FramebufferBlit_Dev* + g_gles2_framebuffer_blit_interface = NULL; +static const struct PPB_OpenGLES2FramebufferMultisample_Dev* + g_gles2_framebuffer_multisample_interface = NULL; +static const struct PPB_OpenGLES2ChromiumEnableFeature_Dev* + g_gles2_chromium_enable_feature_interface = NULL; +static const struct PPB_OpenGLES2ChromiumMapSub_Dev* + g_gles2_chromium_map_sub_interface = NULL; // TODO(alokp): Make sure PP_TLS works on all supported platforms. static PP_TLS PP_Resource g_current_context = 0; @@ -35,6 +45,28 @@ GLboolean GL_APIENTRY glInitializePPAPI( if (!g_gles2_interface) { g_gles2_interface = get_browser_interface(PPB_OPENGLES2_INTERFACE); } + if (!g_gles2_instanced_arrays_interface) { + g_gles2_instanced_arrays_interface = + get_browser_interface(PPB_OPENGLES2_INSTANCEDARRAYS_DEV_INTERFACE); + } + if (!g_gles2_framebuffer_blit_interface) { + g_gles2_framebuffer_blit_interface = + get_browser_interface(PPB_OPENGLES2_FRAMEBUFFERBLIT_DEV_INTERFACE); + } + if (!g_gles2_framebuffer_multisample_interface) { + g_gles2_framebuffer_multisample_interface = + get_browser_interface( + PPB_OPENGLES2_FRAMEBUFFERMULTISAMPLE_DEV_INTERFACE); + } + if (!g_gles2_chromium_enable_feature_interface) { + g_gles2_chromium_enable_feature_interface = + get_browser_interface( + PPB_OPENGLES2_CHROMIUMENABLEFEATURE_DEV_INTERFACE); + } + if (!g_gles2_chromium_map_sub_interface) { + g_gles2_chromium_map_sub_interface = + get_browser_interface(PPB_OPENGLES2_CHROMIUMMAPSUB_DEV_INTERFACE); + } return g_gles2_interface ? GL_TRUE : GL_FALSE; } @@ -55,3 +87,27 @@ const struct PPB_OpenGLES2* GL_APIENTRY glGetInterfacePPAPI() { return g_gles2_interface; } +const struct PPB_OpenGLES2InstancedArrays_Dev* GL_APIENTRY + glGetInstancedArraysInterfacePPAPI() { + return g_gles2_instanced_arrays_interface; +} + +const struct PPB_OpenGLES2FramebufferBlit_Dev* GL_APIENTRY + glGetFramebufferBlitInterfacePPAPI() { + return g_gles2_framebuffer_blit_interface; +} + +const struct PPB_OpenGLES2FramebufferMultisample_Dev* GL_APIENTRY + glGetFramebufferMultisampleInterfacePPAPI() { + return g_gles2_framebuffer_multisample_interface; +} + +const struct PPB_OpenGLES2ChromiumEnableFeature_Dev* GL_APIENTRY + glGetChromiumEnableFeatureInterfacePPAPI() { + return g_gles2_chromium_enable_feature_interface; +} + +const struct PPB_OpenGLES2ChromiumMapSub_Dev* GL_APIENTRY + glGetChromiumMapSubInterfacePPAPI() { + return g_gles2_chromium_map_sub_interface; +} diff --git a/ppapi/lib/gl/gles2/gl2ext_ppapi.h b/ppapi/lib/gl/gles2/gl2ext_ppapi.h index fcfabd8..d33814e 100644 --- a/ppapi/lib/gl/gles2/gl2ext_ppapi.h +++ b/ppapi/lib/gl/gles2/gl2ext_ppapi.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -12,6 +12,7 @@ #include "ppapi/c/pp_resource.h" #include "ppapi/c/ppb.h" #include "ppapi/c/ppb_opengles2.h" +#include "ppapi/c/dev/ppb_opengles2ext_dev.h" #ifdef __cplusplus extern "C" { @@ -36,6 +37,16 @@ GL_APICALL PP_Resource GL_APIENTRY glGetCurrentContextPPAPI(); // Returns OpenGL ES 2.0 interface. GL_APICALL const struct PPB_OpenGLES2* GL_APIENTRY glGetInterfacePPAPI(); +GL_APICALL const struct PPB_OpenGLES2InstancedArrays_Dev* GL_APIENTRY + glGetInstancedArraysInterfacePPAPI(); +GL_APICALL const struct PPB_OpenGLES2FramebufferBlit_Dev* GL_APIENTRY + glGetFramebufferBlitInterfacePPAPI(); +GL_APICALL const struct PPB_OpenGLES2FramebufferMultisample_Dev* GL_APIENTRY + glGetFramebufferMultisampleInterfacePPAPI(); +GL_APICALL const struct PPB_OpenGLES2ChromiumEnableFeature_Dev* GL_APIENTRY + glGetChromiumEnableFeatureInterfacePPAPI(); +GL_APICALL const struct PPB_OpenGLES2ChromiumMapSub_Dev* GL_APIENTRY + glGetChromiumMapSubInterfacePPAPI(); #ifdef __cplusplus } diff --git a/ppapi/lib/gl/gles2/gles2.c b/ppapi/lib/gl/gles2/gles2.c index 8dba474..f0ae66f 100644 --- a/ppapi/lib/gl/gles2/gles2.c +++ b/ppapi/lib/gl/gles2/gles2.c @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -753,3 +753,95 @@ void GL_APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height) { glGetCurrentContextPPAPI(), x, y, width, height); } +void GL_APIENTRY glBlitFramebufferEXT( + GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, + GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { + const struct PPB_OpenGLES2FramebufferBlit_Dev* ext = + glGetFramebufferBlitInterfacePPAPI(); + if (ext) + ext->BlitFramebufferEXT( + glGetCurrentContextPPAPI(), srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, + dstX1, dstY1, mask, filter); +} + +void GL_APIENTRY glRenderbufferStorageMultisampleEXT( + GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, + GLsizei height) { + const struct PPB_OpenGLES2FramebufferMultisample_Dev* ext = + glGetFramebufferMultisampleInterfacePPAPI(); + if (ext) + ext->RenderbufferStorageMultisampleEXT( + glGetCurrentContextPPAPI(), target, samples, internalformat, width, + height); +} + +GLboolean GL_APIENTRY glEnableFeatureCHROMIUM(const char* feature) { + const struct PPB_OpenGLES2ChromiumEnableFeature_Dev* ext = + glGetChromiumEnableFeatureInterfacePPAPI(); + if (ext) + return ext->EnableFeatureCHROMIUM(glGetCurrentContextPPAPI(), feature); + return 0; +} + +void* GL_APIENTRY glMapBufferSubDataCHROMIUM( + GLuint target, GLintptr offset, GLsizeiptr size, GLenum access) { + const struct PPB_OpenGLES2ChromiumMapSub_Dev* ext = + glGetChromiumMapSubInterfacePPAPI(); + if (ext) + return ext->MapBufferSubDataCHROMIUM( + glGetCurrentContextPPAPI(), target, offset, size, access); + return 0; +} + +void GL_APIENTRY glUnmapBufferSubDataCHROMIUM(const void* mem) { + const struct PPB_OpenGLES2ChromiumMapSub_Dev* ext = + glGetChromiumMapSubInterfacePPAPI(); + if (ext) + ext->UnmapBufferSubDataCHROMIUM(glGetCurrentContextPPAPI(), mem); +} + +void* GL_APIENTRY glMapTexSubImage2DCHROMIUM( + GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, + GLsizei height, GLenum format, GLenum type, GLenum access) { + const struct PPB_OpenGLES2ChromiumMapSub_Dev* ext = + glGetChromiumMapSubInterfacePPAPI(); + if (ext) + return ext->MapTexSubImage2DCHROMIUM( + glGetCurrentContextPPAPI(), target, level, xoffset, yoffset, width, + height, format, type, access); + return 0; +} + +void GL_APIENTRY glUnmapTexSubImage2DCHROMIUM(const void* mem) { + const struct PPB_OpenGLES2ChromiumMapSub_Dev* ext = + glGetChromiumMapSubInterfacePPAPI(); + if (ext) + ext->UnmapTexSubImage2DCHROMIUM(glGetCurrentContextPPAPI(), mem); +} + +void GL_APIENTRY glDrawArraysInstancedANGLE( + GLenum mode, GLint first, GLsizei count, GLsizei primcount) { + const struct PPB_OpenGLES2InstancedArrays_Dev* ext = + glGetInstancedArraysInterfacePPAPI(); + if (ext) + ext->DrawArraysInstancedANGLE( + glGetCurrentContextPPAPI(), mode, first, count, primcount); +} + +void GL_APIENTRY glDrawElementsInstancedANGLE( + GLenum mode, GLsizei count, GLenum type, const void* indices, + GLsizei primcount) { + const struct PPB_OpenGLES2InstancedArrays_Dev* ext = + glGetInstancedArraysInterfacePPAPI(); + if (ext) + ext->DrawElementsInstancedANGLE( + glGetCurrentContextPPAPI(), mode, count, type, indices, primcount); +} + +void GL_APIENTRY glVertexAttribDivisorANGLE(GLuint index, GLuint divisor) { + const struct PPB_OpenGLES2InstancedArrays_Dev* ext = + glGetInstancedArraysInterfacePPAPI(); + if (ext) + ext->VertexAttribDivisorANGLE(glGetCurrentContextPPAPI(), index, divisor); +} + |