2012-06-18 2 views
4

Неужели кто-нибудь сделал это успешно? Кажется, какой индексный формат я использую в буфере рендеринга трафарета glCheckFramebufferStatus(...) возвращает GL_FRAMEBUFFER_UNSUPPORTED. Я успешно привязал буфер глубины \ color render, но всякий раз, когда я пытаюсь сделать то же самое с моим буфером трафарета, я получаю (как я уже говорил) GL_FRAMEBUFFER_UNSUPPORTED.Связывание буфера визуализации трафарета с буфером кадров в opengl

Вот фрагменты моего кода:

// Create frame buffer 
GLuint fb; 
glGenFramebuffers(1, &fb); 

// Create stencil render buffer (note that I create depth buffer the exact same way, and It works. 
GLuint sb; 
glGenRenderbuffers(1, &sb); 
glBindRenderbuffer(GL_RENDERBUFFER, sb); 
glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, w, h); 

// Attach color 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, cb, 0); 

// Attach stencil buffer 
glBindFramebuffer(GL_FRAMEBUFFER, fb); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rb); 
// And here I get an GL_FRAMEBUFFER_UNSUPPORTED when doing glCheckFramebufferStatus() 

Любые идеи?

Примечания: Цвет прикрепленное это текстура, а не renderbuffer

ответ

6

Никогда не используйте свободностоящую буфер трафарета. Если вам нужен трафарет, всегда используйте depth+stencil image format. Обратите внимание, что форматы индекса трафарета не являются required image formats.

Даже если вы не используете буфер глубины здесь, вы все равно должны использовать GL_DEPTH24_STENCIL8, который вы должны прикрепить к GL_DEPTH_STENCIL_ATTACHMENT​.

+0

+1 Хм я думаю, что я пробовал, но не получилось, однако он работает на моей карточке ATI у себя дома, если я заработаю на моей nvidia на работе, я дам ваш ответ зеленый :) –

+0

@ViktorSehr: Возможно, это не трафарет; какой формат изображения вы используете для своей текстуры? –

+0

Пробовал все обычные форматы (GL_RGBA8, ..16, ..32F) –

0

Вы можете использовать трафарет только на последних аппаратных NVIDIA/драйверов

glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_TEXTURE_2D, fboStencilTexture, 0); 

Еще нет поддержки как для отдельной глубины и не трафарет

Смежные вопросы