OpenGL 使用片段着色器从 RGBA 到 ARGB

问题描述 投票:0回答:0

一个简单的问题,我想将RGBA转换为ARGB。在从 OpenGL

glReadPixels
获取字节后,我没有在 for 循环中手动调整字节,而是想我只是使用一个简单的片段着色器将像素字节顺序输出为 ARGB 而不是标准 RGBA。

很简单:

void main()
{
    vec4 outColor = v_color * texture2D(u_texture, v_texCoord);
    gl_FragColor = outColor.argb;
}

然后我像这样抓住它们:

Gdx.gl.glPixelStorei(GL20.GL_PACK_ALIGNMENT, 1);
byteBufferPixels.clear();
Gdx.gl.glReadPixels(0, 0, fbo.getWidth(), fbo.getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, byteBufferPixels);

byteBufferPixels.clear();
byteBufferPixels.get(bytesARGB);

我想在片段着色器中我把“A”放在“R”通道和“R”在“B”通道等并不重要,因为我实际上没有渲染任何东西 - 我只需要按此顺序的原始字节数据。但显然它确实很重要,因为它没有给出正确的结果?我以为它们都只是 0-1 通道?有什么方法可以欺骗 OpenGL 让它工作吗?

请注意,我无法在 glReadPixels 中更改

GL_RGBA
,因为它在 iOS 上效果不佳。


编辑、输入和输出:

输入

gl_FragColor = outColor.argb;

gl_FragColor = outColor.bgra;

其实一点都不尊重渠道?

如果我不应用着色器,并通过 CPU for 循环将 RGBA 洗牌到 ARGB,它工作正常。

android opengl-es
© www.soinside.com 2019 - 2024. All rights reserved.