2012-03-19 5 views
1

Можно ли смешивать вызовы OpenGL ES 1 и OpenGL ES 2? Предположим, вы используете библиотеки, которые реализовали некоторые подпрограммы в OpenGL ES 1, а ваша существующая база кода - OpenGL ES 2. Что было бы хорошим способом сделать это, предположите, что они выполняют рендеринг в разных проходах рендеринга?Смешивание OpenGL ES 1 и OpenGL ES 2

ответ

4

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 и тому подобное.

Но все остальное (как используются массивы вершин, немедленный режим и т. Д.) Отличается и несовместимо.

4

Вы можете смешивать 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 сказали: «Не пересекайте потоки!».

Смежные вопросы