devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻

Opengl 4.* или vulkan?

Есть ли смысл учить opengl, если уже давно выпустили vulkan, который по идее во много раз лучше? В википедии написано, что он обратно не совместим с opengl, много ли принципиальных различий? До этого игрался со старым opengl, без шейдеров и с directX9, т.е. какие-то основы знаю. И какие ресурсы можете посоветовать(можно на английском) для изучения? Гуглить умею, но хотелось бы услышать аргументированное мнение людей.
  • Вопрос задан
  • 13699 просмотров
Решения вопроса 1
TrueBers
@TrueBers
Гуглю за еду
Это вообще разные вещи.
Нужно отличать изучение API, от изучения технологии. Если вы хотите выучить просто API, учите что угодно, ибо разницу заметите только, когда поймёте основы, базу.

OpenGL проектировался когда были другие архитектуры железа. Мультипроцессорность была только в теории, и считалась уделом суперкомпьютеров и ненужной для пользовательских ПК.
Можно привести аналогию: OpenGL == C++, Vulkan == асинхронный Assembler + hardware threads. Например, в C++ сейчас довольно много архитектурных косяков, которые пытаются решить новыми стандартами, объявляют какие вещи устаревшими, потому что они концептуально неверны и не подходят под современные реалии.
Но, при этом, вы можете всё то же самое написать на ассемблере, но нужно намного лучше понимать, как работает процессор и ОС, самому писать примитивы синхронизации, и т. п.

Для этих же целей и создавался вулкан. Для программирования на нём, нужно знать все тонкости железки, читать кучи пейперов от той же НВидии, исследовать, придумывать новые фичи для современных архитектур с нуля, которые изначально были придуманы в OpenGL, но для старого железа.
Т. е. на Вулкане нужно делать больше руками, больше оптимизировать. Вместо одного вызова функции OpenGL, на вулкане придётся несколько сотен строк написать. При этом, если вы не понимаете какой-то одной тонкости, вы сделаете менее эффективнее то, что изначально было хорошо реализовано в OpenGL. К тому же, OpenGL умеет выбрасывать ошибки, в случае, когда вы где-то накосячили. Вулкан же их не выбрасывает, он полагается на то, что вы уже знаете как этим пользоваться. Точно так же, как ассемблер просто меняет состояние регистров, у него нет понятия ошибки. Как интерпретировать эти регистры, зависит от того, насколько хорошо разработчик читал мануал к процессору.

В итоге, я бы ответил так:

Если вы будете заниматься графикой как наукой, дико задротить а-ля Кармак в студенчестве с его движками, что-то исследовать, писать какие-то гениальные алгоритмы, защищать на этом диссертации, публиковать их, рассказывать потом на конференции, как вы круто справились с какой-то насущной задачей, повысили производительность, то тогда учите Vulkan. Vulkan — это именно про графику как технологию, про производительность, про инжиниринг и архитектурный дизайн, а не про API и само программирование. С вулканом придётся больше сидеть с диаграммами, документациями и строить архитектуру, придумывать методы взаимодействия частей этой архитектуры, синхронизации состояний, нежели писать код.

Если же вы пишете простые прикладные вещи, которым нужно показать какую-то графику, то учите OpenGL. Здесь вы учите только API, соглашаясь с уже готовым, слегка устаревшим, архитектурным дизайном.

Если хотите писать игры не мирового класса, то учите готовые движки, Unity или Unreal. Они уже поддерживают за вас Vulkan, продумали за вас API и архитектуру.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
zagayevskiy
@zagayevskiy
Android developer at Yandex
Конечно OpenGL, его поддерживают все. А какие устройства поддерживают Вулкан? Да, потенциально те, которые поддерживают OpenGL 4.x и выше, но на практике нужны дрова для них, и когда они появятся - большой вопрос.
Ответ написан
tsklab
@tsklab
Здесь отвечаю на вопросы.
Поищите у себя папку C:\Program Files (x86)\VulkanRT и поймёте, что ждать драйверов не нужно, они уже у вас. Что это API говориться прямо Vulkan (API). Там же сказано, что "11 июля 2016 года Id Software выпустили патч для игры Doom (2016), в котором отрисовка графики и расчёт физических взаимодействий были переделаны с OpenGL на Vulkan".
Ответ написан
@fed5c
Я бы рекомендовал не использовать для бытовых целей вулкан. Вулкан сам по себе как API не особо сложный, а вся сложность в том, что для построения надежных, незапутанных и быстрых программ требуется огромный опыт не только в графике, но и во многих других вещах, таких как многопоточное программирование, опыт построения архитектуры приложения, разделения на поддерживаемые в дальнейшем модули. То есть Вы потратите очень много усилий и времени, чтобы на вулкане написать домашнюю игру. С другой стороны, это даст возможность как раз этому всему научиться. По моему опыту скажу, что я для себя решил не использовать напрямую вулкан, а использовать прокси-библиотеку BGFX, она умеет рендерить в том числе и через API Vulkan и не только.. Одним из минусов Вулкана также считаю, что он не работает в Webe (в отличие он Opengl, где в Webe он представлен как младший брат OpenglES - WebGL ). BGFX считаю идеальным вариантом для обучения визуализации в 3D через использование графического конвейера, так и для создания игр (вместе с GLFW или SDL2). Подчеркну, что это не движок, это библиотека рендеринга, но работать с ней гораздо проще, чем с Vulkan.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы