mirror of
https://github.com/RetroDECK/Supermodel.git
synced 2024-11-22 13:55:38 +00:00
Fix attribute locations. glBindAttribLocation must be called linking
This commit is contained in:
parent
a315627401
commit
8f622714a7
|
@ -284,10 +284,10 @@ void CNew3D::RenderFrame(void)
|
|||
glEnableVertexAttribArray(3);
|
||||
|
||||
// before draw, specify vertex and index arrays with their offsets, offsetof is maybe evil ..
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
|
||||
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, normal));
|
||||
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, texcoords));
|
||||
glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, color));
|
||||
glVertexAttribPointer(m_r3dShader.GetVertexAttribPos("inVertex"), 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
|
||||
glVertexAttribPointer(m_r3dShader.GetVertexAttribPos("inNormal"), 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, normal));
|
||||
glVertexAttribPointer(m_r3dShader.GetVertexAttribPos("inTexCoord"), 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, texcoords));
|
||||
glVertexAttribPointer(m_r3dShader.GetVertexAttribPos("inColour"), 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, color));
|
||||
|
||||
m_r3dShader.SetShader(true);
|
||||
|
||||
|
|
|
@ -109,7 +109,7 @@ void R3DScrollFog::DrawScrollFog(float rgba[4], float attenuation, float ambient
|
|||
glUniformMatrix4fv (m_locMVP, 1, GL_FALSE, mvp);
|
||||
|
||||
glEnableVertexAttribArray (0);
|
||||
glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, sizeof(SFVertex), 0);
|
||||
glVertexAttribPointer (m_locInVertex, 3, GL_FLOAT, GL_FALSE, sizeof(SFVertex), 0);
|
||||
glDrawArrays (GL_TRIANGLES, 0, 6);
|
||||
glDisableVertexAttribArray (0);
|
||||
|
||||
|
@ -131,7 +131,7 @@ void R3DScrollFog::AllocResources()
|
|||
m_locSpotFogColor = glGetUniformLocation(m_shaderProgram, "spotFogColor");
|
||||
m_locSpotEllipse = glGetUniformLocation(m_shaderProgram, "spotEllipse");
|
||||
|
||||
glBindAttribLocation(m_shaderProgram, 0, "inVertex");
|
||||
m_locInVertex = glGetAttribLocation(m_shaderProgram, "inVertex");
|
||||
|
||||
m_vbo.Create(GL_ARRAY_BUFFER, GL_STATIC_DRAW, sizeof(SFTriangle) * (2), m_triangles);
|
||||
}
|
||||
|
|
|
@ -46,12 +46,15 @@ private:
|
|||
GLuint m_vertexShader;
|
||||
GLuint m_fragmentShader;
|
||||
|
||||
GLuint m_locFogColour;
|
||||
GLuint m_locMVP;
|
||||
GLuint m_locFogAttenuation;
|
||||
GLuint m_locFogAmbient;
|
||||
GLuint m_locSpotFogColor;
|
||||
GLuint m_locSpotEllipse;
|
||||
GLint m_locFogColour;
|
||||
GLint m_locMVP;
|
||||
GLint m_locFogAttenuation;
|
||||
GLint m_locFogAmbient;
|
||||
GLint m_locSpotFogColor;
|
||||
GLint m_locSpotEllipse;
|
||||
|
||||
// vertex attrib locs
|
||||
GLint m_locInVertex;
|
||||
|
||||
VBO m_vbo;
|
||||
};
|
||||
|
|
|
@ -308,15 +308,15 @@ bool R3DShader::LoadShader(const char* vertexShader, const char* fragmentShader)
|
|||
m_locSpotColor = glGetUniformLocation(m_shaderProgram, "spotColor");
|
||||
m_locSpotFogColor = glGetUniformLocation(m_shaderProgram, "spotFogColor");
|
||||
m_locModelScale = glGetUniformLocation(m_shaderProgram, "modelScale");
|
||||
|
||||
glBindAttribLocation(m_shaderProgram, 0, "inVertex");
|
||||
glBindAttribLocation(m_shaderProgram, 1, "inNormal");
|
||||
glBindAttribLocation(m_shaderProgram, 2, "inTexCoord");
|
||||
glBindAttribLocation(m_shaderProgram, 3, "inColour");
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
GLint R3DShader::GetVertexAttribPos(const char* attrib)
|
||||
{
|
||||
return glGetAttribLocation(m_shaderProgram, attrib); // probably should cache this but only called 1x per frame anyway
|
||||
}
|
||||
|
||||
void R3DShader::SetShader(bool enable)
|
||||
{
|
||||
if (enable) {
|
||||
|
|
|
@ -12,12 +12,13 @@ class R3DShader
|
|||
public:
|
||||
R3DShader(const Util::Config::Node &config);
|
||||
|
||||
bool LoadShader (const char* vertexShader = nullptr, const char* fragmentShader = nullptr);
|
||||
void SetMeshUniforms (const Mesh* m);
|
||||
void SetModelStates (const Model* model);
|
||||
void SetViewportUniforms (const Viewport *vp);
|
||||
void Start ();
|
||||
void SetShader (bool enable = true);
|
||||
bool LoadShader (const char* vertexShader = nullptr, const char* fragmentShader = nullptr);
|
||||
void SetMeshUniforms (const Mesh* m);
|
||||
void SetModelStates (const Model* model);
|
||||
void SetViewportUniforms (const Viewport *vp);
|
||||
void Start ();
|
||||
void SetShader (bool enable = true);
|
||||
GLint GetVertexAttribPos (const char* attrib);
|
||||
|
||||
private:
|
||||
|
||||
|
|
Loading…
Reference in a new issue