Можно ли смешивать вызовы OpenGL ES 1 и OpenGL ES 2? Предположим, вы используете библиотеки, которые реализовали некоторые подпрограммы в OpenGL ES 1, а ваша существующая база кода - OpenGL ES 2. Что было бы хорошим способом сделать это, предположите, что они выполняют рендеринг в разных проходах рендеринга?Смешивание OpenGL ES 1 и OpenGL ES 2
ответ
OpenGL ES 2.0 не обратно совместим с OpenGL ES 1.x. По большому счету, это означает, что 2.0 не соответствует с 1.x. По большей части.
В зависимости от языка и привязки к GL ES (который вы не указали) возможно, что вы можете перекомпилировать код, написанный для ES 1.x для ES 2.0. Или что инициализация ES 2.0 приведет к тому, что все функции GL будут перенаправлены туда. Это означает, что если ES 1.x и 2.0 поделились некоторой функцией, тогда код, вызывающий эту функцию, вызовет любую инициализацию версии GL ES. Опять же, вы не сказали, на каком языке и как вы его инициализировали.
В ES есть некоторые функции, которые работают более или менее одинаково с ES 1.1 и ES 2.0. Я бы сказал, что инициализация и настройка текстуры не сильно изменились (вы должны прочитать спецификации, чтобы увидеть, насколько сильно изменились). И фактические вызовы рисования массива (glDrawArrays
, glDrawElements
) более или менее одинаковы. И некоторые из основных компонентов, таких как glViewport
, glDepthRangef
и тому подобное.
Но все остальное (как используются массивы вершин, немедленный режим и т. Д.) Отличается и несовместимо.
Вы можете смешивать OpenGL ES 2.0 и OpenGL ES 1.1 в одном приложении, но вы не можете смешивать команды из двух разных API с единственной привязкой контекста. Как только вы выпустите ES 1.1 только команду GL для привязки к контексту ES 2.0 или наоборот, ваше приложение выйдет из строя, и не будет очевидно, почему он сбой, если вы не знаете об этом.
Когда создаются контексты, вы должны выбрать API, который вы используете, и придерживаться его для каждой команды GL, выпущенной, когда этот контекст связан.
Итак, что касается смешанного использования двух API в одном приложении, нет ничего, что мешает вам связывать контекст ES 1.1 в одном потоке и ничего не выдавать, но ES 1.1 вызывает этот поток в том же приложении, которое у вас есть контекст ES 2.0 в другом потоке с ничего, кроме команд ES 2.0, выпущенных в этом потоке.
Но, как джентльмены из Ghostbusters сказали: «Не пересекайте потоки!».
- 1. OpenGL - ES рисование и смешивание
- 2. OpenGL или OpenGL ES
- 3. Освещение и OpenGL ES
- 4. 2 Текстуры, 1 Shader - OpenGL ES 2.0
- 5. Портирование OpenGL ES 2 в OpenGL
- 6. OpenGL ES 2.x совместим с OpenGL
- 7. iPhone OpenGL ES неправильное альфа-смешивание
- 8. OpenGL ES 1.x Shaders
- 9. OPENGL ES 2 кубическая текстура
- 10. OpenGL ES 2 Сфера рендеринга
- 11. OpenGL ES (IPhone) альфа-смешивание выглядит странно
- 12. Обучение OpenGL ES 1.x
- 13. Смешивание альфа в opengl es 2.0
- 14. glPushMatrix и OpenGL ES
- 15. Opengl ES и texcoord
- 16. Разница в IOS OpenGL ES и Android OpenGL ES
- 17. OpenGL/OpenGL ES update texture
- 18. OpenGL to OpenGL-ES - glBegin();
- 19. OpenGL to OpenGL-ES - glRectf()
- 20. Android OpenGL ES 2 - Смешивание кажется всегда аддитивным
- 21. OpenGL ES 2 2D-слоистый чертеж
- 22. OpenGL ES glPushClientAttrib
- 23. Перевод и ротация OpenGL ES
- 24. Сравнение производительности OpenGL и OpenGL ES
- 25. OpenGL-ES TRIANGLE_STRIP ошибка
- 26. OpenGL ES 2: Униформа и атрибуты
- 27. OpenGL ES 2 - загрузка и отображение изображения
- 28. OpenGL ES 2 glGetActiveAtrib и non floats
- 29. Android OpenGL ES 2 и armeabi-v7a
- 30. OpenGL ES многоцветный буфер