【发布时间】:2016-02-06 12:58:53
【问题描述】:
我在 mac 上使用 OpenGL 中的模板测试进行绘图时遇到问题。当我第一次绘制场景时,模板工作正常。我在中间绘制了一个半透明的黑色矩形,启用了写入模板缓冲区,然后绘制了一个更大的蓝色矩形,禁用了写入模板缓冲区。当窗口第一次弹出时,我得到了正确的结果,如下所示:
但是,当我调整窗口大小并再次调用渲染函数时,我得到的结果如下所示:
有时奇怪的白色空间会跟随中间的矩形,有时白色会在看似随机的排列之间捕捉,但当你回到那个窗口大小时会保持这些排列。我在网上找不到解决办法。这是我的渲染函数,在调整窗口大小时调用它:
glClearColor(0, 0, 0, 1);
glClearStencil(0x00);
glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// Replace data in the stencil buffer with 1s if it passes the test
// which should be GL_ALWAYS
glStencilFunc(GL_ALWAYS, 1, 0xFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
// Allow data to be written to the stencil buffer.
glStencilMask(0xFF);
p->fillSquare(1, 1, 1, 0.3, -0.25, 0.25, 0.25, 0.25, -0.25, -0.25, 0.25, -0.25); // Write a semi transparent black rectangle
glStencilMask(0x00); // Disable writing to the stencil buffer.
glStencilFunc(GL_NOTEQUAL, 1, 0xFF); // Only draw if stencil value is 1.
// Draw blue rectangle
p->fillSquare(0.60, 0.60, 0.80, 1, -0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5);
glfwSwapBuffers(w);
如果您想知道,p->fillRect() 为矩形的 RGBA 颜色采用四个浮点数,然后是每个顶点的 x 和 y 坐标。
似乎在清除模板时可能存在某种问题,但我真的不能确定。我确实在我的 OpenGL 初始化函数中打开了模板测试。 如果您需要了解有关我的代码或系统其他方面的任何其他信息,请随时发表评论。
注意:我没有使用 OpenGL 的深度,所以不清除深度缓冲区也没关系(我已经测试过了)。
【问题讨论】:
标签: c++ opengl glfw stencil-buffer