【发布时间】:2015-11-14 00:27:23
【问题描述】:
如主题所述,GDI 是否支持纹理的 alpha 缓冲区?
如果我的应用程序在 windows-remote-desktop 环境中运行,当我尝试将后台缓冲区的副本保留到纹理时,alpha 通道似乎被忽略了。
alpha 缓冲区已在 openGL 上下文中设置。为了检查一切是否正常,我将副本复制到主存储器(glReadPixels)并用给定的 alpha 值计算像素。结果是正确的。
当我尝试纹理方法时,所有像素都完全不透明。
让我举个例子。我不会写每个细节,比如 glBindTexture 等。
我生成纹理并创建图像:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width(), height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
以下是我将后台缓冲区保存到纹理的方法:
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, width(), height());
然后我创建一个缓冲区:
GLvoid *buf = (GLvoid *)malloc(4 * width() * height() * sizeof(unsigned char));
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);
然后我循环 buf 并检查 alpha 值。所有都是不透明的(即 255)。
另一方面,如果我将 buf 与 glReadPixels 一起使用:
glReadPixels(0, 0, width(), height(), GL_RGBA, GL_UNSIGNED_BYTE, byf);
一切正常。我的意思是设置了各种 alpha 值的像素被正确读取,这意味着 alpha 缓冲区有效。
有什么想法吗?
【问题讨论】: