Как избавиться от glClear (GL_STENCIL_BUFFER_BIT) - PullRequest
0 голосов
/ 16 февраля 2012

Я пытаюсь ограничить рисование OpenGL частью окна.Для этого я пытаюсь использовать опцию GL_STENCIL_TEST.Вот мой код:

// Enable stencil and clear the stencil buffer
glClear(GL_STENCIL_BUFFER_BIT);
glEnable(GL_STENCIL_TEST);

// Enable func and Op so drawing will effect the stencil buffer
glStencilFunc(GL_NEVER, 0x0, 0x0);
glStencilOp(GL_INCR, GL_INCR, GL_INCR);

// Draw a rect to the stencil
DrawSolidRect(rectDrawArea);

// Enable func and Op so drawing will not effect the stencil buffer
// but will only effect places where the stencil was drawn to in the previous step.
glStencilFunc(GL_EQUAL, 0x1, 0x1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);

Проблема в том, что функция glClear (GL_STENCIL_BUFFER_BIT) очень трудоемкая, и, поскольку я рисую со скоростью 25 кадров в секунду, она действительно замедляет работу приложения.Я попытался удалить эту функцию - это решает проблему медлительности, но вызывает мигание при инициализации приложения - в течение примерно 10 секунд.Чем он исчезает и работает нормально.

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

1 Ответ

0 голосов
/ 16 февраля 2012

Если вы используете прямоугольные области обрезки, возможно, гораздо проще и быстрее использовать glScissor.http://www.opengl.org/sdk/docs/man/xhtml/glScissor.xml

Как отмечено в ссылке выше, также вызовите glEnable (GL_SCISSOR_TEST), чтобы включить ножничное тестирование.

Благодаря @ datenwolf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...