1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
GLfloat vertices[20];
const Dimension2i & textureSize = m_texture->getSize(); // Dimension de l'image, 800 x 600 durant le test
vertices[0] = 0.f; vertices[1] = (float)textureSize.height; vertices[2] = 0.f; vertices[3] = 0.f; vertices[4] = 0.f;
vertices[5] = 0.f; vertices[6] = 0.f; vertices[7] = 0.f; vertices[8] = 0.f; vertices[9] = 1.f;
vertices[10] = (float)textureSize.width;vertices[11] = (float)textureSize.height;vertices[12] = 0.f;vertices[13] = 1.f;vertices[14] = 0.f;
vertices[15] = (float)textureSize.width;vertices[16] = 0.f; vertices[17] = 0.f;vertices[18] = 1.f;vertices[19] = 1.f;
// Dans mon objet Shader. m_program est le code du programme compilé
GLint currentProgram;
glGetIntegerv(GL_CURRENT_PROGRAM, ¤tProgram);
if(currentProgram != m_program)
{
glUseProgram(m_program);
}
// Je bind la texture
GLint location = glGetUniformLocation(m_program, "uTexture");
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, m_textureId);
glUniform1i(location, 0);
// Je set une couleur globale
GLint location = glGetUniformLocation(m_program, "uColor");
glUniform4f(location, 1.f, 0.f, 0.f, 1.f);
// Je set la matrice
GLint location = glGetUniformLocation(m_program, "uModelView");
glUniformMatrix4fv(location, 1, false, m.pointer()) // m est une matrice 4x4, pointer() retourne un float[16]
// J'active les vertex attrib
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 5, vertices);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5, vertices + 3);
glEnableVertexAttribArray(1);
// Et je draw le tout
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); |
Partager