Deprecate of make consistent draw calls!

What a mess!

Let have a look on all the possible draw commands:

  • DrawArrays
  • MultiDrawArrays
  • DrawElements
  • MultiDrawElements
  • DrawRangeElements
  • DrawArraysInstanced
  • DrawElementsInstanced

Does it mean that I don’t want to draw several instances in a limited range of elements?
Does it mean that I don’t want to draw multiples primitives and several instances?

Whether some features are deprecated or some features are missing but at list try to make it consistent…

I would have prefer some kind of GL_ARB_compatibility_30 which would have said “backward compatible until OpenGL 3.0” to that further compatibility extension could be GL_ARB_compatibility_31 to said that it is backward compatible with OpenGL 3.1 when for example OpenGL 3.2 would be released.

Furthermore, I could allow to remove the feature of GL_ARB_compatibility_30 but keeping the features of GL_ARB_compatibility_31 on time.

I don’t understand your point.
Nearly all of those calls have different functionality. Some of them some of us are quite keen to see added to our current functionality. re. The instanced commands.

I guess the Multi and Instanced could be merged / one removed.

Are you simply talking about some kind of cosmetic streamlining of commands so that all commands are capable of being instanced? So we should use 1 for the count if we want to just draw a single item?

Yes it’s just cosmetic and feature wise. Honestly I don’t use Multi functions but if any interest we should have one for instancing too.
DrawRangeElement could be really useful for efficiency, why no DrawRangeElementInstanced functions?

And maybe we only need two functions:
glMultiDrawArraysInstanced and glMultiDrawElementsRangeInstanced or at least the features of such functions.

I’m getting the impression that DrawRangeElements is not important but that’s what I’ve been using.
DrawRangeElements or DrawElements should be removed.

Actually it is!

DrawRangeElement allows to convert to 16 bits values of a 32 bits values buffer using an offset values.

Ok, this is quite a specific case know but it’s a feature of nVidia GPU … or use to be?

I thought DrawRangeElements was about specifying a strict range within an element array which meant that only a portion of the vertex array data would need to be uploaded.

I used it for a while thinking it was the only version of that command.
In the end I never really found an application where it was much use, so tend to stick with DrawElements. If I want a smaller subset of vertices / elements I would simply put them in separate buffers.

I guess if you have a lot of pre-processed model data it may be of use…

Though the much finer grained control that the new buffer API in 3.0 affords seems to more or less obviate the need for the DrawRangeElement API, at least in principle.

What we really need is a base index for subset offsetting in the draw calls at large.