OpenGL ES 2.0-GL_POINTS和模板缓冲区

阿门代尔

我试图通过应用模板缓冲区在GL_POINTS中使用OpenGL ES 2.0绘制纹理。模板缓冲区应来自纹理。我将结果渲染到另一个纹理,然后将纹理呈现到屏幕。这是我渲染为纹理的代码:

//Initialize buffers, initialize texture, bind frameBuffer
.....
glClearStencil(0);
glClear (GL_STENCIL_BUFFER_BIT);

glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE );
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
glBindTexture(GL_TEXTURE_2D, stencil);

glUseProgram(program[PROGRAM_POINT].id);
glDrawArrays(GL_POINTS, 0, (int)vertexCount);

glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glStencilFunc(GL_NEVER, 0, 1);
glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);

glBindTexture(GL_TEXTURE_2D, texture);
glUseProgram(program[PROGRAM_POINT].id);
glDrawArrays(GL_POINTS, 0, (int)vertexCount);
glDisable(GL_STENCIL_TEST);
....
//Render texture to screen

我得到的结果只是在没有任何模板遮罩的情况下绘制了我的纹理。我对此问题有几个疑问:

  1. 可以将模板缓冲区与GL_POINTS一起使用吗?
  2. 渲染到纹理时可以使用模板缓冲区吗?
  3. 模具纹理是否必须具有任何特殊属性(纯色,内部格式等)?
  4. 我的代码有明显的错误吗?

这是我要寻找的结果: 在此处输入图片说明

更新:

如所选答案所指出的,我的问题主要是我没有将模板附加到FBO的模板附件上:

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
                      GL_RENDERBUFFER, stencilBufferId);

我不知道渲染到纹理时是否需要它。其次,我没有使用适当的模板测试。

glStencilFunc(GL_EQUAL, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);

做好了

雷托·科拉迪(Reto Koradi)

按顺序解决您的问题:

  1. 可以将模板缓冲区与GL_POINTS一起使用吗?

是的。模板测试适用于所有片段,无论呈示的原始类型如何。在不应用模板测试的情况下写入帧缓冲区的唯一情况是使用glClear()

  1. 渲染到纹理时可以使用模板缓冲区吗?

是的。但是,当使用FBO渲染纹理时,将使用默认帧缓冲区的模具缓冲区您必须创建一个模板渲染缓冲区,并将其附加到FBO的模板附件:

GLuint stencilBufferId = 0;
glGenRenderbuffers(1, &stencilBufferId);
glBindRenderbuffer(GL_RENDERBUFFER, stencilBufferId);
glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
                          GL_RENDERBUFFER, stencilBufferId);
  1. 模具纹理是否必须具有任何特殊属性(纯色,内部格式等)?

OpenGL ES 2.0没有模板纹理。您必须使用renderbuffer作为模板附件,如上面的代码片段所示。GL_STENCIL_INDEX8是渲染缓冲区支持的唯一可用作模板附件的格式。ES 3.0支持深度/模板纹理。

  1. 我的代码有明显的错误吗?

可能是。看起来有些奇怪的一件事是,您从未真正在所显示的代码中应用模板测试。确实启用模板测试时,仅将GL_ALWAYSGL_NEVER用于模板功能。顾名思义,这些功能始终或永远不会通过模板测试。因此,不要让片段通过/失败取决于模板值。在第二次抽奖之前,我会期望这样的事情:

glStencilFunc(GL_EQUAL, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);

这只会渲染当前模板缓冲区值为1的片段,该片段与您在上一个绘制调用中渲染的片段相对应。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Open GL ES z缓冲区不适用于GL_POINTS(?)

来自分类Dev

Android OpenGL ES2。0VBO无法渲染

来自分类Dev

在OpenGL ES中使用深度和模具渲染缓冲区附件作为帧缓冲区

来自分类Dev

OpenGL ES2.0将8位图像加载到模板缓冲区中

来自分类Dev

OpenGL ES2.0将8位图像加载到模板缓冲区中

来自分类Dev

OpenGL ES 2.0将纹理附加到模板缓冲区

来自分类Dev

如何将遮罩滤镜应用于OpenGL ES 2中的当前帧缓冲区

来自分类Dev

使用顶点缓冲区对象的最低OpenGL ES版本

来自分类Dev

OpenGL ES 3.0上的sRGB帧缓冲区

来自分类Dev

OpenGL ES上深度缓冲区的精度

来自分类Dev

