我正在尝试在其颜色缓冲区中设置一个带有 alpha 通道的 OpenGL 窗口。不幸的是,我当前的设置是创建一个 GL_RGB 前后缓冲区(由 gDEBugger 报告,如我的实验所示)。
我这样设置窗口:
PIXELFORMATDESCRIPTOR pfd;
ZeroMemory(&pfd,sizeof(pfd));
pfd.nSize = sizeof(pfd);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24; //note by docs that alpha doesn't go here (though putting 32 changes nothing)
pfd.cDepthBits = 24;
pfd.iLayerType = PFD_MAIN_PLANE;
我也更具体地尝试过:
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
24,
8,0, 8,8, 8,16, 8,24, //A guess for lil endian; usually these are 0 (making them 0 doesn't help)
0, 0,0,0,0,
24, //depth
8, //stencil
0, //aux
PFD_MAIN_PLANE,
0,
0, 0, 0
};
我的理解是,当我稍后调用 ChoosePixelFormat 时,它返回的格式没有 alpha 通道(虽然我不知道为什么)。
我应该澄清一下,当我说 alpha 缓冲区时,我的意思只是一个用于渲染目的的简单 alpha 缓冲区(每种颜色都有一个可以测试片段的 alpha 值,等等)。我不是指半透明窗口或其他效果。[编辑:所以不,我目前对使窗口本身透明不感兴趣。我只想要默认帧缓冲区的 alpha 通道。]
[编辑:这是我正在编写的跨平台窗口后端的一部分。我的代码始终是可移植的。我没有使用提供此功能的库,因为我需要更多控制。]