28

我期待一个类似于 Windows API 的 Linux API。我在 Google 上看到的只是对 Qt 和 GTK 的引用。我真的只需要一个简单的窗口就可以使用 OpenGL 进行绘制,所以这些库对于我的使用来说显得臃肿。Qt 和 GTK 在 Linux 下使用什么来创建窗口?没有比这更底层的了吗?

4

6 回答 6

14

X 窗口系统通常进行绘图 - 然后您在原始 Xlib 之上使用 Qt 或 GTK 等工具包来提供事件循环、拖放、鼠标点击启动应用程序以及所有其他“桌面”内容

直接使用Xlib 和 opengl相当容易,或者如果您只想学习 opengl,glut提供了显示窗口、处理鼠标/键盘事件等所需的框架。

于 2012-06-25T14:13:50.770 回答
12

对于 OpenGL,最简单的方法是使用GLUTSDL。这是一个使用 GLUT 的近似示例:

#include <GL/glut.h>

int main (int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(800, 600);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("My new window");
    /* ... */
}

你真的想避免直接使用 Xlib,因为它使用起来非常乏味。此外,GLUT 和 SDL 可以更轻松地将 OpenGL 应用程序移植到不同的平台。

于 2012-06-25T14:17:58.080 回答
3

Ax Martin 说,X11(或者现在它的分支 XOrg)是窗口系统,但实际上你可以不使用工具包,只使用 X 库来编写 X11 应用程序(即客户端)。有关文档,请参见 此处

这样做通常不是最好的主意,因为它相当痛苦,并且会涉及大量代码,以使相对简单的应用程序按您期望的方式工作。

于 2012-06-25T14:18:53.980 回答
3

更新了 2019 年的答案。类 Unix 系统通常使用 X 窗口系统。您可以使用 Xlib 直接使用它,这是低级 API。但是您可能需要一个更受欢迎和跨平台的解决方案。您可以使用:

GLFW 是用 C 语言编写的,并且原生支持 Windows、macOS 和许多使用 X Window 系统的类 Unix 系统,例如 Linux 和 FreeBSD。

安装后,创建一个窗口:

#include <GLFW/glfw3.h>
.
. //Entry and glfwInit()
.
GLFWwindow* window = glfwCreateWindow(1000, 1000, "MyWindow", NULL, NULL);
glfwMakeContextCurrent(window);
于 2019-04-18T15:23:20.233 回答
1

我知道这是一个旧帖子。但是对于像我这样最近发现这一点的人来说,这里有一个有用的图表。这只是您想要/需要抽象多远的问题;如果你不小心,你最终会尝试用二进制编码。XLib 是 SFML 的依赖项,XLib 有它的依赖项。

GUI 层示意图

于 2021-04-12T03:12:05.640 回答
0

假设简单窗口是指绘图应该出现在屏幕上: Weston 合成器使用 EGLOutput/EGLDevice 在物理显示设备上显示合成的 Weston 桌面或单个 Wayland 应用程序。

对于用其他厂商硬件学习GEM的绘图可能会有所提示。

于 2021-03-14T06:31:09.303 回答