增量更新OpenGL ES的屏幕缓冲区

来自分类Dev

OpenGL ES 2.0是否可以同时绘制深度和“颜色”缓冲区(不使用MRT)?

来自分类Dev

如何使用OpenGL ES的顶点和索引缓冲区填充结构权

来自分类Dev

OpenGL ES2.0 glReadPixels()从渲染缓冲区通过帧缓冲区读取数据

来自分类Dev

OpenGL GL_COLOR_BUFFER_BIT属性位是否表示深度和模板缓冲区相关的状态?

来自分类Dev

2D openGL引擎简单的光源和帧缓冲区(C ++)

来自分类Dev

OpenGL 16位模板缓冲区?

来自分类Dev

OpenGL:glLoadMatrix和深度缓冲区

来自分类Dev

OpenGL缓冲区,gLFlush和glutSwapBuffers()

来自分类Dev

关于OpenGL ES 2的问题

来自分类Dev

是否可以在不使用GL_OES_depth_texture的情况下对OpenGL ES深度缓冲区进行下采样?

来自分类Dev

如何在OpenGL ES 2.0中模拟累积缓冲区(跟踪粒子效果)

来自分类Dev

在适用于iOS的OpenGl ES 2.0中写入单通道像素缓冲区

来自分类Dev

glClear上的“无效帧缓冲区操作”-在OpenGL ES3中使用sRGB

来自分类Dev

如何在OpenGL ES 1.1中处理索引缓冲区

来自分类Dev

OPENGL ES 2.0。安卓。深度缓冲区的奇怪行为

来自分类Dev

OpenGL ES 2.0在帧缓冲区创建上的无效操作

来自分类Dev

OpenGL缓冲区问题

来自分类Dev

OpenGL模板缓冲区,它们的支持程度如何?

Related 相关文章

  1. 1

    Android Open GL ES z缓冲区不适用于GL_POINTS(?)

  2. 2

    Android OpenGL ES2。0VBO无法渲染

  3. 3

    在OpenGL ES中使用深度和模具渲染缓冲区附件作为帧缓冲区

  4. 4

    OpenGL ES2.0将8位图像加载到模板缓冲区中

  5. 5

    OpenGL ES2.0将8位图像加载到模板缓冲区中

  6. 6

    OpenGL ES 2.0将纹理附加到模板缓冲区

  7. 7

    如何将遮罩滤镜应用于OpenGL ES 2中的当前帧缓冲区

  8. 8

    使用顶点缓冲区对象的最低OpenGL ES版本

  9. 9

    OpenGL ES 3.0上的sRGB帧缓冲区

  10. 10

    OpenGL ES上深度缓冲区的精度

  11. 11

    增量更新OpenGL ES的屏幕缓冲区

  12. 12

    OpenGL ES 2.0是否可以同时绘制深度和“颜色”缓冲区(不使用MRT)?

  13. 13

    如何使用OpenGL ES的顶点和索引缓冲区填充结构权

  14. 14

    OpenGL ES2.0 glReadPixels()从渲染缓冲区通过帧缓冲区读取数据

  15. 15

    OpenGL GL_COLOR_BUFFER_BIT属性位是否表示深度和模板缓冲区相关的状态?

  16. 16

    2D openGL引擎简单的光源和帧缓冲区(C ++)

  17. 17

    OpenGL 16位模板缓冲区?

  18. 18

    OpenGL:glLoadMatrix和深度缓冲区

  19. 19

    OpenGL缓冲区,gLFlush和glutSwapBuffers()

  20. 20

    关于OpenGL ES 2的问题

  21. 21

    是否可以在不使用GL_OES_depth_texture的情况下对OpenGL ES深度缓冲区进行下采样?

  22. 22

    如何在OpenGL ES 2.0中模拟累积缓冲区(跟踪粒子效果)

  23. 23

    在适用于iOS的OpenGl ES 2.0中写入单通道像素缓冲区

  24. 24

    glClear上的“无效帧缓冲区操作”-在OpenGL ES3中使用sRGB

  25. 25

    如何在OpenGL ES 1.1中处理索引缓冲区

  26. 26

    OPENGL ES 2.0。安卓。深度缓冲区的奇怪行为

  27. 27

    OpenGL ES 2.0在帧缓冲区创建上的无效操作

  28. 28

    OpenGL缓冲区问题

  29. 29

    OpenGL模板缓冲区,它们的支持程度如何?

热门标签

归档