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 = [
{'name': 'ChromiumEnableFeature', 'dev': False},
{'name': 'ChromiumMapSub', 'dev': False},
{'name': 'Query', 'dev': False},
{'name': 'VertexArrayObject', 'dev': False},
{'name': 'DrawBuffers', 'dev': True},
]
......@@ -2426,6 +2427,7 @@ _FUNCTION_INFO = {
'resource_type': 'VertexArray',
'resource_types': 'VertexArrays',
'unit_test': False,
'pepper_interface': 'VertexArrayObject',
},
'BindVertexArrayOES': {
'type': 'Bind',
......@@ -2435,6 +2437,7 @@ _FUNCTION_INFO = {
'gen_func': 'GenVertexArraysOES',
'unit_test': False,
'client_test': False,
'pepper_interface': 'VertexArrayObject',
},
'DeleteVertexArraysOES': {
'type': 'DELn',
......@@ -2443,6 +2446,7 @@ _FUNCTION_INFO = {
'resource_type': 'VertexArray',
'resource_types': 'VertexArrays',
'unit_test': False,
'pepper_interface': 'VertexArrayObject',
},
'IsVertexArrayOES': {
'type': 'Is',
......@@ -2451,6 +2455,7 @@ _FUNCTION_INFO = {
'decoder_func': 'DoIsVertexArrayOES',
'expectation': False,
'unit_test': False,
'pepper_interface': 'VertexArrayObject',
},
'BindTexImage2DCHROMIUM': {
'decoder_func': 'DoBindTexImage2DCHROMIUM',
......
......@@ -611,4 +611,18 @@ struct PPB_OpenGLES2Query {
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_
......@@ -38,6 +38,8 @@ static const struct PPB_OpenGLES2ChromiumMapSub*
g_gles2_chromium_map_sub_interface = NULL;
static const struct PPB_OpenGLES2Query*
g_gles2_query_interface = NULL;
static const struct PPB_OpenGLES2VertexArrayObject*
g_gles2_vertex_array_object_interface = NULL;
static const struct PPB_OpenGLES2DrawBuffers_Dev*
g_gles2_draw_buffers_interface = NULL;
......@@ -75,6 +77,10 @@ GLboolean GL_APIENTRY glInitializePPAPI(
g_gles2_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) {
g_gles2_draw_buffers_interface =
get_browser_interface(PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE);
......@@ -129,6 +135,11 @@ const struct PPB_OpenGLES2Query* GL_APIENTRY
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
glGetDrawBuffersInterfacePPAPI(void) {
return g_gles2_draw_buffers_interface;
......
......@@ -49,6 +49,8 @@ GL_APICALL const struct PPB_OpenGLES2ChromiumMapSub* GL_APIENTRY
glGetChromiumMapSubInterfacePPAPI(void);
GL_APICALL const struct PPB_OpenGLES2Query* GL_APIENTRY
glGetQueryInterfacePPAPI(void);
GL_APICALL const struct PPB_OpenGLES2VertexArrayObject* GL_APIENTRY
glGetVertexArrayObjectInterfacePPAPI(void);
GL_APICALL const struct PPB_OpenGLES2DrawBuffers_Dev* GL_APIENTRY
glGetDrawBuffersInterfacePPAPI(void);
......
......@@ -967,6 +967,35 @@ glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* 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) {
const struct PPB_OpenGLES2ChromiumEnableFeature* ext =
glGetChromiumEnableFeatureInterfacePPAPI();
......
......@@ -241,6 +241,9 @@ InterfaceList::InterfaceList() {
PPB_OpenGLES2_Shared::GetChromiumMapSubInterface(), PERMISSION_NONE);
AddPPB(PPB_OPENGLES2_QUERY_INTERFACE_1_0,
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,
PPB_OpenGLES2_Shared::GetDrawBuffersInterface(),
PERMISSION_DEV);
......
......@@ -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) {
Enter3D enter(context_id, true);
if (enter.succeeded()) {
......@@ -1687,6 +1719,13 @@ const PPB_OpenGLES2Query* PPB_OpenGLES2_Shared::GetQueryInterface() {
&EndQueryEXT, &GetQueryivEXT, &GetQueryObjectuivEXT};
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*
PPB_OpenGLES2_Shared::GetDrawBuffersInterface() {
static const struct PPB_OpenGLES2DrawBuffers_Dev ppb_opengles2 = {
......
......@@ -22,6 +22,7 @@ class PPAPI_SHARED_EXPORT PPB_OpenGLES2_Shared {
GetChromiumEnableFeatureInterface();
static const PPB_OpenGLES2ChromiumMapSub* GetChromiumMapSubInterface();
static const PPB_OpenGLES2Query* GetQueryInterface();
static const PPB_OpenGLES2VertexArrayObject* GetVertexArrayObjectInterface();
static const PPB_OpenGLES2DrawBuffers_Dev* GetDrawBuffersInterface();
};
......
......@@ -114,12 +114,11 @@ std::string TestGraphics3D::TestExtensionsGL() {
ASSERT_NE(NULL, glGetString(GL_VERSION));
const char* ext = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
if (strstr(ext, "GL_EXT_occlusion_query_boolean")) {
GLuint a_query;
GLboolean is_a_query;
GLuint a_query = 0;
glGenQueriesEXT(1, &a_query);
ASSERT_NE(0, 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);
glEndQueryEXT(GL_ANY_SAMPLES_PASSED_EXT);
glDeleteQueriesEXT(1, &a_query);
......@@ -127,6 +126,16 @@ std::string TestGraphics3D::TestExtensionsGL() {
if (strstr(ext, "GL_ANGLE_instanced_arrays")) {
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);
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