控制台中的openGL上下文

时间:2011-09-24 18:50:58

标签: opengl console openglcontext

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

3 个答案:

答案 0 :(得分:5)

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

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

在X11 / GLX上它更直接:X11 / GLX提供没有扩展的PBuffers(Windows也有PBuffers,但是创建一个你需要一个普通的OpenGL上下文)。所以在X11上你可以创建一个没有代理窗口的PBuffer。 PBuffer iteself可以渲染为屏幕外缓冲区;如果实现支持它们,帧缓冲对象也可以在PBuffer中工作。使用带有帧缓冲对象的不可见窗口,就像使用Windows一样,也可以使用。无论哪种方式,当前的驱动程序X11必须是活动的和绑定的控制台,所以你可以在后台启动一个额外的X服务器并让你的屏幕外渲染发生在那里,但这只是一个限制驱动程序而不是X11,GLX或OpenGL。

  

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

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

答案 1 :(得分:1)

  

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

你如何定义“最轻的?”

除了创建OpenGL窗口之外,两个跨平台库最少,只有FreeGLUTGLFW

FreeGLUT有大约5.2MB的分发(解压后),而GLFW有2.6MB的发行版。这会让它“变轻”吗? FreeGLUT的编译静态库在VS2008下的发布模式下大约为500KB;类似编译的GLFW的那个是120KB。这会让它变得“更轻”吗?

答案 2 :(得分:-2)

有一个非常酷的单个标头文件库(源代码有1411行),名为“ ConsoleGameEngine”(https://github.com/OneLoneCoder/videos/blob/master/olcConsoleGameEngine.h),也许这是您正在寻找的东西。还要看看“ CommandLineFPS”,它演示了3D仿真。它完全不依赖任何内容,但是只能使用Windows ConsoleScreenBuffer来实现。他还在youtube上制作了有关发展过程的视频系列。令人印象深刻。但是,还有一个“ PixelGameEngine”(也位于控制台中),使用不同的库(例如,由同一个家伙制作的glut和glew)以及作为单个头文件以不同的方式实现。 (https://github.com/OneLoneCoder/olcPixelGameEngine