绘制到FrameBuffer会导致Y反转

Ale*_*nus 6 android framebuffer opengl-es-2.0

我想使用帧缓冲区使用着色器程序创建图像。这很好,除了Y是倒置的。似乎左下角变为左上角。为什么会这样?这正常吗?这会在所有android设备上发生吗?

在我的着色器程序内部,gl_FragCoordY值将反转,具体取决于我是直接绘制到帧缓冲区还是直接绘制到屏幕。

Ale*_*nus 0

我发现绘制到 FrameBuffer 不会反转 Y,但将位图加载到 opengl 会反转。
这些是我的纹理顶点:

public final static float textureVertices[] = {
        0.0f, 1.0f, // top left
        0.0f, 0.0f, // bot left
        1.0f, 1.0f, // top right
        1.0f, 0.0f, // bot right
};
Run Code Online (Sandbox Code Playgroud)

但那些已经被反转以解释反转的位图,我认为这是正常的,但对于 opengl 来说正常的是:

public final static float textureVertices[] = {
        0.0f, 0.0f, // bot left
        0.0f, 1.0f, // top left
        1.0f, 0.0f, // bot right
        1.0f, 1.0f, // top right
};
Run Code Online (Sandbox Code Playgroud)

因此,如果我从位图创建纹理,如下所示:

public static int loadGLTexture(Bitmap bmp) { // also destroys bitmap
    int id[] = new int[1];
    id[0] = -1;

    GLES20.glGenTextures(1, id, 0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, id[0]);

    // Set Filters
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);

    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0); // upload the texture to OpenGL

    bmp.recycle();
    return id[0];
}
Run Code Online (Sandbox Code Playgroud)

纹理将具有反转的 Y,但如果我使用 opengl 创建一个空纹理并使用 FrameBuffer 在其上绘制,则 Y 将不会反转。