Экземпляр для рисования с 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.

(Похоже, @ Шамми не вернется... если они это сделают, вы можете изменить принятый ответ:)

Другие вопросы по тегам