const GLuint Mesh::getVAOId(int programId) { if (programId == -1) { LOGI("!! %p Prog Id -- %d ", this, programId); return 0; } if (vao_dirty_) { generateVAO(programId); } auto it = program_ids_.find(programId); if (it != program_ids_.end()) { GLVaoVboId id = it->second; return id.vaoID; } vao_dirty_ = true; generateVAO(programId); it = program_ids_.find(programId); if (it != program_ids_.end()) { GLVaoVboId id = it->second; return id.vaoID; } LOGI("!! %p Error in creating VAO for Prog Id -- %d", this, programId); return 0; }
SkyVAO::SkyVAO(const ProgramSP& program, const Sky& sky) : VAO(program) { generateVAO(); glBindBuffer(GL_ARRAY_BUFFER, sky.getVboVertices()); glVertexAttribPointer(program->getAttribLocation(a_vertex), 4, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(program->getAttribLocation(a_vertex)); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, sky.getVboIndices()); glEnableVertexAttribArray(0); unbind(); }
PostProcessorVAO::PostProcessorVAO(const ProgramSP& program, const PostProcessor& postProcessor) : VAO(program) { generateVAO(); glBindBuffer(GL_ARRAY_BUFFER, postProcessor.getVboVertices()); glVertexAttribPointer(program->getAttribLocation(a_vertex), 4, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(program->getAttribLocation(a_vertex)); glBindBuffer(GL_ARRAY_BUFFER, postProcessor.getVboTexCoords()); glVertexAttribPointer(program->getAttribLocation(a_texCoord), 2, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(program->getAttribLocation(a_texCoord)); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, postProcessor.getVboIndices()); glEnableVertexAttribArray(0); unbind(); }