我在使用mac上的OpenGL中的模板测试进行绘图时遇到了问题。当我第一次画场景时,模板工作正常。我在中间绘制了一个半透明的黑色矩形,写入启用的模板缓冲区,然后更大的蓝色矩形写入模板缓冲区。我得到正确的结果,当窗口首先弹出,它看起来像这样:在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的深度,所以可以不清除深度缓冲区(我测试过了)。