Пример #1
0
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));
	}
}
Пример #2
0
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;
}