diff --git a/premake/bgfx.lua b/premake/bgfx.lua index c45f95c0..a5634143 100644 --- a/premake/bgfx.lua +++ b/premake/bgfx.lua @@ -5,7 +5,6 @@ project "bgfx" includedirs { BGFX_DIR .. "../tinystl/include", BGFX_DIR .. "../bx/include", - BGFX_DIR .. "3rdparty/glext", } buildoptions { @@ -26,6 +25,12 @@ project "bgfx" "$(DXSDK_DIR)/include", } + configuration { "not nacl" } + includedirs { + --nacl has GLES2 headers modified... + BGFX_DIR .. "3rdparty/glext", + } + configuration {} includedirs { diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index f66bac54..32644fd4 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -76,6 +76,7 @@ namespace bgfx , m_instance(0) , m_instInterface(NULL) , m_graphicsInterface(NULL) + , m_instancedArrays(NULL) #elif BGFX_USE_WGL , m_context(NULL) , m_hdc(NULL) @@ -529,6 +530,7 @@ namespace bgfx PP_Instance m_instance; const PPB_Instance* m_instInterface; const PPB_Graphics3D* m_graphicsInterface; + const PPB_OpenGLES2InstancedArrays* m_instancedArrays; #elif BGFX_USE_WGL HMODULE m_opengl32dll; HGLRC m_context; @@ -547,20 +549,42 @@ namespace bgfx RendererContext s_renderCtx; #if BX_PLATFORM_NACL + static void GL_APIENTRY naclVertexAttribDivisor(GLuint _index, GLuint _divisor) + { + s_renderCtx.m_instancedArrays->VertexAttribDivisorANGLE(s_renderCtx.m_context, _index, _divisor); + } + + static void GL_APIENTRY naclDrawArraysInstanced(GLenum _mode, GLint _first, GLsizei _count, GLsizei _primcount) + { + s_renderCtx.m_instancedArrays->DrawArraysInstancedANGLE(s_renderCtx.m_context, _mode, _first, _count, _primcount); + } + + static void GL_APIENTRY naclDrawElementsInstanced(GLenum _mode, GLsizei _count, GLenum _type, const GLvoid* _indices, GLsizei _primcount) + { + s_renderCtx.m_instancedArrays->DrawElementsInstancedANGLE(s_renderCtx.m_context, _mode, _count, _type, _indices, _primcount); + } + void naclSetIntefraces(PP_Instance _instance, const PPB_Instance* _instInterface, const PPB_Graphics3D* _graphicsInterface, PostSwapBuffersFn _postSwapBuffers) { s_renderCtx.m_instance = _instance; s_renderCtx.m_instInterface = _instInterface; s_renderCtx.m_graphicsInterface = _graphicsInterface; s_renderCtx.m_postSwapBuffers = _postSwapBuffers; + s_renderCtx.m_instancedArrays = glGetInstancedArraysInterfacePPAPI(); s_renderCtx.setRenderContextSize(BGFX_DEFAULT_WIDTH, BGFX_DEFAULT_HEIGHT); + + if (NULL != s_renderCtx.m_instancedArrays) + { + s_vertexAttribDivisor = naclVertexAttribDivisor; + s_drawArraysInstanced = naclDrawArraysInstanced; + s_drawElementsInstanced = naclDrawElementsInstanced; + } } void naclSwapCompleteCb(void* /*_data*/, int32_t /*_result*/) { renderFrame(); } - #elif BX_PLATFORM_LINUX bool linuxGetDisplay(Display** _display, Window* _window) {