Каков самый простой способ рисовать текстуру с помощью OpenGL ES?

Я видел этот сеанс Google IO: http://code.google.com/intl/iw/events/io/2009/sessions/WritingRealTimeGamesAndroid.html
Он говорит, что функция draw_texture является самой быстрой, а VBO - быстрее. Но я не понимаю, как его использовать (метод draw_texture или способ VBO).

Любое предложение?

Ответы

Ответ 1

Исходный код теста метода спрайтов, упомянутого в видеоролике, можно найти здесь:
http://code.google.com/p/apps-for-android/source/browse/#svn/trunk/SpriteMethodTest

Вот пример из того, где используется VBO:
http://code.google.com/p/apps-for-android/source/browse/SpriteMethodTest/src/com/android/spritemethodtest/Grid.java#237

Вот пример из того, где используется расширение текстуры рисования:
http://code.google.com/p/apps-for-android/source/browse/SpriteMethodTest/src/com/android/spritemethodtest/GLSprite.java

Тем не менее, одна вещь, которую следует учитывать, заключается в том, что расширение текстуры рисования на самом деле не является самым быстрым для всех игр с использованием спрайтов. Во многих играх есть группы спрайтов, которые, например, имеют одно и то же состояние отображения. В этом случае гораздо быстрее поставить все спрайты с одним и тем же состоянием отображения в том же буфере и нарисовать их с помощью той же команды рисования. Команда рисования текстуры не позволяет этого. С помощью команды рисования текстуры вы должны называть ее один раз для спрайта.

Именно по этой причине часто используются текстуры атласа. Текстура атласа представляет собой единый связанный объект текстуры, в котором есть много разных изображений. Вы можете рисовать спрайты с разными изображениями таким образом, не связывая их с другим объектом текстуры. Все, что вы делаете, это использовать разные текстурные координаты в текстуре атласа. Если другое состояние рендеринга тоже самое, например требуемая функция смешивания, вы можете рисовать спрайты вместе для лучшей производительности.