首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glReadPixels alpha值问题

glReadPixels alpha值问题
EN

Stack Overflow用户
提问于 2013-01-30 20:06:14
回答 2查看 1.5K关注 0票数 1

我在安卓系统上读回我的OpenGL纹理的alpha通道时遇到了问题。我这样调用glReadPixels

代码语言:javascript
复制
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

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

代码语言:javascript
复制
gl_FragColor = vec4(0.5, 0.5, 0.5, 0.5);

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

我尝试了各种方法来弄清楚为什么alpha不像RGB值那样返回,包括在每次渲染之前:

代码语言:javascript
复制
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,如果它有什么不同的话。

编辑:如果我这样做:

代码语言:javascript
复制
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 }。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-30 22:22:12

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

代码语言:javascript
复制
glRenderbufferStorage(GL_RENDERBUFFER, GLES11Ext.GL_RGBA8_OES, w, h);
票数 0
EN

Stack Overflow用户

发布于 2013-01-30 20:10:55

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

代码语言:javascript
复制
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

找回你的alpha通道。我还要注意到,这就是为什么你的RGB值得到64而不是128的原因,每个原始值(128)已经与现有的黑色50/50混合,产生RGB为64。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14603610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档