summaryrefslogtreecommitdiffstats
path: root/ppapi/lib/gl/gles2
diff options
context:
space:
mode:
authorjbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-26 21:09:27 +0000
committerjbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-26 21:09:27 +0000
commit5763796867cd36dc07dbba82e38c61a5879a0c77 (patch)
treee7ce1e2150db516a842e278f013b1ebc7585d7e3 /ppapi/lib/gl/gles2
parentffbec69cf826b6c5e88f2f29500c2f6f277130b9 (diff)
downloadchromium_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.c58
-rw-r--r--ppapi/lib/gl/gles2/gl2ext_ppapi.h13
-rw-r--r--ppapi/lib/gl/gles2/gles2.c94
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);
+}
+