2014-01-14 7 views
4

Я хотел бы приобрести буфер трафарета, но, если это возможно, не пострадает из-за нехватки встроенного буфера глубины, так как я бы не использовал его. Большинство ресурсов, которые я нашел, показывают, что, хотя буфер трафарета является необязательным (исключая его, например, для получения большей точности буфера глубины), я не видел никакого кода, который запрашивает и успешно получает только 8-битный буфер трафарета. Самая распространенная конфигурация, которую я видел, - это 24-битные буферы глубины с 8-битным буфером трафарета.OpenGL: Приобретение только буфера трафарета и буфер глубины?

Можно ли запросить только буфер с трафаретом с цветовым буфером?

Если возможно, возможно, запрос будет предоставлен большинством реализаций OpenGL?

OpenGL версии я использую 2.0

редактировать:

API-интерфейс я использую для вызова OpenGL является SFML, который обычно не поддерживает выделение трафарет для него это объекты оболочки кО , хотя он позволяет использовать его для фреймбуфера на поверхности дисплея. Я редактировал функциональность в себе, хотя именно там я застрял.

glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8_EXT, width, height)); 

Эта линия определяет тип хранения, который я предполагаю. Тем не менее, GL_DEPTH24_STENCIL8_EXT - это единственное определение, которое я нашел, который определяет создание буфера трафарета. (Нет GL_STENCIL8 или что-либо подобное, по крайней мере)

+0

Вы должны уметь. Я знаю, что вы можете это сделать с FBO. – Xonar

+0

Да. Возможно, это зависит от того, что вы используете для окон, как вы его реализуете. Что вы используете для оконной обработки (glut/SDL/GLFW и т. Д.)? – Xonar

+0

Я использую SFML, который «обычно» не позволяет обертке FBO запрашивать буфер трафарета. Но я взломал это в себе. Я могу отредактировать это в вопросе –

ответ

1

Исследование GL_STENCIL_INDEX8, что было упомянуто в комментариях, я наткнулся на следующую строку в официальной OpenGL вики, http://www.opengl.org/wiki/Framebuffer_Object_Examples#Stencil

НИКОГДА ЗАПУСТИТЬ буфер трафарета. Все графические процессоры и все драйверы не поддерживают независимый буфер трафарета. Если вам нужен буфер трафарета, вам нужно сделать буфер глубиной = 24, Stencil = 8, также называемый D24S8.

Стресс-тестирование двух различных схем распределения, GL_STENCIL_INDEX8_EXT против GL_DEPTH24_STENCIL8_EXT, результаты были примерно равны, как с точки зрения использования памяти и производительности. Я подозреваю, что он заполнил буфером трафарета с 24 бит в любом случае. Так что ради мобильности, просто используем схему с глубиной и трафаретом.

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