【问题标题】:openGL context in console控制台中的openGL上下文
【发布时间】:2011-11-24 08:44:43
【问题描述】:

我想使用 openGL 的某些功能,但与渲染视觉内容无关。有没有办法在没有任何依赖项的情况下创建它(不是 Windows,也不是某些包 [SDL,SFML,GLUT])?只允许那些没有外部库的库,就像我使用的 GLEW。

【问题讨论】:

  • OpenGL 的哪些函数在没有上下文的情况下有用?这没有多大意义。
  • 计算着色器,投影,实际上很多东西.. 请不要建议我使用 CUDA 或自己编程,当然这是可能的,但我想知道是否可以做到(以及这样做的代码越少越好
  • 我不明白您对“外部库”一词的使用。如果没有 WGL 和 GLX 函数,GLEW 就无法工作,它们与 Win32 或 X11 一样是外部的。实际上,Win32 提供 WGL 函数,就像 X11 提供 GLX 函数一样。因此,阻止您使用 FreeGLUT 或 GLFW 的相同逻辑也会阻止您使用 GLEW。
  • 很难用其他词来定义。我的意思是我需要一些你刚刚包含的东西,仅此而已。在 glew 的情况下,您只需包含 glew ,它会处理所有事情,但是例如使用 SFML,您需要在某个地方围绕外部动态库。
  • @Raven FreeGLUT 和 GLFW 都具有静态构建,如果您对 DLL 过敏。此外,这并不能解释“对 Windows”的依赖是如何可能的,因为 Windows 是使 GLEW 工作所必需的。

标签: opengl console openglcontext


【解决方案1】:

您要执行的操作通常称为离屏渲染。从理论上讲,它是完全有可能的,但是实际的实现有很多警告。在所有主要的高性能实现中最重要的是:即使没有可见的渲染窗口,您仍然需要图形系统运行并处于活动状态,并且您的程序在此图形系统的环境中运行。

在 Windows 上,最直接的方法是创建不可见的窗口,只是一个您使用 CreateWindowEx 创建但不使用 ShowWindow 映射的窗口;你甚至不需要事件处理循环。在此窗口中,您像往常一样创建 OpenGL 上下文,但不是渲染到窗口帧缓冲区,而是渲染到帧缓冲区对象。

在 X11/GLX 上更简单:X11/GLX 提供没有扩展的 PBuffers(Windows 也有 PBuffers,但要创建一个,您首先需要一个常规的 OpenGL 上下文)。所以在 X11 上你可以创建一个没有代理窗口的 PBuffer。 PBuffer 本身可以渲染为屏幕外缓冲区;帧缓冲区对象也可以在 PBuffer 中工作,如果实现支持它们的话。与 Windows 一样,使用带有帧缓冲区对象的不可见窗口也可以正常工作。无论哪种方式,对于当前的驱动程序,X11 必须处于活动状态并且绑定控制台,因此您可以在后台启动额外的 X 服务器并在那里进行离屏渲染,但这只是一个限制驱动程序而不是 X11、GLX 或 OpenGL。

只允许那些没有外部库的库,就像我使用的 GLEW。

您可以将 GLEW 静态链接到您的程序。如果你是铁杆,你可以手动加载扩展,但你为什么要这样做?

【讨论】:

    【解决方案2】:

    什么是最轻量的可以静态链接并可以创建上下文的跨平台库。

    你如何定义“最轻”?

    除了创建 OpenGL 窗口之外,做最少的两个跨平台库是 FreeGLUTGLFW

    FreeGLUT 有大约 5.2MB 的发行版(解压后),而 GLFW 有 2.6MB 的发行版。这会让它“更轻”吗? FreeGLUT编译好的静态库,VS2008下release模式,500KB左右;类似编译下的 GLFW 是 120KB。这会让它“更轻”吗?

    【讨论】:

    • 你为什么问我?我不知道尺寸是否使图书馆更轻。看起来是这样,也可能不是真的……这就是我在这里问的原因。当然,我可以使用 glut 就可以了,但是我想在这里问一下是否有什么我不知道的以及您的个人意见,因为您可能比我熟练得多。
    • @Raven 我问你是因为“打火机”这个词完全是主观的。什么是“重”或“轻”没有客观标准。我个人的看法是……我不在乎。如果我想要做的事情明确需要一个小的可执行文件,我只会关心“轻量级”或“重度”库。 关心的是文档的质量、易用性和整体可靠的功能。
    • 你说得很好,这是非常主观的,取决于我刚刚在做什么。最后我选择了 SFML,因为我意识到它的功能分为 5 个库和一个我需要的库 - 窗口只有 56 kb。创建上下文也只是一行代码。我知道堆栈溢出应该用于寻找特定问题的答案,但我发现很多时候它更好地为我指出正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多