Подтвердить что ты не робот

Как создать окно в Linux с С++?

Я ожидал API Linux, похожий на Windows API. Все, что я вижу в Google, - это ссылки на Qt и GTK. Мне действительно не нужно ничего, кроме простого окна, которое можно использовать с OpenGL, поэтому эти библиотеки кажутся раздутыми для моего использования. Что делают Qt и GTK для создания окон под Linux? Нет ничего более низкого уровня?

4b9b3361

Ответ 1

Система окна X, как правило, рисует - тогда вы используете набор инструментов, такой как Qt или GTK, поверх необработанного Xlib для создания циклов событий, перетаскивания, запуска приложений на mouseclicks и всех других "настольных" материалов

Довольно легко работать с Xlib и opengl, или если вы просто хотите изучить opgal glut обеспечивает структуру, необходимую для отображения окна, обработки событий мыши/клавиатуры и т.д.

Ответ 2

Для OpenGL самый простой способ сделать это - использовать GLUT или SDL, Здесь примерный пример с использованием 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 на разные платформы.

Ответ 3

Акс Мартин сказал, что X11 (или его fork XOrg в наши дни) - это система окон, но вы действительно можете писать приложения X11 (то есть клиенты) без использования инструментария, просто используя библиотеки X. См. здесь для документации.

Как правило, это не самая лучшая идея, так как это довольно болезненно и потребует много кода для того, чтобы относительно простые приложения работали так, как вы ожидаете.

Ответ 4

Обновленный ответ на 2019 год. Unix-подобные системы обычно используют систему X Window. Вы можете работать с ним напрямую, используя Xlib - это низкоуровневый API. Но вам, вероятно, нужно более приветливое и кроссплатформенное решение. Вы можете использовать OpenGL Utility Toolkit - GLUT или Простую и быструю мультимедийную библиотеку - SMFL или Simple DirectMedia Layer - SDL, или GLFW. Я рекомендую GLFW.

GLFW написан на C и имеет встроенную поддержку Windows, macOS и многих Unix-подобных систем, использующих систему X Window, таких как Linux и FreeBSD.

После установки создайте окно с:

#include <GLFW/glfw3.h>
.
. //Entry and glfwInit()
.
GLFWwindow* window = glfwCreateWindow(1000, 1000, "MyWindow", NULL, NULL);
glfwMakeContextCurrent(window);