My indirect draw command structure is declared like this:
typedef struct {
uint32_t count;
uint32_t instanceCount;
uint32_t firstIndex;
int32_t baseVertex;
uint32_t baseInstance;
} DrawElementsIndirectCommand;
This code works as expected:
for (const auto& command : vislist->drawcommands)
{
glDrawElementsInstancedBaseVertexBaseInstance(GL_TRIANGLES, command.count, GL_UNSIGNED_INT, (void*)(command.firstIndex * 4), command.instanceCount, command.baseVertex, command.baseInstance);
}
This code produces GL_ERROR_INVALID_OPERATION. The stride value is 20.
Assert(glGetInteger(GL_DRAW_INDIRECT_BUFFER_BINDING) == 0);
Assert(glGetInteger(GL_ELEMENT_ARRAY_BUFFER_BINDING) != 0);
int stride = sizeof(vislist->drawcommands[0]);
Assert(stride == 20);
glMultiDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_INT, vislist->drawcommands.data(), vislist->drawcommands.size(), stride);
The number of draw commands is one. The drawcommands value is declared like this:
std::vector<DrawElementsIndirectCommand> drawcommands;
Any ideas what is wrong?