Массив идентификаторов текстуры для OpenGL DrawElements / DrawArrays? - PullRequest
3 голосов
/ 02 июня 2011

Последовательность ES OpenGL, подобная этой, может использоваться для визуализации нескольких объектов за один проход:

glVertexPointer(...params..., vertex_Array );
glTexCoordPointer(...params..., texture_Coordinates_Array );
glBindTexture(...params..., one_single_texture_ID );
glDrawArrays( GL_TRIANGLES, number_Triangles );

Здесь массив вершин и массив координат текстуры могут ссылаться на неисчислимые примитивы, которые могут быть описаны за один шагв OpenGL.

Но все ли координаты текстуры всех этих примитивов должны ссылаться на единственную текстуру в команде glBindTexture?

Было бы неплохо передать массив идентификаторов текстуры:

glBindTexture(...params..., texture_identifier_array[] );

Здесь в массиве будет идентификатор текстуры для каждой примитивной фигуры, описанной в предыдущих вызовах.Таким образом, координаты текстуры каждой фигуры будут относиться к текстуре, определенной в "texture_identifier_array []".

Я вижу один вариант - поместить все интересующие текстуры в одну большую текстуру, на которую можно ссылаться как на одну сущность врозыгрыш звонков.На моей платформе это создает промежуточный шаг с большой битовой картой, которая может вызвать проблемы с памятью.

Было бы лучше, если бы я мог передавать массив идентификаторов текстуры в вызовы рисования OpenGL ES.Можно ли это сделать?

1 Ответ

1 голос
/ 02 июня 2011

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

Если вы хотите визуализировать несколько версий одной и той же геометрии (в чем я сомневаюсь), вы ищете рендеринг экземпляров, который также не поддерживаетсяна устройствах ES, я думаю.

Таким образом, в настоящий момент можно выбрать атлас текстур (несколько текстур в одной) или просто вызвать glDrawArrays несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...