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

时间:2014-05-31 15:36:48

标签: opengl gtk

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

1 个答案:

答案 0 :(得分: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上下文,并且正在不断努力将其用于某种标准API ,以便在Linux上创建HW加速GL上下文,当时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永远不会受到GL的控制。您将始终需要一些依赖于平台的方法来创建和管理窗口,OpenGL和GL上下文API都不会对您有所帮助。

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