Instanced drawing with OpenGL ES 2.0

Posted by Mårten Wikström on Stack Overflow See other posts from Stack Overflow or by Mårten Wikström
Published on 2014-08-19T15:58:54Z Indexed on 2014/08/19 16:20 UTC
Read the original article Hit count: 237

Filed under:
|
|
|
|

In short:

Is it possible to use the gl_InstanceID built-in variable in OpenGL ES 2.0? And, if so, how?


Some more info:

I want to draw multiple instances of an object using glDrawArraysInstanced and gl_InstanceID, and I want my application to run on multiple platforms, including iOS.

The specification clearly says that these features require ES 3.0. According to the iOS Device Compatibility Reference ES 3.0 is only available on a few devices (those based on the A7 GPU; so iPhone 5s, but not on iPhone 5 or earlier).

So my first assumption was that I needed to avoid using instanced drawing on older iOS devices.

However, further down in the compatibility reference document it says that the EXT_draw_instanced extension is supported for all SGX Series 5 processors (that includes iPhone 5 and 4s).

This makes me think that I could indeed use instanced drawing on older iOS devices too, by looking up and using the appropriate extension function (EXT or ARB) for glDrawArraysInstanced.

I'm currently just running some test code using SDL and GLEW on Windows so I haven't tested anything on iOS yet.

However, in my current setup I'm having trouble using the gl_InstanceID built-in variable in a vertex shader. I'm getting the following error message:

'gl_InstanceID' : variable is not available in current GLSL version

Enabling the "draw_instanced" extension in GLSL has no effect:

#extension GL_ARB_draw_instanced : enable
#extension GL_EXT_draw_instanced : enable

The error goes away when I specifically declare that I need ES 3.0 (GLSL 300 ES):

#version 300 es

Although that seem to work fine on my Windows desktop machine in an ES 2.0 context I doubt that this would work on an iPhone 5.

So, shall I abandon the idea of being able to use instanced drawing on older iOS devices?

© Stack Overflow or respective owner

Related posts about ios

Related posts about opengl