Могу ли я отправить openGL указатель на большее количество указателей и использовать его для glVertexPointer? - PullRequest
0 голосов
/ 30 октября 2009

Я использую тип файла PowerVR .pod для трехмерных сеток. Модуль хранит данные в виде чередующегося массива vertex / normal / UV / vertex_indices и т. Д. Для каждой сетки в файле.

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

Проблема с этим методом заключается в том, что я просто дублирую все данные, которые уже прочитаны из файла .pod. Я хотел бы создать массив всех указателей вершин, которые разделяют текстуру, и сказать openGL использовать этот массив для рисования всех вершин за один раз, без необходимости копировать все данные вершин в свой собственный массив.

Есть ли способ сделать это? Обычно вы используете glVertexPointer для настройки массива вершин, но это будет что-то вроде glVertexPointerPointer ...

Ответы [ 2 ]

3 голосов
/ 30 октября 2009

Нет, OpenGL не поддерживает двойные косвенные ссылки.

Что касается загрузки вашей сетки, у вас есть 2 варианта:

  • выделите свои большие буферы перед загрузкой мешей, загрузите меши внутри больших буферов
  • выделите ваши большие буферы после загрузки, скопируйте туда данные, удалите начальные данные меша.

Оба эти решения в итоге получают одну копию данных (и если вы будете следовать советам Джошперри - что вам следует - эти данные будут управляться OpenGL, а не вами)

3 голосов
/ 30 октября 2009

Вы можете посмотреть на использование объекта Vertex Buffer (VBO) в качестве «больших массивов», это поместит ваши данные меша в VRAM, и вы будете рендерить их с помощью индексов (указателей чтения) в созданные вами VBO..

Объекты буфера вершин

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