最小无窗口 OpenGL 上下文初始化

发布于 2024-11-29 08:30:40 字数 207 浏览 0 评论 0原文

如何使用最少量的代码初始化无窗口 OpenGL 上下文?

我在此处读到您可以使用wglCreateContextAttribsARB来创建无窗口上下文,但它没有解释如何?

How can I initialize a windowless OpenGL context with the minimal amount of code?

I've read here that you can use wglCreateContextAttribsARB to create windowless context, however it doesn't explain how?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冷了相思 2024-12-06 08:30:40

从链接:

创建一个没有窗口的上下文,用于离屏渲染。这实际上可能行不通。

第二句话很重要。来自 WGL_ARB_create_context 规范

4)是否有一种方法可以使上下文成为当前上下文而无需绑定
它同时可以绘制到窗口系统吗?

已解决:是的,但仅限于 OpenGL 3.0 及更高版本。这导致
具有无效默认帧缓冲区的上下文,其含义是
OpenGL 3.0 规范中定义。

注意:显然在 Windows 上,opengl32.dll 使用了可绘制对象
参数来标识驱动程序的名称空间,所以我们可能不会
能够解决它。

该规范不允许您创建没有窗口的上下文,因为它需要您在设备上下文中设置的像素格式。但是理论上可以在使上下文成为当前上下文时为 HDC 传递 NULL,这会导致 OpenGL 没有默认的帧缓冲区。

但是,如上所述,这实际上可能行不通。你可以尝试看看会发生什么,但我不会抱太大希望。

From the link:

Creating a context without a window, for off-screen rendering. This may not actually work.

That second sentence is important. From the WGL_ARB_create_context specification:

4) Should there be a way to make a context current without binding
it to a window system drawable at the same time?

RESOLVED: Yes, but only in OpenGL 3.0 and later. This results in a
context with an invalid default framebuffer, the meaning of which is
defined in the OpenGL 3.0 specification.

NOTE: Apparently on Windows, opengl32.dll makes use of the drawable
argument to identify the namespace of the driver, so we may not be
able to work around it.

The specification doesn't allow you to create a context without a window, since it needs the pixel format that you set into the device context. But you theoretically can pass NULL for the HDC when making the context current, which causes OpenGL to not have a default framebuffer.

But, as noted above, this may not actually work. You can try it to see what happens, but I wouldn't get my hopes up.

最冷一天 2024-12-06 08:30:40

实现离屏渲染的通常方法是:

  1. 创建一个虚拟窗口 + OpenGL 上下文来访问扩展
  2. 获取创建 PBuffer 的函数
  3. 创建一个 PBuffer DC
  4. 在 PBuffer 上创建一个 OpenGL 上下文
  5. 销毁虚拟窗口

另一种选择是使用 Framebuffer 对象( FBO),您可以通过它创建常规 OpenGL 窗口,但不是渲染到主帧缓冲区,而是渲染到帧缓冲区对象缓冲区,并且 OpenGL 窗口变得不可见。

The usual way to implement offscreen rendering is:

  1. Create a dummy window + OpenGL context to get access to extensions
  2. Obtain the functions to create a PBuffer
  3. Create a PBuffer DC
  4. Create an OpenGL context on the PBuffer
  5. Destroy the dummy window

Another option is using Framebuffer Objects (FBO) by which you create a regular OpenGL window, but instead of rendering to the main framebuffer you render to Framebuffer Object buffers, with the OpenGL window being made invisible.

°如果伤别离去 2024-12-06 08:30:40

另一件事:

HDC  hdc = CreateDC(L"DISPLAY",NULL,NULL,NULL);

但是ReleaseDC不能用它。DeleteDC可以。

another stuff:

HDC  hdc = CreateDC(L"DISPLAY",NULL,NULL,NULL);

But ReleaseDC not work with it.DeleteDC does.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文