#include "Caisse.h" // Permet d'�viter la r�-�criture du namespace glm:: using namespace glm; // Constructeur et Destructeur Caisse::Caisse(float taille, std::string const texture) : Cube(taille), m_texture(texture), m_tailleCoordTextureBytes(72 * sizeof(float)) { // Coordonn�es de texture temporaires float coordTextureTmp[] = {0, 0, 1, 0, 1, 1, // Face 1 0, 0, 0, 1, 1, 1, // Face 1 0, 0, 1, 0, 1, 1, // Face 2 0, 0, 0, 1, 1, 1, // Face 2 0, 0, 1, 0, 1, 1, // Face 3 0, 0, 0, 1, 1, 1, // Face 3 0, 0, 1, 0, 1, 1, // Face 4 0, 0, 0, 1, 1, 1, // Face 4 0, 0, 1, 0, 1, 1, // Face 5 0, 0, 0, 1, 1, 1, // Face 5 0, 0, 1, 0, 1, 1, // Face 6 0, 0, 0, 1, 1, 1}; // Face 6 // Copie des valeurs dans le tableau final for(int i (0); i < 72; i++) m_coordTexture[i] = coordTextureTmp[i]; // Chargement automatique charger(); } Caisse::~Caisse() { } // M�thodes void Caisse::charger() { // Destruction d'un �ventuel ancien VBO if(glIsBuffer(m_vboID) == GL_TRUE) glDeleteBuffers(1, &m_vboID); // G�n�ration de l'ID glGenBuffers(1, &m_vboID); // Verrouillage du VBO glBindBuffer(GL_ARRAY_BUFFER, m_vboID); // Allocation de la m�moire vid�o glBufferData(GL_ARRAY_BUFFER, m_tailleVerticesBytes + m_tailleCoordTextureBytes, 0, GL_STATIC_DRAW); // Transfert des donn�es glBufferSubData(GL_ARRAY_BUFFER, 0, m_tailleVerticesBytes, m_vertices); glBufferSubData(GL_ARRAY_BUFFER, m_tailleVerticesBytes, m_tailleCoordTextureBytes, m_coordTexture); // D�verrouillage de l'objet glBindBuffer(GL_ARRAY_BUFFER, 0); // Destruction d'un �ventuel ancien VAO if(glIsVertexArray(m_vaoID) == GL_TRUE) glDeleteVertexArrays(1, &m_vaoID); // G�n�ration de l'ID du VAO glGenVertexArrays(1, &m_vaoID); // Verrouillage du VAO glBindVertexArray(m_vaoID); // Verrouillage du VBO glBindBuffer(GL_ARRAY_BUFFER, m_vboID); // Acc�s aux vertices dans la m�moire vid�o glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); glEnableVertexAttribArray(0); // Acc�s aux coordonn�es de texture dans la m�moire vid�o glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(m_tailleVerticesBytes)); glEnableVertexAttribArray(2); // D�verrouillage du VBO glBindBuffer(GL_ARRAY_BUFFER, 0); // D�verrouillage du VAO glBindVertexArray(0); } void Caisse::afficher(glm::mat4 pmv, Shader const &shad) { // Verrouillage du VAO glBindVertexArray(m_vaoID); // Envoi des matrices glUniformMatrix4fv(glGetUniformLocation(shad.getProgramID(), "pmv"), 1, GL_FALSE, glm::value_ptr(pmv)); // Verrouillage de la texture glBindTexture(GL_TEXTURE_2D, m_texture.getID()); // Rendu glDrawArrays(GL_TRIANGLES, 0, 36); // D�verrouillage de la texture glBindTexture(GL_TEXTURE_2D, 0); // D�verrouillage du VAO glBindVertexArray(0); }