OpenGL是否依赖于GTK +等窗口系统?

Mat*_*hew 1 gtk opengl

我最近决定开始学习OpenGL,我有几个问题.主要是,我想知道OpenGL是否依赖于窗口系统(如GTK +)以及窗口系统API的扩展,允许创建OpenGL区域.我也在OpenGL Wiki上看到了与Xlib类似的东西,它似乎是与X-Windowing系统更直接的连接.Xlib是一个更基本的窗口系统,还是可以创建完全由OpenGL控制的窗口?在两者都可能的情况下,哪个是更广泛接受的标准?

der*_*ass 7

OpenGL的规范与窗口系统完全无关.就OpenGL而言,没有窗口.在这方面,所有这些都是系统提供的默认帧缓冲区(FBO 0),它通常连接到某个窗口 - 但是,并非必须如此.例如,有pbuffers,这是一种生成OpenGL上下文而根本没有可见窗口的方法.

所有这些问题都是依赖于平台的,因此不在OpenGL本身的范围内,而是一组依赖于平台的API:

  • wgl,实际上是Windows API的一部分(就像OpenGL 1.1一样)
  • glX,它是X Window系统的GL接口,因此主要与Linux和UNIX相关
  • 在Apple上,有CGLNSOpenGL(以及过去的AGL)
  • 对于通常不存在此类窗口系统的嵌入式系统和GLES,存在EGL.虽然这最初集中在GLES上,但它实际上也能够管理GL上下文,并且正在不断努力将这个用于在Linux上进行硬件加速GL上下文创建的某种标准API,当X Window系统将成为由Wayland取代.
  • Apple还定义了自己的GLES上下文API EAGL,这与iPhone和iPad等iOS设备特别相关.

另一方面,GTK +只是某种小部件库.它将使用平台的底层API来完成它的工作,它将依赖于特定于平台的GL上下文API来实现特定于GL的功能.与Qt相同.

Xlib是一个更基本的窗口系统,还是可以创建完全由OpenGL控制的窗口?

xlib是实现X协议的库,因此当您使用X Window系统时,它是最低级别的API(除了手动重新实现X协议).GTK +也会在这样的平台上使用它.

Windows永远不会控制Windows.您将始终需要一些与平台相关的方法来创建和管理窗口,OpenGL和GL上下文API都不会对您有所帮助.

如果你只想要一个与GL一起使用的窗口,那么使用像GTK +或Qt这样的GUI工具包可能会有点过分.有一些简单的OpenGL窗口和上下文管理库,如GLFWfreeGLUT(这是目前唯一仍在积极开发的GLUT规范实现),它们也抽象了特定于平台的API.如果您正在尝试构建游戏或多媒体软件,SDLSFML等库也可能值得一看,因为它们为除GL以外的其他概念提供了一组抽象,尤其是音频.