Экземпляр для рисования с OpenGL ES 2.0 на iOS
Короче:
Может кто-нибудь подтвердить, можно ли использовать встроенную переменную gl_InstanceID
(или же gl_InstanceIDEXT
) в вершинном шейдере с использованием OpenGL ES 2.0 на iOS с GL_EXT_draw_instanced
включен?
Longer:
Я хочу нарисовать несколько экземпляров объекта, используя glDrawArraysInstanced и gl_InstanceID, и я хочу, чтобы мое приложение работало на нескольких платформах, включая iOS.
В спецификации четко сказано, что эти функции требуют ES 3.0. Согласно справочнику по совместимости устройств iOS ES 3.0 доступен только на нескольких устройствах (основанных на графическом процессоре A7; то есть на iPhone 5, но не на iPhone 5 или более ранних версиях).
Итак, мое первое предположение было то, что мне нужно было избегать использования рисования экземпляров на старых устройствах iOS.
Однако далее в справочном документе по совместимости говорится, что расширение EXT_draw_instanced поддерживается для всех процессоров SGX Series 5 (включая iPhone 5 и 4).
Это заставляет меня думать, что я действительно мог бы использовать рисование экземпляров и на старых устройствах iOS, посмотрев вверх и используя соответствующую функцию расширения (EXT или ARB) для glDrawArraysInstanced.
В настоящее время я просто запускаю некоторый тестовый код с использованием SDL и GLEW для Windows, поэтому я еще ничего не тестировал на iOS.
Однако в моей текущей установке у меня возникают проблемы с использованием встроенной переменной gl_InstanceID в вершинном шейдере. Я получаю следующее сообщение об ошибке:
'gl_InstanceID': переменная недоступна в текущей версии GLSL
Включение расширения "draw_instanced" в GLSL не имеет никакого эффекта:
#extension GL_ARB_draw_instanced : enable
#extension GL_EXT_draw_instanced : enable
Ошибка исчезает, когда я специально заявляю, что мне нужна ES 3.0 (GLSL 300 ES):
#version 300 es
Хотя это, кажется, работает нормально на моем настольном компьютере с Windows в контексте ES 2.0, я сомневаюсь, что это будет работать на iPhone 5.
Итак, я должен отказаться от идеи возможности использовать рисование экземпляров на старых устройствах iOS?
1 ответ
Экземплярное рисование доступно в основном API OpenGL ES 3.0 и в OpenGL ES 2.0 через расширения EXT_draw_instanced и EXT_instanced_arrays.
Вы можете видеть, что он доступен на всех их графических процессорах, PowerVR SGX, Apple A7, A8.
(Похоже, @ Шамми не вернется... если они это сделают, вы можете изменить принятый ответ:)