透明纹理帧缓冲(OpenGL ES 2)

时间:2013-12-18 10:52:57

标签: android opengl-es-2.0 framebuffer

我是FBO的新手,这个问题让我疯了好几个小时。我有兴趣找到我要求的解决方案,而不是替代方案。这是在Android上。

我正在创建一个帧缓冲区,然后我在附加到它的纹理上绘制一个圆圈。然后我将该纹理绘制到默认的帧缓冲区,就像它是常规纹理一样。一切都很棒,并按预期展示......

...除了纹理完全不透明这一事实,不仅仅是我画圆圈的地方。我希望所有其他区域都是透明的,只有纹理的圆形部分才可见。更确切地说,我想用透明像素“填充”我的纹理,然后在我们的圆圈上绘制,然后将此纹理渲染到默认的帧缓冲区,并能够看到它背后的内容。 我该怎么做?甚至可能吗?或者可能有一种方法可以保持我的纹理不透明,并告诉OpenGL不要渲染它的黑色像素?

我找到了similar question,但是经过检查的答案没有帮助。它下方的评论建议使用glClear(我假设它引用glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)),但我在每glBindFramebuffer之后都这样做,但它仍然没有做任何事情。我还阅读了有关启用Alpha混合的内容,因此我在每glEnable(GL_BLEND)后执行了glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)glBindFramebuffer,并且我的纹理保持不透明。

另一个答案表明它依赖于平台,因此我正在寻找Android解决方案。

1 个答案:

答案 0 :(得分:0)

glClearColorglClear之前尝试glColorMask(TRUE, TRUE, TRUE, TRUE);