【发布时间】:2013-02-14 12:31:00
【问题描述】:
我正在尝试在其颜色缓冲区中设置一个带有 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 通道。]
[编辑:这是我正在编写的跨平台窗口后端的一部分。我的代码始终是可移植的。我没有使用提供此功能的库,因为我需要更多控制。]
【问题讨论】:
-
在使用 OpenGL 编程时,您永远不应该使用
windows.h。这违背了 OpenGL 的整个跨平台目的!改用 GLFW 之类的东西。 -
@Antonijn 与问题无关
-
@BartekBanachewicz 我知道,这就是为什么它是评论而不是答案。
-
尽管我同意你的观点,适当的窗口处理库已经存在。
-
@Antonijn:尝试在没有 windows.h 的情况下编译 OpenGL 程序,并获得惊喜。您需要 windows.h 中的一些预处理器定义才能使 GL/opengl.h 包含工作。如果为 windows 编译,只需用测试包围包含就可以了。