【问题标题】:Setting up a Win32 OpenGL Window with a GL_RGBA Color Buffer使用 GL_RGBA 颜色缓冲区设置 Win32 OpenGL 窗口
【发布时间】: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 编译,只需用测试包围包含就可以了。

标签: winapi opengl window rgba


【解决方案1】:

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

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

  • OpenGL 上下文必须完全有效,以便 Alpha 混合、深度测试以及任何远程高级技术工作。奇怪的是,我能够在没有完全有效的 OpenGL 上下文的情况下获得渲染的三角形,这导致了我的困惑!也许它正在软件中被模拟?当glewInit(更不用说制作一些VBO)惨遭失败时,我想通了。关键是 OpenGL 上下文必须是有效的。就我而言,我没有正确设置它。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2011-03-19
    • 1970-01-01
    相关资源
    最近更新 更多