Я пытаюсь динамически генерировать кубические карты в OpenGL, используя систему многопроходной визуализации. Метод, который я использую, успешно визуализирует сцену в объект буфера кадров (протестировано с glReadPixels). Буфер кадра прикрепляется к текстуре, целью которой является GL_TEXTURE_CUBE_MAP_ARB. Я проверил, что содержимое буфера кадра do попадает в текстуру, запросив связанную текстуру с помощью glGetTexImage и записав содержимое на диск.
Однако, когда я связываю карту куба, чтобы отобразить ее на объекте, текстура не отображается в сетке.
Процесс выглядит следующим образом:
1) Отсоединить все текстуры от GL_TEXTURE_CUBE_MAP_ARB
2) Привязать объект буфера кадра.
3) Присоединить текстуру к целевому GL_COLOR_ATTACHMENT0_EXT буфера кадра. Я начинаю с положительной-x стороны куба (GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB). Другие следуют в последующих проходах.
4) Присоединить буфер рендеринга глубины к целевому GL_DEPTH_ATTACHMENT_EXT буфера кадров.
5) Прямой рендеринг в GL_COLOR_ATTACHMENT0_EXT с glDrawBuffer.
6) Рендеринг сцены по соответствующей оси.
7) С еще ограниченным буфером кадров отсоедините текстуру с помощью glFramebufferTexture2DEXT.
8) Отсоедините буфер кадров и перенаправьте рендеринг в GL_BACK с помощью glDrawBuffer.
9) Повторите шаги 1-8 для всех сторон карты куба.
10) Свяжите окончательную текстуру карты куба и визуализируйте финальную сцену. Шейдер GLSL используется для вычисления координат текстуры.
Этот метод основан на доступных заметках здесь .
Шаги отладки, предпринятые до настоящего времени:
I) Загрузил статическую карту куба с диска для тестирования шейдера. Работает как положено.
II) Запрашивал содержимое буфера кадра, используя glReadPixels во время первых 6 проходов. Сцена появилась как надо.
III) Копирование содержимого карты куба с использованием glGetTexImage после завершения рендеринга. Написал содержимое на диск в виде файла образа. Различные стороны куба выглядели так, как должны.
Я могу только сделать вывод, что буфер / текстура кадра корректно отображаются. По какой-то причине я не могу заставить полученную текстуру появиться на финальной сетке. Текстура определенно привязана до последнего прохода рендеринга, и GL_TEXTURE_CUBE_MAP_ARB включен.
Как отмечено в процедуре, описанной выше, текстура не связана перед рендерингом кадрового буфера, чтобы избежать конфликтов чтения / записи. Точно так же текстура отсоединяется от буфера кадра после каждого прохода по той же причине.
Сначала я был обеспокоен тем, что мое повторное использование GL_COLOR_ATTACHMENT0_EXT вызвало проблему. Теперь это кажется маловероятным, учитывая шаг III моего процесса отладки. Более того, я нашел ссылки на интернет-форумах на людей, которые делают то же самое без проблем.
Это происходит на NVIDIA 9400M (Mac OS X). OpenGL Extension Viewer сообщает, что у меня есть все необходимые расширения для выполнения этой операции.
Любое понимание того, что может быть причиной этого, приветствуется.