1. Подготовка рабочего места в Arch Linux: установка GLFW, GLAD и настройка компилятора
Подготовка рабочего места в Arch Linux: установка GLFW, GLAD и настройка компилятора
Представь, что ты решил построить настоящий гоночный болид прямо у себя в гараже. У тебя уже есть опыт сборки радиоуправляемых машинок на SFML — это было весело, но там многие детали, вроде двигателя или коробки передач, поставлялись в виде готовых закрытых блоков. OpenGL — это совсем другой уровень. Здесь тебе дают чертежи, набор инструментов и доступ к самому «двигателю» компьютера — видеокарте. Но прежде чем закрутить первый болт, нужно подготовить верстак. В мире Arch Linux это означает настройку окружения, где каждая библиотека будет лежать на своём месте, а компилятор будет точно знать, как собрать твой код в работающую программу.
Почему OpenGL — это не просто библиотека
Когда мы работаем с обычными программами на C++, мы пишем код, который выполняется центральным процессором (CPU). CPU — это очень умный «мозг», который умеет делать всё понемногу, но делает это по очереди. Видеокарта (GPU) — это армия из тысяч маленьких и не очень умных «рабочих», которые умеют делать только одну вещь: очень быстро считать математические примеры одновременно.
OpenGL (Open Graphics Library) — это не программа и даже не совсем библиотека в привычном понимании. Это спецификация или, проще говоря, свод правил. Это договор между тобой (программистом) и производителем видеокарты (NVIDIA, AMD или Intel). В этом договоре написано: «Если ты вызовешь функцию glDrawArrays, я, видеокарта, обязуюсь нарисовать треугольник на экране».
Поскольку OpenGL — это стандарт, его реализация уже встроена в твои графические драйверы в Arch Linux. Нам не нужно скачивать «сам OpenGL», он у тебя уже есть. Нам нужны инструменты, которые помогут нам с ним общаться, создавать окна и загружать современные команды, которые понимает твоя видеокарта.
Инструментарий мастера: GLFW и GLAD
В чистом виде OpenGL не умеет создавать окна. Он умеет только рисовать внутри уже готового окна. Но создание окна в Linux (особенно в такой современной среде, как Hyprland, работающей на протоколе Wayland) — это отдельная сложная задача. Чтобы не писать сотни строк кода для взаимодействия с операционной системой, мы используем помощников.
GLFW: Твой менеджер окон
GLFW — это легкая библиотека, написанная на языке C, которая берет на себя всю «грязную» работу. Она создает окно, инициализирует контекст OpenGL (это своего рода «холст», на котором мы будем рисовать) и обрабатывает ввод от пользователя: нажатия клавиш, движения мыши и работу джойстиков.Почему именно GLFW?
GLAD: Переводчик для функций
Здесь начинается самое интересное. OpenGL — очень старый стандарт, ему больше 30 лет. За это время вышло много версий. Когда ты устанавливаешь драйверы, в системе появляется файл, содержащий только самые базовые, древние функции OpenGL. Все новые «фишки» (современный Core Profile) скрыты глубоко в драйвере, и к ним нет прямого доступа по именам.Чтобы вызвать современную функцию, программа должна сначала спросить у драйвера: «Эй, а по какому адресу в памяти лежит функция для работы с шейдерами?». Делать это вручную для каждой из сотен функций — безумие.
GLAD — это генератор загрузчика. Он проходит по спецификации OpenGL, находит адреса всех нужных функций и подставляет их в твой код так, чтобы ты мог просто писать glShaderSource() и не думать о том, как программа нашла эту команду внутри драйвера.
Подготовка системы: Сила Arch Linux
Arch Linux — идеальная площадка для обучения графике, потому что здесь мы получаем самые свежие версии драйверов и библиотек. В Hyprland мы работаем через протокол Wayland, что накладывает свои особенности, но современные версии GLFW справляются с этим автоматически.
Для начала обновим систему и установим базовый набор инструментов для сборки (компилятор gcc, утилиту make и другие):
Теперь установим GLFW. В Arch Linux библиотека разделена на саму библиотеку и заголовочные файлы, но в официальных репозиториях они идут вместе:
Важное примечание: Если бы ты использовал обычный X11 (например, в i3 или GNOME), ты бы ставил пакет glfw-x11. Но так как Hyprland — это Wayland-композитор, пакет glfw-wayland обеспечит лучшую производительность и нативную поддержку.
Настройка GLAD: Индивидуальный пошив
В отличие от GLFW, GLAD обычно не устанавливают через pacman. Его принято генерировать под конкретный проект. Это позволяет выбрать именно ту версию OpenGL, которая тебе нужна, и не тащить лишнего.
Внутри архива ты найдешь две папки: include и src.
include лежат файлы glad/glad.h и KHR/khrplatform.h. Их мы подключим к нашему проекту.src лежит файл glad.c. Его нужно будет скомпилировать вместе с нашим кодом.Организация проекта: Порядок в мастерской
Давай создадим структуру папок для нашего первого проекта. Это поможет не запутаться, когда файлов станет много. Открой терминал и создай папку:
Распакуй содержимое архива GLAD так, чтобы структура выглядела следующим образом:
main.cpp — здесь будет наш код.external/glad/
- glad.h
- khrplatform.h
- glad.cТакая структура называется «вендоринг» (vendoring) — когда мы держим зависимости прямо внутри проекта. Для небольших учебных программ это самый удобный способ.
Твой первый код: Проверка инструментов
Чтобы убедиться, что всё установлено правильно, напишем крошечную программу. Она не будет ничего рисовать, но она проверит, может ли компьютер создать окно и инициализировать OpenGL.
Создай файл main.cpp и вставь туда следующий код. Не пугайся, если что-то непонятно — в следующей главе мы разберем каждую строчку.
Сборка проекта: Как подружить файлы
Теперь нам нужно превратить этот текст в работающую программу. В Arch Linux мы используем компилятор g++. Нам нужно сказать ему три вещи:
main.cpp и glad.c).external).glfw).Команда для компиляции в терминале будет выглядеть так:
Разберем флаги:
main.cpp external/glad.c: мы компилируем сразу два файла. glad.c нужен, чтобы функции OpenGL вообще заработали.-I./external: флаг "Include". Говорит компилятору искать файлы в папке external. Это нужно, чтобы строчка #include "glad/glad.h" сработала.-lglfw: флаг "Link". Подключает библиотеку GLFW, которую мы установили через pacman.-o opengl_app: имя готового файла.Если после запуска команды ./opengl_app ты увидел пустое темно-синее окно — поздравляю! Твой «верстак» в Arch Linux готов.
Нюансы работы в Hyprland и Wayland
Поскольку ты используешь Hyprland, ты можешь столкнуться с парой особенностей.
Во-первых, Wayland очень строго относится к тому, как окна общаются с системой. Если окно не отвечает на события (не вызывает glfwPollEvents), система может посчитать его зависшим. В нашем коде цикл while постоянно вызывает эту функцию, так что всё должно быть в порядке.
Во-вторых, в Hyprland окна по умолчанию открываются в режиме «плитки» (tiling). Твое окно OpenGL может растянуться на весь экран или занять его половину. Это нормально. Если ты хочешь, чтобы оно было фиксированного размера, ты можешь добавить правило в конфиг Hyprland или перевести окно в плавающий режим вручную (обычно xy(0, 0)-11-11-11$, иначе видеокарта её просто не увидит и «отсечет», как лишний кусок бумаги.
>
> OpenGL Specification
Когда мы в будущем будем двигать наш куб, мы будем использовать матрицы. Но думай о них не как о сложных таблицах с числами, а как о волшебных пультах управления. Нажал кнопку «Вправо» на пульте — матрица изменилась, и все точки твоего куба сдвинулись вправо. Весь сложный счет за тебя сделает видеокарта, нам важно лишь научиться правильно нажимать на кнопки этого пульта.
Типичные ошибки новичка
При настройке часто возникают проблемы, которые могут отбить желание учиться. Давай разберем их заранее:
в команде компиляции. Он должен указывать на папку, ВНУТРИ которой лежит папка glad.": Ты забыл добавить -lglfw в конце команды. Компилятор видит, что ты хочешь вызвать функцию, но не знает, где лежит её реализация. на 3 и 3 (для версии 3.3). Это самая стабильная версия, которая работает почти везде.Почему мы не используем SFML?
Ты уже знаком с SFML, и это отличный инструмент. Но SFML прячет от тебя самое важное — конвейер рендеринга. В SFML ты говоришь: window.draw(sprite)`. В OpenGL мы будем говорить:
Это дает тебе невероятную мощь. Ты сможешь создавать эффекты воды, теней, тумана и тысячи летящих частиц, которые SFML просто не потянет, потому что OpenGL позволяет тебе управлять видеокартой напрямую.
Теперь, когда твоя система Arch Linux настроена, библиотеки установлены, а первое окно (пусть и пустое) открыто, мы готовы заглянуть «под капот» и узнать, как же именно видеокарта превращает цифры в красивые картинки.