如何摆脱glClear(GL_STENCIL_BUFFER_BIT)

时间:2012-02-16 15:59:24

标签: c++ windows opengl

我尝试将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 fps绘图,所以它确实会降低应用程序的速度。

我尝试删除此功能 - 这解决了慢速问题,但在初始化应用程序时会导致闪烁 - 大约10秒钟。比它消失并且工作正常。

有人可以建议为什么闪烁是我可以使用哪些其他功能而不是那么耗时?

1 个答案:

答案 0 :(得分:0)

如果您使用的是矩形剪辑区域,那么使用glScissor可能会更轻松,更快捷。 http://www.opengl.org/sdk/docs/man/xhtml/glScissor.xml

如上面的链接所述,也可以调用glEnable(GL_SCISSOR_TEST)来启用剪刀测试。

感谢@datenwolf