Instead of querying the vertex attribute location. Let's bind it to where CG expects it to be as well. Was causing problems when we were trying to activate the components below and they weren't available. This fixes cubivore with GLSL shader. Also any other game that uses 3 normal pointers.
This commit is contained in:
parent
c908e1173d
commit
ad13f2d23d
|
@ -192,15 +192,8 @@ void GLVertexFormat::SetupVertexPointers() {
|
|||
if (vtx_decl.num_normals >= 1) {
|
||||
glNormalPointer(VarToGL(vtx_decl.normal_gl_type), vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[0]));
|
||||
if (vtx_decl.num_normals == 3) {
|
||||
GLint varLocation1 = SHADER_NORM1_ATTRIB, varLocation2 = SHADER_NORM2_ATTRIB;
|
||||
if(g_ActiveConfig.bUseGLSL){
|
||||
varLocation1 = OGL::ProgramShaderCache::GetAttr(0);
|
||||
varLocation2 = OGL::ProgramShaderCache::GetAttr(1);
|
||||
}
|
||||
if(varLocation1 > 0)
|
||||
glVertexAttribPointer(varLocation1, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1]));
|
||||
if(varLocation2 > 0)
|
||||
glVertexAttribPointer(varLocation2, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2]));
|
||||
glVertexAttribPointer(SHADER_NORM1_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[1]));
|
||||
glVertexAttribPointer(SHADER_NORM2_ATTRIB, vtx_decl.normal_gl_size, VarToGL(vtx_decl.normal_gl_type), GL_TRUE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.normal_offset[2]));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -224,11 +217,7 @@ void GLVertexFormat::SetupVertexPointers() {
|
|||
}
|
||||
|
||||
if (vtx_decl.posmtx_offset != -1) {
|
||||
GLint varLocation = SHADER_POSMTX_ATTRIB;
|
||||
if(g_ActiveConfig.bUseGLSL)
|
||||
varLocation = OGL::ProgramShaderCache::GetAttr(2);
|
||||
if(varLocation > 0)
|
||||
glVertexAttribPointer(varLocation, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset));
|
||||
glVertexAttribPointer(SHADER_POSMTX_ATTRIB, 4, GL_UNSIGNED_BYTE, GL_FALSE, vtx_decl.stride, (void *)(VertexManager::s_pBaseBufferPointer + vtx_decl.posmtx_offset));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -121,18 +121,10 @@ namespace OGL
|
|||
// Need to get some attribute locations
|
||||
if(uid.uid.vsid != 0) // We have no vertex Shader
|
||||
{
|
||||
entry.program.attrLoc[0] = glGetAttribLocation(entry.program.glprogid, "rawnorm1");
|
||||
entry.program.attrLoc[1] = glGetAttribLocation(entry.program.glprogid, "rawnorm2");
|
||||
entry.program.attrLoc[2] = glGetAttribLocation(entry.program.glprogid, "fposmtx");
|
||||
if(entry.program.attrLoc[0] > 0)
|
||||
glEnableVertexAttribArray(entry.program.attrLoc[0]);
|
||||
if(entry.program.attrLoc[1] > 0)
|
||||
glEnableVertexAttribArray(entry.program.attrLoc[1]);
|
||||
if(entry.program.attrLoc[2] > 0)
|
||||
glEnableVertexAttribArray(entry.program.attrLoc[2]);
|
||||
glBindAttribLocation(entry.program.glprogid, SHADER_NORM1_ATTRIB, "rawnorm1");
|
||||
glBindAttribLocation(entry.program.glprogid, SHADER_NORM2_ATTRIB, "rawnorm2");
|
||||
glBindAttribLocation(entry.program.glprogid, SHADER_POSMTX_ATTRIB, "fposmtx");
|
||||
}
|
||||
else
|
||||
entry.program.attrLoc[0] = entry.program.attrLoc[1] = entry.program.attrLoc[2] = 0;
|
||||
|
||||
|
||||
pshaders[ShaderPair] = entry;
|
||||
|
@ -154,10 +146,6 @@ namespace OGL
|
|||
|
||||
GLuint ProgramShaderCache::GetCurrentProgram(void) { return CurrentProgram; }
|
||||
|
||||
GLint ProgramShaderCache::GetAttr(int num)
|
||||
{
|
||||
return pshaders[CurrentShaderProgram].program.attrLoc[num];
|
||||
}
|
||||
PROGRAMSHADER ProgramShaderCache::GetShaderProgram(void)
|
||||
{
|
||||
return pshaders[CurrentShaderProgram].program;
|
||||
|
|
|
@ -72,7 +72,6 @@ struct PROGRAMSHADER
|
|||
PROGRAMSHADER() : glprogid(0), vsid(0), psid(0){}
|
||||
GLuint glprogid; // opengl program id
|
||||
GLuint vsid, psid;
|
||||
GLint attrLoc[3];
|
||||
GLint UniformLocations[NUM_UNIFORMS];
|
||||
};
|
||||
|
||||
|
@ -100,7 +99,6 @@ class ProgramShaderCache
|
|||
|
||||
public:
|
||||
static PROGRAMSHADER GetShaderProgram(void);
|
||||
static GLint GetAttr(int num);
|
||||
static void SetBothShaders(GLuint PS, GLuint VS);
|
||||
static GLuint GetCurrentProgram(void);
|
||||
|
||||
|
|
Loading…
Reference in New Issue