繁体   English   中英

glReadPixels alpha值问题

[英]glReadPixels alpha value issue

我在从Android上的OpenGL纹理读取Alpha通道时遇到问题。 我这样调用glReadPixels

glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

作为测试,我制作了一个片段着色器,如下所示:

gl_FragColor = vec4(0.5, 0.5, 0.5, 0.5);

对于每个像素,我返回{64,64,64,-1}。

我已经尝试了各种方法来弄清楚为什么alpha返回值与RGB值的返回方式不同,包括在每次渲染之前返回的值:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
//Tried various blend functions
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

但是无论我做什么,它都会返回-1。

这是Android的限制,还是我缺少什么?

请注意,如果有任何不同,我将使用屏幕外FBO。

编辑:如果我这样做:

int[] bits= new int[4];
glGetIntegerv(GL_RED_BITS, bits, 0);
glGetIntegerv(GL_GREEN_BITS, bits, 1);
glGetIntegerv(GL_BLUE_BITS, bits, 2);
glGetIntegerv(GL_ALPHA_BITS, bits, 3);

我回来了{8,8,8,0}。

Alpha通道控制混合,使用它们后通常会丢失它们。 alpha通道中的数据已用于将颜色与数据集中已有的颜色混合。 您不能使用:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

并恢复您的Alpha通道。 我还要指出,这就是为什么您的RGB值返回64而不是128的原因,每个原始值(128)已与现有的黑色混合50/50以产生RGB 64。

找出问题所在。 我的渲染缓冲区存储设置为24位模式。 将其更改为32位模式时,它开始工作:

glRenderbufferStorage(GL_RENDERBUFFER, GLES11Ext.GL_RGBA8_OES, w, h);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM