рендеринг openGL на текстуру в iPhone не выполняется, когда включен MSAA - PullRequest
2 голосов
/ 14 июня 2011

Мой код рендеринга в текстуру iPhone работает, только если я отключаю MSAA, в противном случае все, что я получаю, это черная текстура.В чем может быть причина проблемы?

Вот мой код:

glViewport(0,0, target->_Width, target->_Height);
glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT Or GL_STENCIL_BUFFER_BIT);

glBindTexture(GL_TEXTURE_2D, target->_Handle);          

// render stuff here

glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, target->_Width, target->_Height, 0);
glBindTexture(GL_TEXTURE_2D, 0);

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

Очевидно, что когда вы используете MSAA для своего основного кадрового буфера, вы должны использовать его для любых других FBO, которые вы также хотите рендерить.Поскольку GL_TEXTURE_2D_MULTISAMPLE не доступен на OpenGL ES 2, решение, которое я нашел довольно просто применить те же изменения, необходимые для перехода от обычного рендеринга на оказание MSAA, на ваш рендеринг в текстуру коду, а также.

Вам понадобятся 3 дополнительных буфера: буфер рендеринга цвета с несколькими выборками, буфер рендеринга глубины с несколькими выборками и новый FBO для их подключения.Свяжите новый FBO вместо текстуры FBO перед рендерингом.После рендеринга разрешите новый FBO MSAA в текстурный FBO так же, как в основном коде рендеринга, используя glResolveMultisampleFramebufferAPPLE().

. Обратите внимание, что по какой-то причине рендеринг текстур с включенным MSAA работает без эти модификации в симуляторе.Может быть, он использует GL_TEXTURE_2D_MULTISAMPLE автоматически?

0 голосов
/ 14 июня 2011

Причина вашей проблемы в том, что вы не можете визуализировать мультисэмплированную текстуру в OpenGL ES. Действительно, если я правильно помню, в OpenGL ES не существует мультисэмплированных текстур. Рабочий стол OpenGL позволяет вам это делать, но для этого он вводит совершенно новую текстурную цель (GL_TEXTURE_2D_MULTISAMPLE).

Буфер, который предлагает мультисэмплинг, не то же самое, что обычная текстура; Вот почему Desktop OpenGL использует специальную текстурную цель, которая имеет свой собственный тип сэмплера GLSL.

...