Генерация Mipmap на GPU вручную [OpenGL 2.x]
Я хочу использовать специальный настраиваемый алгоритм для создания мипмапов для некоторых визуализируемых текстур (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 level для прикрепления текстуры к FBO.
после многих лихорадочных царапин на голове, я все еще не могу заставить его работать. Таким образом, любой ответ с благодарностью.
[ПРИМЕЧАНИЕ: целевой платформой является OpenGL 2.x с расширением FBO]
2 ответа
Задача решена
Причиной неполного FBO является консистенция текстуры. При использовании glGenerateMipmapEXT/glGenerateMipmap вы должны убедиться, что базовый уровень вашей текстуры содержит VALID DATA; в противном случае этот вызов завершится без уведомления об ошибке.
Есть два возможных решения для вашей ссылки:
Используйте TexImage или TexSubImage, чтобы заполнить вашу визуализируемую текстуру перед glGenerateMipmap
Прикрепите визуализируемую текстуру к фиктивному FBO перед тем, как glGenerateMipmap
В любом случае работает (проверено на GF8,GF9) Не проверено на картах ATI.
Было бы здорово, если бы кто-нибудь смог проверить это на графических процессорах ATI.
PS. Пожалуйста, дайте мне знать, если у вас есть проблемы с использованием этих решений.
Ух, у меня такая же проблема на ATI Radeon 9800. Но я позвонил с gltexImage2D.
Рендеринг на первый уровень возможен, но не на другие. Может быть, я должен попробовать фиктивный метод FBO.