gpt4 book ai didi

winapi - 使用 GL_RGBA 颜色缓冲区设置 Win32 OpenGL 窗口

转载 作者:行者123 更新时间:2023-12-01 14:45:34 25 4
gpt4 key购买 nike

我正在尝试在其颜色缓冲区中设置一个带有 alpha channel 的 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 channel 的格式(尽管我不知道为什么)。

我应该澄清一下,当我说 alpha 缓冲区时,我的意思只是一个用于渲染目的的简单 alpha 缓冲区(每种颜色都有一个 alpha 值,片段可以根据该值进行测试,等等)。我不是指半透明窗口或其他效果。 [编辑:所以不,我现在对使窗口本身透明不感兴趣。我只想要默认帧缓冲区的 alpha channel 。]

[编辑:这是我正在编写的跨平台窗口后端的一部分。我的代码总是可移植的。我没有使用提供此功能的库,因为我需要更多控制权。]

最佳答案

这里有两个关键点需要考虑:

  • 可以使用默认帧缓冲区执行此操作。但是,您需要正确请求它。 Windows 的默认选择机制似乎并没有非常重视 RGBA。最好的方法似乎是枚举所有可能的像素模式,然后按原样“手动”选择您想要的像素模式。通过这样做,我还能够指定我想要一个 24 位深度缓冲区、一个累积缓冲区和一个 8 位模板缓冲区。

  • OpenGL 上下文必须完全有效才能使 alpha 混合、深度测试和任何甚至远程高级技术发挥作用。奇怪的是,我能够在没有完全有效的 OpenGL 上下文的情况下渲染三角形,这让我很困惑!也许它是在软件中模拟的?当 glewInit(更不用说制作一些 VBO)惨遭失败时,我明白了。关键是 OpenGL 上下文必须有效。就我而言,我没有正确设置它。

这个问题是在我目前正在编写一个轻量级跨平台窗口工具包的上下文中出现的。目前,它通过 Win32 API 支持 Windows,通过 X11 支持 Linux,我刚刚开始通过 X11 移植到 Mac OS。

应评论中某些人的要求,我特此提出我的微薄努力,以期其他人受益。 Mac 支持还没有工作,菜单没有在 Linux 上实现,Linux 上的用户输入只有一半。截至1/18/2013,暂时可以找到here ( future 的人,我可能已经在 my website 上放了新版本(寻找“Portcullis”))。

关于winapi - 使用 GL_RGBA 颜色缓冲区设置 Win32 OpenGL 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14874936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com