Генерация Mipmap на GPU [OpenGL 2.x] - PullRequest
       34

Генерация Mipmap на GPU [OpenGL 2.x]

3 голосов
/ 15 февраля 2010

Я хочу использовать специальный настраиваемый алгоритм для создания мипмапов для некоторых визуализируемых текстур (R16F & RGBA16F).

Все необходимые текстурные карты предварительно включены с помощью glGenerateMipmapEXT ().

Самая большая проблема на данный момент - рендеринг в 1+ уровней mipmap. Точнее, это работает как шарм:

...
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, target, texType, texId, 0 );
checkFBOStatus();
...
render();

Но это дает мне GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT при проверке статуса fbo

...
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, target, texType, texId, 1 );
checkFBOStatus();
...
render();

Вся разница в коде - это параметр уровня lod для прикрепления текстуры к FBO.

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

[ПРИМЕЧАНИЕ: целевой платформой является OpenGL 2.x с расширением FBO]

Ответы [ 2 ]

2 голосов
/ 16 февраля 2010

Проблема решена


Причиной неполного FBO является консистенция текстуры. При использовании glGenerateMipmapEXT / glGenerateMipmap вы должны убедиться, что базовый уровень вашей текстуры содержит VALID DATA ; в противном случае этот вызов завершится без уведомления об ошибке.

Существует два возможных решения для вашей рекомендации:

  1. Используйте TexImage или TexSubImage для заполнить вашу визуализируемую текстуру перед glGenerateMipmap

  2. Прикрепить визуализируемую текстуру к фиктивная FBO перед glGenerateMipmap

В любом случае работает (проверено на GF8, GF9) Не тестируется на картах ATI.

Было бы замечательно, если бы кто-нибудь смог протестировать его на графических процессорах ATI.

PS. Пожалуйста, дайте мне знать, если у вас есть проблемы с использованием этих решений.

0 голосов
/ 05 марта 2010

Ух, у меня такая же проблема на ATI Radeon 9800. Но я сделал звонок с gltexImage2D.

Рендеринг на первый уровень возможен, но не на другие. Может быть, я должен попробовать фиктивный метод FBO.

...