【问题标题】:glStencilFunc(GL_NEVER, 0, 0) still renders?glStencilFunc(GL_NEVER, 0, 0) 仍然呈现?
【发布时间】:2012-11-08 20:55:34
【问题描述】:

我在使用模板缓冲区时遇到了问题,它似乎归结为根本不起作用。 给定以下代码:

  glEnable(GL_STENCIL_TEST);
  glClearStencil(0);
  glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glColor4f(1, 1, 1, 1);
  glStencilFuncSeparate(GL_FRONT_AND_BACK, GL_NEVER, 0, 0);
  glStencilOpSeparate(GL_FRONT_AND_BACK, GL_INCR, GL_INCR, GL_INCR);
  glBegin(GL_TRIANGLES);
  { draw something }
  glEnd();

三角形还在画!?我在这里错过了一些琐碎的事情吗?

注意: 我没有渲染到帧缓冲区,我使用的是 glStencil...Separate 只是为了确保它与正面\背面无关,我保留了一些对我来说似乎不相关的代码。

【问题讨论】:

  • "我没有渲染到帧缓冲区" 那你渲染到什么?
  • 我的意思是,我直接渲染到屏幕上,即没有帧缓冲对象被激活。
  • 你在哪里清除其他缓冲区?
  • @NicolBolas:它们已被清除(更新代码并重新测试)

标签: opengl stencil-buffer


【解决方案1】:

您没有模板缓冲区。并按规范(来自 4.3 核心,对开页 432):

如果没有模板缓冲区,就不能进行模板修改,就好像 无论对 StencilFunc 的任何调用如何,模板测试都始终通过。

【讨论】:

  • 你的意思是我必须渲染到带有模板缓冲区的帧缓冲区对象?
  • @ViktorSehr:不;您必须确保您使用的任何帧缓冲区都有模板缓冲区。如果您要渲染到 FBO,那么这意味着您需要使用打包的深度/模板缓冲区。如果要渲染到默认帧缓冲区,则需要使用提供模板缓冲区的像素格式。这是特定于平台的,所以除非你提到你是如何创建你的上下文的,否则我真的无能为力。另请注意,“帧缓冲区”是一个词,而不是两个。
  • 似乎我没有为默认-\screen frame(no space)buffer 提供模板缓冲区。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
相关资源
最近更新 更多