mirror of
https://github.com/RetroDECK/Supermodel.git
synced 2025-02-16 17:35:39 +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);
|
glEnableVertexAttribArray(3);
|
||||||
|
|
||||||
// before draw, specify vertex and index arrays with their offsets, offsetof is maybe evil ..
|
// 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(m_r3dShader.GetVertexAttribPos("inVertex"), 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
|
||||||
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, normal));
|
glVertexAttribPointer(m_r3dShader.GetVertexAttribPos("inNormal"), 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(m_r3dShader.GetVertexAttribPos("inTexCoord"), 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("inColour"), 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, color));
|
||||||
|
|
||||||
m_r3dShader.SetShader(true);
|
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);
|
glUniformMatrix4fv (m_locMVP, 1, GL_FALSE, mvp);
|
||||||
|
|
||||||
glEnableVertexAttribArray (0);
|
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);
|
glDrawArrays (GL_TRIANGLES, 0, 6);
|
||||||
glDisableVertexAttribArray (0);
|
glDisableVertexAttribArray (0);
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ void R3DScrollFog::AllocResources()
|
||||||
m_locSpotFogColor = glGetUniformLocation(m_shaderProgram, "spotFogColor");
|
m_locSpotFogColor = glGetUniformLocation(m_shaderProgram, "spotFogColor");
|
||||||
m_locSpotEllipse = glGetUniformLocation(m_shaderProgram, "spotEllipse");
|
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);
|
m_vbo.Create(GL_ARRAY_BUFFER, GL_STATIC_DRAW, sizeof(SFTriangle) * (2), m_triangles);
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,12 +46,15 @@ private:
|
||||||
GLuint m_vertexShader;
|
GLuint m_vertexShader;
|
||||||
GLuint m_fragmentShader;
|
GLuint m_fragmentShader;
|
||||||
|
|
||||||
GLuint m_locFogColour;
|
GLint m_locFogColour;
|
||||||
GLuint m_locMVP;
|
GLint m_locMVP;
|
||||||
GLuint m_locFogAttenuation;
|
GLint m_locFogAttenuation;
|
||||||
GLuint m_locFogAmbient;
|
GLint m_locFogAmbient;
|
||||||
GLuint m_locSpotFogColor;
|
GLint m_locSpotFogColor;
|
||||||
GLuint m_locSpotEllipse;
|
GLint m_locSpotEllipse;
|
||||||
|
|
||||||
|
// vertex attrib locs
|
||||||
|
GLint m_locInVertex;
|
||||||
|
|
||||||
VBO m_vbo;
|
VBO m_vbo;
|
||||||
};
|
};
|
||||||
|
|
|
@ -308,15 +308,15 @@ bool R3DShader::LoadShader(const char* vertexShader, const char* fragmentShader)
|
||||||
m_locSpotColor = glGetUniformLocation(m_shaderProgram, "spotColor");
|
m_locSpotColor = glGetUniformLocation(m_shaderProgram, "spotColor");
|
||||||
m_locSpotFogColor = glGetUniformLocation(m_shaderProgram, "spotFogColor");
|
m_locSpotFogColor = glGetUniformLocation(m_shaderProgram, "spotFogColor");
|
||||||
m_locModelScale = glGetUniformLocation(m_shaderProgram, "modelScale");
|
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;
|
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)
|
void R3DShader::SetShader(bool enable)
|
||||||
{
|
{
|
||||||
if (enable) {
|
if (enable) {
|
||||||
|
|
|
@ -12,12 +12,13 @@ class R3DShader
|
||||||
public:
|
public:
|
||||||
R3DShader(const Util::Config::Node &config);
|
R3DShader(const Util::Config::Node &config);
|
||||||
|
|
||||||
bool LoadShader (const char* vertexShader = nullptr, const char* fragmentShader = nullptr);
|
bool LoadShader (const char* vertexShader = nullptr, const char* fragmentShader = nullptr);
|
||||||
void SetMeshUniforms (const Mesh* m);
|
void SetMeshUniforms (const Mesh* m);
|
||||||
void SetModelStates (const Model* model);
|
void SetModelStates (const Model* model);
|
||||||
void SetViewportUniforms (const Viewport *vp);
|
void SetViewportUniforms (const Viewport *vp);
|
||||||
void Start ();
|
void Start ();
|
||||||
void SetShader (bool enable = true);
|
void SetShader (bool enable = true);
|
||||||
|
GLint GetVertexAttribPos (const char* attrib);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue