Неинициализированная / незарезервированная память GPU в текстурах, OpenGL - PullRequest
0 голосов
/ 29 октября 2011

(На самом деле это кросспост из gamedev , но я подумал, что вам, ребята и девушки, тоже могут помочь!)

Редактировать: я уточнил, что я имею в виду под наложением. После некоторого сна я обнаружил, что мой вызов glGenerateMipmaps бесполезен, так как я использую нуль в качестве указателя на glTexImage2D.

В OpenGL 3.3, Ubuntu 11.04, драйверах nVidia 280.13, GeForce GT240.

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

При рендеринге (по одному) G-буферов (текстур FBO) в полном окне они отображаются правильно. При рендеринге с этими оверлеями я получаю мусор (казалось бы, случайная память GPU как статические помехи, но разные между прогонами, иногда четкое изображение).

Если я создаю другую текстуру, скажем, из файла, она отображается без мусора в оверлеях, поэтому код должен быть в порядке. Кто-нибудь может объяснить почему? Я использовал glGenerateMipmap для текстур в G-буфере.

Я знаю, что это может быть недостаточно информации, но начинается с этого. Пожалуйста, спросите о любой соответствующей информации. Может ли проблема быть связана с FBO-рендерингом и mipmapping? Конечно, мой код хочет показать незарезервированную / неинициализированную память, но я не знаю почему. The four textures below have trash data in them.


Полноэкранное зеленое изображение - это мой текущий результат на этапе освещения в разрешении (256 * 256) для экономии памяти графического процессора из-за большого G-буфера. Кроме того, в шейдере материала (генерирующем G-буфер) я использую «out vec4 фрагмент [3]», а текстуры имеют разные внутренние форматы. Может ли это быть проблемой?

PS. Огни в (-30,0,0) и (30,0,0), но, кажется, "ближе". Может ли это быть проблемой точности? Я использую GL_RGBA16F для нормалей, GL_RGBA32F для позиций, GL_DEPTH_COMPONENT24 для глубины и GL_RGBA для альбедо (Да, это огромная трата, но я оптимизирую позже).

1 Ответ

1 голос
/ 29 октября 2011

ОК, я нашел проблему. Я сгенерировал мип-карты, прежде чем какие-либо значимые данные были в памяти. Отключение mipmapping для соответствующих текстур решило проблему. В любом случае спасибо за ваше внимание! enter image description here

...