m_shader->Enable();
// ...
// Send uniforms to shader
//
GLuint positionsAttribLocation = 0;
GLuint normalsAttribLocation = 0;
GLuint texCoordsAttribLocation = 0;
GLuint tangentsAttribLocation = 0;
GLuint binormalsAttribLocation = 0;
positionsAttribLocation = m_shader->GetAttribLocation("in_vPosition");
glEnableVertexAttribArray(positionsAttribLocation);
glBindBuffer(GL_ARRAY_BUFFER, m_positionsBufferId);
glVertexAttribPointer(positionsAttribLocation, 3, GL_FLOAT, GL_FALSE, 0, NULL);
normalsAttribLocation = m_shader->GetAttribLocation("in_vNormal");
glEnableVertexAttribArray(normalsAttribLocation);
glBindBuffer(GL_ARRAY_BUFFER, m_normalsBufferId);
glVertexAttribPointer(normalsAttribLocation, 3, GL_FLOAT, GL_FALSE, 0, NULL);
texCoordsAttribLocation = m_shader->GetAttribLocation("in_vTexCoord");
glEnableVertexAttribArray(texCoordsAttribLocation);
glBindBuffer(GL_ARRAY_BUFFER, m_texCoordsBufferId);
glVertexAttribPointer(texCoordsAttribLocation, 2, GL_FLOAT, GL_FALSE, 0, NULL);
tangentsAttribLocation = m_shader->GetAttribLocation("in_vTangent");
glEnableVertexAttribArray(tangentsAttribLocation);
glBindBuffer(GL_ARRAY_BUFFER, m_tangentsBufferId);
glVertexAttribPointer(tangentsAttribLocation, 3, GL_FLOAT, GL_FALSE, 0, NULL);
binormalsAttribLocation = m_shader->GetAttribLocation("in_vBinormal");
glEnableVertexAttribArray(binormalsAttribLocation);
glBindBuffer(GL_ARRAY_BUFFER, m_binormalsBufferId);
glVertexAttribPointer(binormalsAttribLocation, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexesBufferId);
glDrawElements(GL_TRIANGLES, 3 * m_trianglesCount, GL_UNSIGNED_INT, 0);
glDisableVertexAttribArray(positionsAttribLocation);
glDisableVertexAttribArray(normalsAttribLocation);
glDisableVertexAttribArray(texCoordsAttribLocation);
glDisableVertexAttribArray(tangentsAttribLocation);
glDisableVertexAttribArray(binormalsAttribLocation);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
m_shader->Disable();