OpenGLES + Framebuffer工件

时间:2017-07-12 15:58:59

标签: android opengl-es framebuffer render-to-texture opengl-es-1.1

使用OpenGLES 1.1(目前没有选择)。目标操作系统是Android。

渲染到主帧缓冲区时,以及渲染到纹理时,我有一些不一致。

当我渲染到普通屏幕时,一切都很好。当我渲染到纹理时,无论alpha是半透明的,我的图形周围都会出现黑色边缘。

这是我的助手功能:

void RenderNormal()
{
    if (!gIsRenderToTexture)
    {
        glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
        glBlendEquationOES(GL_FUNC_ADD_OES);
    }
    else
    {
        glBlendFuncSeparateOES(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA,GL_ONE,GL_ONE_MINUS_SRC_ALPHA);
        glBlendEquationSeparateOES(GL_FUNC_ADD_OES,GL_FUNC_ADD_OES);
    }
}

void RenderAdditive()
{
    glBlendFunc(GL_SRC_ALPHA, GL_ONE);
}

void RenderMultiply()
{
    glBlendFunc(GL_ZERO, GL_SRC_COLOR);
}

所以,有些数据:

  • 在较新的系统上,这很好用(也适用于iOS,OSX和Linux)
  • 在Kindle Fire上,我仍然得到黑色边缘。
  • 在运行KitKat的较旧的Android设备上,我的加法/乘法函数没有关闭(我假设因为glBlendFunc和glBlendFuncSeparate之间的杂耍...我没有关闭某些东西,但是无论我试图修复什么它让事情变得更糟)

我正在寻找一种方法来对这三个函数进行平方,这样它们就可以使用渲染到纹理,并渲染到普通的ol'屏幕。你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

好的,一天的工作和研究,我终于弄明白,在目标设备上,OES不受支持。所以说,任何有这个问题的人...... Kindle Fire和很多旧版的平板电脑都不支持glBlendFuncSeparateOES或glBlendEquationOES,它们将无法正常失败。