OpenGL混合功能复制RBG /无视Alpha?

时间:2017-09-18 18:32:33

标签: opengl opengl-es

可能有一种更简单的方法可以做到这一点,我可以用我想象的着色器来做,但我觉得设置混合功能更简单。

Shader可能是gl_FragColor = vec4(texture.rgb, 0);

出于某种原因,我需要让一个刚刚清除的FBO填充透明(0)纹理。这样,FBO中的像素在视觉上是透明的,但包含纹理的RGB值。

很难解释,但它基本上是一个glClear()但是有一个纹理而不是一个纯色。是否有一个组合混合src / dst函数可以完成这个?

基本上,FBO事先的样子并不重要。然后我想为它渲染一个纹理,但由于我用alpha 0渲染它,它不会覆盖现有的FBO像素。

1 个答案:

答案 0 :(得分:3)

如果你真的想通过混合来做到这一点,你可以通过最初在GL_EXT_blend_func_separate中引入的单独混合因子(在2.0版中提升为OpenGL核心功能)来实现这一点:

glEnable(GL_BLEND);
glBlendFuncSeparate(GL_ONE, GL_ZERO, GL_ZERO, GL_ZERO);
glBlendEquation(GL_ADD); // is the default anyway