【发布时间】:2011-01-18 12:13:59
【问题描述】:
我正在从帧缓冲区读取像素数据,似乎一切正常,除了 alpha 值始终为 1.0
GLfloat lebuf[areasize * 4];
glReadPixels(xstart, ystart, partw, parth, GL_RGBA, GL_FLOAT, lebuf);
我已将窗口创建代码设置为支持 Alpha 通道:
SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8);
还有其他地方我应该检查一下为什么 alpha 通道似乎一直是 1.0 吗?更好的是,是否有其他方法(除了 glReadPixels)从帧缓冲区将纹理放入客户端内存?
编辑:这就是我清除缓冲区的方式:
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
【问题讨论】:
-
您是否尝试使用另一种格式(如 GL_UNSIGNED_BYTE)而不是 GL_FLOAT 来 glReadPixels ?以防万一这是驱动程序错误?
-
您是否尝试删除所有渲染并仅保留 glClear 和 glReadPixels ?在这种情况下,行为是否相同?
-
是的,我删除了图纸,只尝试了 glCLear 的东西,它仍然是黑色的,不透明的图片。我会尽快尝试使用 GL_UNSIGNED_BYTE
-
哦哇..启用 GL_UNSIGNED_BYTE 有效..它没有透明背景!令人费解!
-
你检查过 OpenGL 错误吗,顺便说一句?