Pull to refresh

Comments 17

Хотелось бы, конечно, почитать про чистую реализацию окна без всяких левых библиотек в разных операционках. А то вот так ищешь, что тебе надо и находишь малюсенький проектик, который тянет за собой вагон и маленькую тележку связей… Беда прям.
Ну на самом деле для осознания подобных особенностей можно пойти хардкорным путем и пойти читать исходники GLFW. Я думаю когда у меня появится немного свободного времени от переводов и работы я напишу небольшую статейку о подобной «проблеме».
Ну в винде и на маке достаточно просто делается. В win32 через любой оконный хендл. На маке через NSView — NSOpenGLView. В linux, к сожалению без понятия… Поэтому и говорю, что тащить все эти библиотеки ради таких мелочей — не комильфо.
Для OpenGL не существует понятия «окно». Если не вдаваться в детали, то основной сущностью для библиотеки является поверхность (или буферный объект — область памяти, преимущественно из адресного пространства GPU). Через них библиотека скармливает в аппаратуру indirect/batch buffer с командами, vertex-buffers, текстуры и все остальное. Отдельно передается адрес результирующего буфера, в который аппаратура должна отрендерить результат обработки batch буфера.

Будет ли результирующий буфер непосредственно отображаемым, находиться в выделенном аппаратном слое или же операционная система должна озаботиться своевременным отображением/преобразованием, конкретно для аппаратной акселерации безразлично. В сухом остатке основным интерфейсом в ОС/драйвер является возможность выделения видео-памяти. Отсюда и зоопарк с библиотеками для управлением отображением — glx, glut, egl,…
Я очень люблю, когда дают на столько развёрнутый ответ или комментарий, но я и так всё это знаю. И это никак не отменяет того факта, что для инициализации GLтребуется оконный хендл. А по скольку именно этот момент и разнится в разных ОС, то именно его и хотелось бы видеть тут. Ну хотя бы для Linux, Win и OSX. Не для себя даже прошу, просто вспоминаю, как когда-то пришлось с этим повозиться изрядно, когда только начинал gl под мак, после винды.
Не знаю почему это опубликовалось только сейчас. Даже не помню когда именно разместил.

По теме вы исходно писали «чистую реализацию окна без всяких левых библиотек». На это я и ответил, что «чистых» окон не существует и писать не о чем. А так для примера взята кросс-платформенная оконная либа.

что для инициализации GLтребуется оконный хендл.

Это не так. Легко показать это на примере DRI в Mesa. Найдите по ссылке упоминание окон. Данный код это интерфейсная библиотека DRI-драйверов:

GLX -> DRI_common -> DRI-driver -> DRI & DRM extensions (включая *GetBuffer*)

и ей, как видно, не требуется окно.

На прикладном уровне этого не ощутить, так как оконные API таких интерфейсов не имют, но 3D драйвера прекрасно работают без всяких окон. Достаточно скормить сырой адрес рендер-буфера. При определенной сноровке можно открутить DRI-драйвер от GLX и сделать его сравнительно независимым от иксов, чем мы в том числе пользуемся затягивая месу в другие окружения. Другой разговор, что коллегам прикладникам работать так будет, кхм, проблематично.
статьи — хорошие. Уже Vulkan на горизонте маячит — его бы кто-нить перевёл, если уже имеются туторы.
На счет вулкана — писал в прошлой статье. Проблему решу в ближайшие 2 месяца и тогда начну готовить туторы по вулкану.
Был бы очень кстати «hello world!» в конце. А то три часа ставил\компилил, и теперь совершенно непонятно работает ли оно в итоге. = )
Следующий урок на подходе. Там то и подоспеет «hello world».
Спасибо за статью. Обязательно продолжайте. Насторожил один момент: текущая статья называется «learnopengl. Урок 1.2 — Создание окна», однако процесс создания окна так и не был описан.
Промазал с телефона и ответить в общую ветку.
Ну в общем то это правильное замечание, но на него можно ответить, что тут скорее были показаны проблемы создания окна и пути их решения. Создание самого окна будет описано в следующей части
А может ли кто-нибудь подсказать, где можно найти оригинал?
Может, я кривоглазый, но в статье не нашел…
Нажмите на имя автора. Там ссылка на все уроки, поскольку там динамическая погрузка страниц.
Sign up to leave a comment.

Articles