Рендеринг текстуры OpenGL FBO в GLXPixmap

Я пишу код, предназначенный для: 1. Рендеринга в текстуру OpenGL с использованием FBO. 2. Нарисуйте текстуру FBO в GLXPixmap, прикрепленном к X Pixmap. 3. Нарисуйте X Pixmap в окне на экране.

Шаг 3 отлично работает, а шаг 2 работает нормально, если я заменю текстуру FBO обычным рисунком OpenGL.

Но если я сделаю то, что выше, по крайней мере, с тем кодом, который у меня есть, это не сработает. Если я дам GLXPixmap цветной фон и сделаю 1-3, окно на экране станет белым, но больше ничего из того, что я нарисовал, не появится.

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


person Bob Murphy    schedule 31.12.2009    source источник


Ответы (1)


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

  • является ли FBO «фреймбуфером завершенным»? Проверьте с помощью glCheckFramebufferStatus( GL_FRAMEBUFFER_COMPLETE ) после того, как прикрепите к нему все свои текстуры и/или буферы рендеринга.
  • Есть ли у вас способ проверить FBO после рендеринга (например, с помощью glGetTexImage), чтобы определить, связана ли проблема с записью в FBO или чтением из него?
  • Вы, наверное, уже проверили, но стоит спросить: возвращает ли glGetError() какие-либо ошибки?

Если все проверится правильно, то опубликуйте немного кода настройки и рендеринга... хотя чем меньше запутанности, тем лучше, конечно =)

person Asher Dunn    schedule 31.12.2009
comment
Увы, я проверил статус fbo, и он завершен. И я проверяю glGetError с помощью макроса, который сообщает, если есть проблема, и никаких жалоб. Но я проверю glGetTexImage(), а также попытаюсь собрать простой пример — это само по себе может привести меня к решению. :-) - person Bob Murphy; 02.01.2010
comment
Еще одна простая вещь (не пытаясь вас оскорбить — я совершал эту ошибку несколько раз!) — убедиться, что вы используете GL_TEXTURE_2D и GL_TEXTURE_RECTANGLE последовательно. - person Asher Dunn; 03.01.2010