void GLIndexArray::compile() { m_IsCompiled = true; if (0 != m_InternalIndexArray && m_InternalIndexArray->size() != 0) { std::shared_ptr<std::vector<unsigned int>> pArray; if (m_UseAdjacency) { buildAdjacencyList(); pArray = m_AdjIndexArray; } else pArray = m_InternalIndexArray; IBuffer *b = NULL; if (m_GLBuffer == 0) { b = RESOURCEMANAGER->createBuffer(m_Name); b->setStructure(std::vector < Enums::DataType > {Enums::UINT}); m_GLBuffer = b->getPropi(IBuffer::ID); } else { b = RESOURCEMANAGER->getBuffer(m_Name); } b->setData(pArray->size() * sizeof(unsigned int), &(*pArray)[0]); //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_GLBuffer); //glBufferData(GL_ELEMENT_ARRAY_BUFFER, pArray->size() * sizeof(unsigned int), &(*pArray)[0], GL_STATIC_DRAW); //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); //b->setPropui(IBuffer::SIZE, pArray->size() * sizeof(unsigned int)); } }
bool GLVertexArray::compile (void) { if (m_IsCompiled) return false; m_IsCompiled = true; for (int i = 0; i < VertexData::MaxAttribs; i++){ if (0 != m_InternalArrays[i] && m_InternalArrays[i]->size() != 0){ std::shared_ptr<std::vector<VertexData::Attr>> &pArray = m_InternalArrays[i]; IBuffer *b = NULL; std::string s = m_Name + ":" + VertexData::Syntax[i]; if (m_GLBuffers[i] == 0) { b = RESOURCEMANAGER->createBuffer(s); b->setStructure(std::vector < Enums::DataType > {Enums::FLOAT, Enums::FLOAT, Enums::FLOAT, Enums::FLOAT}); m_GLBuffers[i] = b->getPropi(IBuffer::ID); } else { b = RESOURCEMANAGER->getBuffer(s); } b->setData(pArray->size() * 4 * sizeof(float), (float*)&(*pArray)[0]); } } return true; }