glTexCoordPointer(2, GL_FLOAT, sizeof *vbuf, &vbuf[0].uv);
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof *vbuf, &vbuf[0].col);
- glDrawElements(GL_TRIANGLES, cmd->ElemCount, GL_UNSIGNED_SHORT, ibuf);
+ if(glcaps.draw_range) {
+ int max_vidx = cmdlist->VtxBuffer.Size - 1;
+ glDrawRangeElements(GL_TRIANGLES, 0, max_vidx, cmd->ElemCount, GL_UNSIGNED_SHORT, ibuf);
+ } else {
+ glDrawElements(GL_TRIANGLES, cmd->ElemCount, GL_UNSIGNED_SHORT, ibuf);
+ }
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glewInit();
glcaps.debug = GLEW_ARB_debug_output;
+ glcaps.draw_range = GLEW_EXT_draw_range_elements;
#ifndef NDEBUG
if(glcaps.debug) {
info_log("Installing OpenGL debug callback\n");
- glDebugMessageCallback(gldebug_logger, 0);
+ glDebugMessageCallbackARB(gldebug_logger, 0);
}
#endif
struct GLCaps {
int debug; /* ARB_debug_output */
+ int draw_range; /* EXT_draw_range_elements */
};
extern struct GLCaps glcaps;