Commit 078a1888 authored by zork@chromium.org's avatar zork@chromium.org

Add PPAPI interface for OpenGL ES 2.0 Vertex Array Objects.

BUG=72612,370496

Review URL: https://codereview.chromium.org/397183002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@283750 0039d316-1c4b-4281-b951-d872f2087c98
parent 3d4807a6
...@@ -1220,6 +1220,7 @@ _PEPPER_INTERFACES = [ ...@@ -1220,6 +1220,7 @@ _PEPPER_INTERFACES = [
{'name': 'ChromiumEnableFeature', 'dev': False}, {'name': 'ChromiumEnableFeature', 'dev': False},
{'name': 'ChromiumMapSub', 'dev': False}, {'name': 'ChromiumMapSub', 'dev': False},
{'name': 'Query', 'dev': False}, {'name': 'Query', 'dev': False},
{'name': 'VertexArrayObject', 'dev': False},
{'name': 'DrawBuffers', 'dev': True}, {'name': 'DrawBuffers', 'dev': True},
] ]
...@@ -2426,6 +2427,7 @@ _FUNCTION_INFO = { ...@@ -2426,6 +2427,7 @@ _FUNCTION_INFO = {
'resource_type': 'VertexArray', 'resource_type': 'VertexArray',
'resource_types': 'VertexArrays', 'resource_types': 'VertexArrays',
'unit_test': False, 'unit_test': False,
'pepper_interface': 'VertexArrayObject',
}, },
'BindVertexArrayOES': { 'BindVertexArrayOES': {
'type': 'Bind', 'type': 'Bind',
...@@ -2435,6 +2437,7 @@ _FUNCTION_INFO = { ...@@ -2435,6 +2437,7 @@ _FUNCTION_INFO = {
'gen_func': 'GenVertexArraysOES', 'gen_func': 'GenVertexArraysOES',
'unit_test': False, 'unit_test': False,
'client_test': False, 'client_test': False,
'pepper_interface': 'VertexArrayObject',
}, },
'DeleteVertexArraysOES': { 'DeleteVertexArraysOES': {
'type': 'DELn', 'type': 'DELn',
...@@ -2443,6 +2446,7 @@ _FUNCTION_INFO = { ...@@ -2443,6 +2446,7 @@ _FUNCTION_INFO = {
'resource_type': 'VertexArray', 'resource_type': 'VertexArray',
'resource_types': 'VertexArrays', 'resource_types': 'VertexArrays',
'unit_test': False, 'unit_test': False,
'pepper_interface': 'VertexArrayObject',
}, },
'IsVertexArrayOES': { 'IsVertexArrayOES': {
'type': 'Is', 'type': 'Is',
...@@ -2451,6 +2455,7 @@ _FUNCTION_INFO = { ...@@ -2451,6 +2455,7 @@ _FUNCTION_INFO = {
'decoder_func': 'DoIsVertexArrayOES', 'decoder_func': 'DoIsVertexArrayOES',
'expectation': False, 'expectation': False,
'unit_test': False, 'unit_test': False,
'pepper_interface': 'VertexArrayObject',
}, },
'BindTexImage2DCHROMIUM': { 'BindTexImage2DCHROMIUM': {
'decoder_func': 'DoBindTexImage2DCHROMIUM', 'decoder_func': 'DoBindTexImage2DCHROMIUM',
......
...@@ -611,4 +611,18 @@ struct PPB_OpenGLES2Query { ...@@ -611,4 +611,18 @@ struct PPB_OpenGLES2Query {
GLuint* params); GLuint* params);
}; };
#define PPB_OPENGLES2_VERTEXARRAYOBJECT_INTERFACE_1_0 \
"PPB_OpenGLES2VertexArrayObject;1.0"
#define PPB_OPENGLES2_VERTEXARRAYOBJECT_INTERFACE \
PPB_OPENGLES2_VERTEXARRAYOBJECT_INTERFACE_1_0
struct PPB_OpenGLES2VertexArrayObject {
void (*GenVertexArraysOES)(PP_Resource context, GLsizei n, GLuint* arrays);
void (*DeleteVertexArraysOES)(PP_Resource context,
GLsizei n,
const GLuint* arrays);
GLboolean (*IsVertexArrayOES)(PP_Resource context, GLuint array);
void (*BindVertexArrayOES)(PP_Resource context, GLuint array);
};
#endif // PPAPI_C_PPB_OPENGLES2_H_ #endif // PPAPI_C_PPB_OPENGLES2_H_
...@@ -38,6 +38,8 @@ static const struct PPB_OpenGLES2ChromiumMapSub* ...@@ -38,6 +38,8 @@ static const struct PPB_OpenGLES2ChromiumMapSub*
g_gles2_chromium_map_sub_interface = NULL; g_gles2_chromium_map_sub_interface = NULL;
static const struct PPB_OpenGLES2Query* static const struct PPB_OpenGLES2Query*
g_gles2_query_interface = NULL; g_gles2_query_interface = NULL;
static const struct PPB_OpenGLES2VertexArrayObject*
g_gles2_vertex_array_object_interface = NULL;
static const struct PPB_OpenGLES2DrawBuffers_Dev* static const struct PPB_OpenGLES2DrawBuffers_Dev*
g_gles2_draw_buffers_interface = NULL; g_gles2_draw_buffers_interface = NULL;
...@@ -75,6 +77,10 @@ GLboolean GL_APIENTRY glInitializePPAPI( ...@@ -75,6 +77,10 @@ GLboolean GL_APIENTRY glInitializePPAPI(
g_gles2_query_interface = g_gles2_query_interface =
get_browser_interface(PPB_OPENGLES2_QUERY_INTERFACE); get_browser_interface(PPB_OPENGLES2_QUERY_INTERFACE);
} }
if (!g_gles2_vertex_array_object_interface) {
g_gles2_vertex_array_object_interface =
get_browser_interface(PPB_OPENGLES2_VERTEXARRAYOBJECT_INTERFACE);
}
if (!g_gles2_draw_buffers_interface) { if (!g_gles2_draw_buffers_interface) {
g_gles2_draw_buffers_interface = g_gles2_draw_buffers_interface =
get_browser_interface(PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE); get_browser_interface(PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE);
...@@ -129,6 +135,11 @@ const struct PPB_OpenGLES2Query* GL_APIENTRY ...@@ -129,6 +135,11 @@ const struct PPB_OpenGLES2Query* GL_APIENTRY
return g_gles2_query_interface; return g_gles2_query_interface;
} }
const struct PPB_OpenGLES2VertexArrayObject* GL_APIENTRY
glGetVertexArrayObjectInterfacePPAPI(void) {
return g_gles2_vertex_array_object_interface;
}
const struct PPB_OpenGLES2DrawBuffers_Dev* GL_APIENTRY const struct PPB_OpenGLES2DrawBuffers_Dev* GL_APIENTRY
glGetDrawBuffersInterfacePPAPI(void) { glGetDrawBuffersInterfacePPAPI(void) {
return g_gles2_draw_buffers_interface; return g_gles2_draw_buffers_interface;
......
...@@ -49,6 +49,8 @@ GL_APICALL const struct PPB_OpenGLES2ChromiumMapSub* GL_APIENTRY ...@@ -49,6 +49,8 @@ GL_APICALL const struct PPB_OpenGLES2ChromiumMapSub* GL_APIENTRY
glGetChromiumMapSubInterfacePPAPI(void); glGetChromiumMapSubInterfacePPAPI(void);
GL_APICALL const struct PPB_OpenGLES2Query* GL_APIENTRY GL_APICALL const struct PPB_OpenGLES2Query* GL_APIENTRY
glGetQueryInterfacePPAPI(void); glGetQueryInterfacePPAPI(void);
GL_APICALL const struct PPB_OpenGLES2VertexArrayObject* GL_APIENTRY
glGetVertexArrayObjectInterfacePPAPI(void);
GL_APICALL const struct PPB_OpenGLES2DrawBuffers_Dev* GL_APIENTRY GL_APICALL const struct PPB_OpenGLES2DrawBuffers_Dev* GL_APIENTRY
glGetDrawBuffersInterfacePPAPI(void); glGetDrawBuffersInterfacePPAPI(void);
......
...@@ -967,6 +967,35 @@ glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) { ...@@ -967,6 +967,35 @@ glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) {
ext->GetQueryObjectuivEXT(glGetCurrentContextPPAPI(), id, pname, params); ext->GetQueryObjectuivEXT(glGetCurrentContextPPAPI(), id, pname, params);
} }
void GL_APIENTRY glGenVertexArraysOES(GLsizei n, GLuint* arrays) {
const struct PPB_OpenGLES2VertexArrayObject* ext =
glGetVertexArrayObjectInterfacePPAPI();
if (ext)
ext->GenVertexArraysOES(glGetCurrentContextPPAPI(), n, arrays);
}
void GL_APIENTRY glDeleteVertexArraysOES(GLsizei n, const GLuint* arrays) {
const struct PPB_OpenGLES2VertexArrayObject* ext =
glGetVertexArrayObjectInterfacePPAPI();
if (ext)
ext->DeleteVertexArraysOES(glGetCurrentContextPPAPI(), n, arrays);
}
GLboolean GL_APIENTRY glIsVertexArrayOES(GLuint array) {
const struct PPB_OpenGLES2VertexArrayObject* ext =
glGetVertexArrayObjectInterfacePPAPI();
if (ext)
return ext->IsVertexArrayOES(glGetCurrentContextPPAPI(), array);
return 0;
}
void GL_APIENTRY glBindVertexArrayOES(GLuint array) {
const struct PPB_OpenGLES2VertexArrayObject* ext =
glGetVertexArrayObjectInterfacePPAPI();
if (ext)
ext->BindVertexArrayOES(glGetCurrentContextPPAPI(), array);
}
GLboolean GL_APIENTRY glEnableFeatureCHROMIUM(const char* feature) { GLboolean GL_APIENTRY glEnableFeatureCHROMIUM(const char* feature) {
const struct PPB_OpenGLES2ChromiumEnableFeature* ext = const struct PPB_OpenGLES2ChromiumEnableFeature* ext =
glGetChromiumEnableFeatureInterfacePPAPI(); glGetChromiumEnableFeatureInterfacePPAPI();
......
...@@ -241,6 +241,9 @@ InterfaceList::InterfaceList() { ...@@ -241,6 +241,9 @@ InterfaceList::InterfaceList() {
PPB_OpenGLES2_Shared::GetChromiumMapSubInterface(), PERMISSION_NONE); PPB_OpenGLES2_Shared::GetChromiumMapSubInterface(), PERMISSION_NONE);
AddPPB(PPB_OPENGLES2_QUERY_INTERFACE_1_0, AddPPB(PPB_OPENGLES2_QUERY_INTERFACE_1_0,
PPB_OpenGLES2_Shared::GetQueryInterface(), PERMISSION_NONE); PPB_OpenGLES2_Shared::GetQueryInterface(), PERMISSION_NONE);
AddPPB(PPB_OPENGLES2_VERTEXARRAYOBJECT_INTERFACE_1_0,
PPB_OpenGLES2_Shared::GetVertexArrayObjectInterface(),
PERMISSION_NONE);
AddPPB(PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE_1_0, AddPPB(PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE_1_0,
PPB_OpenGLES2_Shared::GetDrawBuffersInterface(), PPB_OpenGLES2_Shared::GetDrawBuffersInterface(),
PERMISSION_DEV); PERMISSION_DEV);
......
...@@ -1476,6 +1476,38 @@ void GetQueryObjectuivEXT(PP_Resource context_id, ...@@ -1476,6 +1476,38 @@ void GetQueryObjectuivEXT(PP_Resource context_id,
} }
} }
void GenVertexArraysOES(PP_Resource context_id, GLsizei n, GLuint* arrays) {
Enter3D enter(context_id, true);
if (enter.succeeded()) {
ToGles2Impl(&enter)->GenVertexArraysOES(n, arrays);
}
}
void DeleteVertexArraysOES(PP_Resource context_id,
GLsizei n,
const GLuint* arrays) {
Enter3D enter(context_id, true);
if (enter.succeeded()) {
ToGles2Impl(&enter)->DeleteVertexArraysOES(n, arrays);
}
}
GLboolean IsVertexArrayOES(PP_Resource context_id, GLuint array) {
Enter3D enter(context_id, true);
if (enter.succeeded()) {
return ToGles2Impl(&enter)->IsVertexArrayOES(array);
} else {
return GL_FALSE;
}
}
void BindVertexArrayOES(PP_Resource context_id, GLuint array) {
Enter3D enter(context_id, true);
if (enter.succeeded()) {
ToGles2Impl(&enter)->BindVertexArrayOES(array);
}
}
GLboolean EnableFeatureCHROMIUM(PP_Resource context_id, const char* feature) { GLboolean EnableFeatureCHROMIUM(PP_Resource context_id, const char* feature) {
Enter3D enter(context_id, true); Enter3D enter(context_id, true);
if (enter.succeeded()) { if (enter.succeeded()) {
...@@ -1687,6 +1719,13 @@ const PPB_OpenGLES2Query* PPB_OpenGLES2_Shared::GetQueryInterface() { ...@@ -1687,6 +1719,13 @@ const PPB_OpenGLES2Query* PPB_OpenGLES2_Shared::GetQueryInterface() {
&EndQueryEXT, &GetQueryivEXT, &GetQueryObjectuivEXT}; &EndQueryEXT, &GetQueryivEXT, &GetQueryObjectuivEXT};
return &ppb_opengles2; return &ppb_opengles2;
} }
const PPB_OpenGLES2VertexArrayObject*
PPB_OpenGLES2_Shared::GetVertexArrayObjectInterface() {
static const struct PPB_OpenGLES2VertexArrayObject ppb_opengles2 = {
&GenVertexArraysOES, &DeleteVertexArraysOES, &IsVertexArrayOES,
&BindVertexArrayOES};
return &ppb_opengles2;
}
const PPB_OpenGLES2DrawBuffers_Dev* const PPB_OpenGLES2DrawBuffers_Dev*
PPB_OpenGLES2_Shared::GetDrawBuffersInterface() { PPB_OpenGLES2_Shared::GetDrawBuffersInterface() {
static const struct PPB_OpenGLES2DrawBuffers_Dev ppb_opengles2 = { static const struct PPB_OpenGLES2DrawBuffers_Dev ppb_opengles2 = {
......
...@@ -22,6 +22,7 @@ class PPAPI_SHARED_EXPORT PPB_OpenGLES2_Shared { ...@@ -22,6 +22,7 @@ class PPAPI_SHARED_EXPORT PPB_OpenGLES2_Shared {
GetChromiumEnableFeatureInterface(); GetChromiumEnableFeatureInterface();
static const PPB_OpenGLES2ChromiumMapSub* GetChromiumMapSubInterface(); static const PPB_OpenGLES2ChromiumMapSub* GetChromiumMapSubInterface();
static const PPB_OpenGLES2Query* GetQueryInterface(); static const PPB_OpenGLES2Query* GetQueryInterface();
static const PPB_OpenGLES2VertexArrayObject* GetVertexArrayObjectInterface();
static const PPB_OpenGLES2DrawBuffers_Dev* GetDrawBuffersInterface(); static const PPB_OpenGLES2DrawBuffers_Dev* GetDrawBuffersInterface();
}; };
......
...@@ -114,12 +114,11 @@ std::string TestGraphics3D::TestExtensionsGL() { ...@@ -114,12 +114,11 @@ std::string TestGraphics3D::TestExtensionsGL() {
ASSERT_NE(NULL, glGetString(GL_VERSION)); ASSERT_NE(NULL, glGetString(GL_VERSION));
const char* ext = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS)); const char* ext = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
if (strstr(ext, "GL_EXT_occlusion_query_boolean")) { if (strstr(ext, "GL_EXT_occlusion_query_boolean")) {
GLuint a_query; GLuint a_query = 0;
GLboolean is_a_query;
glGenQueriesEXT(1, &a_query); glGenQueriesEXT(1, &a_query);
ASSERT_NE(0, a_query); ASSERT_NE(0, a_query);
glBeginQueryEXT(GL_ANY_SAMPLES_PASSED_EXT, a_query); glBeginQueryEXT(GL_ANY_SAMPLES_PASSED_EXT, a_query);
is_a_query = glIsQueryEXT(a_query); GLboolean is_a_query = glIsQueryEXT(a_query);
ASSERT_EQ(is_a_query, GL_TRUE); ASSERT_EQ(is_a_query, GL_TRUE);
glEndQueryEXT(GL_ANY_SAMPLES_PASSED_EXT); glEndQueryEXT(GL_ANY_SAMPLES_PASSED_EXT);
glDeleteQueriesEXT(1, &a_query); glDeleteQueriesEXT(1, &a_query);
...@@ -127,6 +126,16 @@ std::string TestGraphics3D::TestExtensionsGL() { ...@@ -127,6 +126,16 @@ std::string TestGraphics3D::TestExtensionsGL() {
if (strstr(ext, "GL_ANGLE_instanced_arrays")) { if (strstr(ext, "GL_ANGLE_instanced_arrays")) {
glDrawArraysInstancedANGLE(GL_TRIANGLE_STRIP, 0, 0, 0); glDrawArraysInstancedANGLE(GL_TRIANGLE_STRIP, 0, 0, 0);
} }
if (strstr(ext, "GL_OES_vertex_array_object")) {
GLuint a_vertex_array = 0;
glGenVertexArraysOES(1, &a_vertex_array);
ASSERT_NE(0, a_vertex_array);
glBindVertexArrayOES(a_vertex_array);
GLboolean is_a_vertex_array = glIsVertexArrayOES(a_vertex_array);
ASSERT_EQ(is_a_vertex_array, GL_TRUE);
glBindVertexArrayOES(0);
glDeleteVertexArraysOES(1, &a_vertex_array);
}
glSetCurrentContextPPAPI(kInvalidContext); glSetCurrentContextPPAPI(kInvalidContext);
int32_t rv = SwapBuffersSync(&context); int32_t rv = SwapBuffersSync(&context);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment