bool Ppapi::setInterfaces(PP_Instance _instance, const PPB_Instance* _instInterface, const PPB_Graphics3D* _graphicsInterface, PostSwapBuffersFn _postSwapBuffers) { BX_TRACE("PPAPI Interfaces"); m_instance = _instance; m_instInterface = _instInterface; m_graphicsInterface = _graphicsInterface; m_instancedArrays = glGetInstancedArraysInterfacePPAPI(); m_query = glGetQueryInterfacePPAPI(); m_postSwapBuffers = _postSwapBuffers; int32_t attribs[] = { PP_GRAPHICS3DATTRIB_ALPHA_SIZE, 8, PP_GRAPHICS3DATTRIB_DEPTH_SIZE, 24, PP_GRAPHICS3DATTRIB_STENCIL_SIZE, 8, PP_GRAPHICS3DATTRIB_SAMPLES, 0, PP_GRAPHICS3DATTRIB_SAMPLE_BUFFERS, 0, PP_GRAPHICS3DATTRIB_WIDTH, BGFX_DEFAULT_WIDTH, PP_GRAPHICS3DATTRIB_HEIGHT, BGFX_DEFAULT_HEIGHT, PP_GRAPHICS3DATTRIB_NONE }; m_context = m_graphicsInterface->Create(m_instance, 0, attribs); if (0 == m_context) { BX_TRACE("Failed to create context!"); return false; } m_instInterface->BindGraphics(m_instance, m_context); glSetCurrentContextPPAPI(m_context); m_graphicsInterface->SwapBuffers(m_context, naclSwapComplete); if (NULL != m_instancedArrays) { glVertexAttribDivisor = naclVertexAttribDivisor; glDrawArraysInstanced = naclDrawArraysInstanced; glDrawElementsInstanced = naclDrawElementsInstanced; } if (NULL != m_query) { glGenQueries = naclGenQueries; glDeleteQueries = naclDeleteQueries; glBeginQuery = naclBeginQuery; glEndQuery = naclEndQuery; glGetQueryObjectiv = naclGetQueryObjectiv; glGetQueryObjectui64v = naclGetQueryObjectui64v; } // Prevent render thread creation. RenderFrame::Enum result = renderFrame(); return RenderFrame::NoContext == result; }
void GL_APIENTRY glGetQueryObjectuivEXT( GLuint id, GLenum pname, GLuint* params) { const struct PPB_OpenGLES2Query* ext = glGetQueryInterfacePPAPI(); if (ext) ext->GetQueryObjectuivEXT(glGetCurrentContextPPAPI(), id, pname, params); }
void GL_APIENTRY glGetQueryivEXT(GLenum target, GLenum pname, GLint* params) { const struct PPB_OpenGLES2Query* ext = glGetQueryInterfacePPAPI(); if (ext) ext->GetQueryivEXT(glGetCurrentContextPPAPI(), target, pname, params); }
void GL_APIENTRY glEndQueryEXT(GLenum target) { const struct PPB_OpenGLES2Query* ext = glGetQueryInterfacePPAPI(); if (ext) ext->EndQueryEXT(glGetCurrentContextPPAPI(), target); }
void GL_APIENTRY glBeginQueryEXT(GLenum target, GLuint id) { const struct PPB_OpenGLES2Query* ext = glGetQueryInterfacePPAPI(); if (ext) ext->BeginQueryEXT(glGetCurrentContextPPAPI(), target, id); }
GLboolean GL_APIENTRY glIsQueryEXT(GLuint id) { const struct PPB_OpenGLES2Query* ext = glGetQueryInterfacePPAPI(); if (ext) return ext->IsQueryEXT(glGetCurrentContextPPAPI(), id); return 0; }
void GL_APIENTRY glDeleteQueriesEXT(GLsizei n, const GLuint* queries) { const struct PPB_OpenGLES2Query* ext = glGetQueryInterfacePPAPI(); if (ext) ext->DeleteQueriesEXT(glGetCurrentContextPPAPI(), n, queries); }