From d13fe2321a225c4ecc0018dafb36536660fee665 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Fri, 4 Sep 2015 19:49:42 -0700 Subject: [PATCH] Manually merged pull request #508. --- src/glimports.h | 2 ++ src/renderer_gl.cpp | 22 +++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/glimports.h b/src/glimports.h index a38ec61a6..42e07aed1 100644 --- a/src/glimports.h +++ b/src/glimports.h @@ -200,6 +200,7 @@ typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLf typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height); typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); @@ -374,6 +375,7 @@ GL_IMPORT______(false, PFNGLUNIFORMMATRIX4FVPROC, glUniformMatr GL_IMPORT______(false, PFNGLUSEPROGRAMPROC, glUseProgram); GL_IMPORT______(true, PFNGLVERTEXATTRIBDIVISORPROC, glVertexAttribDivisor); GL_IMPORT______(false, PFNGLVERTEXATTRIBPOINTERPROC, glVertexAttribPointer); +GL_IMPORT______(true, PFNGLVERTEXATTRIBIPOINTERPROC, glVertexAttribIPointer); GL_IMPORT______(false, PFNGLVERTEXATTRIB1FPROC, glVertexAttrib1f); GL_IMPORT______(false, PFNGLVERTEXATTRIB2FPROC, glVertexAttrib2f); GL_IMPORT______(false, PFNGLVERTEXATTRIB3FPROC, glVertexAttrib3f); diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 627aec4b9..2ff369b69 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -3586,7 +3586,27 @@ namespace bgfx { namespace gl GL_CHECK(glVertexAttribDivisor(loc, 0) ); uint32_t baseVertex = _baseVertex*_vertexDecl.m_stride + _vertexDecl.m_offset[attr]; - GL_CHECK(glVertexAttribPointer(loc, num, s_attribType[type], normalized, _vertexDecl.m_stride, (void*)(uintptr_t)baseVertex) ); + if ( (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL >= 30) || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 31) ) + && (AttribType::Uint8 == type || AttribType::Int16 == type) + && !normalized) + { + GL_CHECK(glVertexAttribIPointer(loc + , num + , s_attribType[type] + , _vertexDecl.m_stride + , (void*)(uintptr_t)baseVertex) + ); + } + else + { + GL_CHECK(glVertexAttribPointer(loc + , num + , s_attribType[type] + , normalized + , _vertexDecl.m_stride + , (void*)(uintptr_t)baseVertex) + ); + } } else {