如果我有这样的一系列绘制调用:
void glDrawElementsBaseVertex(GLenum mode = GL_TRIANGLES, GLsizei count = 1188, GLenum type = GL_UNSIGNED_INT, GLvoid* indices = 000354FC, GLint basevertex = 38051)
void glDrawElementsBaseVertex(GLenum mode = GL_TRIANGLES, GLsizei count = 786, GLenum type = GL_UNSIGNED_INT, GLvoid* indices = 0003678C, GLint basevertex = 38847)
void glDrawElementsBaseVertex(GLenum mode = GL_TRIANGLES, GLsizei count = 786, GLenum type = GL_UNSIGNED_INT, GLvoid* indices = 000373D4, GLint basevertex = 39373)
void glDrawElementsBaseVertex(GLenum mode = GL_TRIANGLES, GLsizei count = 786, GLenum type = GL_UNSIGNED_INT, GLvoid* indices = 0003801C, GLint basevertex = 39899)
是否可以将它们组合成一个呼叫? 基本顶点的增量等于前一个计数。唯一的问题是每个调用在不同位置开始的索引。在我的代码中,我创建了一个包含所有起始位置的向量,我记录了第一个调用的基本顶点并累积了计数。完成后我打电话给
glDrawElementsBaseVertex(GL_TRIANGLES,
numIdx,
GL_UNSIGNED_INT,
(idx[0]),
baseVc);
问题是该函数正在使用idx [0](包含第一个绘制调用的索引)并继续递增它。我想要它做的是使其idx包含从000354FC到000354FC + 1188(十六进制)的一些索引,并且在此之后,从0003678C到0003678C + 786(十六进制)的索引等等。然后会发生的是,我没有调用4次,而是将其调用一次,计数等于1188 + 786 + 786 + 786,基本顶点38051。 这可能吗?
答案 0 :(得分:0)
我使用了glMultiDraw命令:
vector<GLsizei> numIdx;
vector<GLint> baseVc;
vector<void*> idx;
unsigned int drawCount = 0;
...
drawCount++;
numIdx.push_back(m_Entries[i].NumIndices);
baseVc.push_back(m_Entries[i].BaseVertex);
idx.push_back((void*)(sizeof(unsigned int) * m_Entries[i].BaseIndex));
...
glMultiDrawElementsBaseVertex(GL_TRIANGLES,
&numIdx[0],
GL_UNSIGNED_INT,
&idx[0],
drawCount,
&baseVc[0]);
我曾经像这样画画
glDrawElementsBaseVertex(GL_TRIANGLES,
m_Entries[i].NumIndices,
GL_UNSIGNED_INT,
(void*)(sizeof(unsigned int) * m_Entries[i].BaseIndex),
m_Entries[i].BaseVertex);