Я выясняю, лучше ли мне остаться с OpenGL или рассмотреть возможность миграции Vulkan для интенсивного рендеринга с узкими местами.
Однако я не хочу совершать прыжок без уведомления об этом. Я искал, какие преимущества предлагает мне Vulkan, но с большим количеством поисков я не смог найти точно , что дает повышение производительности. Люди будут разбрасывать такие термины, как «OpenGL медленный, Vulkan намного быстрее!» или "Низкое энергопотребление!" и больше ничего не говорите по этому вопросу.
Из-за этого мне трудно оценить, являются ли проблемы, с которыми я сталкиваюсь, чем-то, с чем Вулкан может мне помочь, или мои проблемы связаны с объемом и вычислениями (и Вулкан в таком случае не поможет мне очень).
Я предполагаю, что Vulkan волшебным образом не делает вещи в конвейере быстрее (поскольку в OpenGL и Vulkan затенение будет примерно одинаковым для тех же буферов, униформ и шейдеров). Я предполагаю, что все вещи с OpenGL, которые вызывают горе (например, изменения кадрового буфера и программы шейдеров), будут одинаково болезненными в любом API.
У меня в голове есть несколько вещей, которые, как мне кажется, предлагает Vulkan, основываясь на чтении бесчисленных вещей в Интернете (и я полагаю, что это, конечно, не все преимущества, или даже это правда):
Рендеринг текстур без [много? любое?] связывание (или, вернее, лучшая версия «текстур без привязки»), которые я заметил, когда переключился на текстуры без привязки, я получил значительное повышение производительности, но это, возможно, даже не стоит упоминать как точку, если текстуры без привязки эффективно делает это и поэтому не уверен, что Vulkan добавляет что-нибудь сюда
Уменьшена связь между процессором и графическим процессором благодаря составлению списка команд, который вы можете выполнять на графическом процессоре без необходимости отправлять много данных
Возможность многопоточного взаимодействия, которое OpenGL не может каким-либо образом
Однако я не знаю точно, в каких случаях люди сталкиваются в реальном мире, которые требуют этого, и как OpenGL ограничивает их. Все приведенные в Интернете примеры говорят: «Ты можешь бежать быстрее!» но я не видел как люди использовали его, чтобы бежать быстрее.
Где я могу найти информацию, которая отвечает на этот вопрос? Или вы знаете несколько реальных примеров, которые бы ответили на это для меня? Может быть, лучше задать вопрос: где типичные болевые точки, которые возникают у людей с OpenGL (или D3D), из-за которых Vulkan стал чем-то особенным?
Примером ответа, который не будет удовлетворительным, будет ответ типа
Вы можете многопоточность и отправлять вещи в Vulkan быстрее.
но ответ, который был бы более удовлетворительным, был бы что-то вроде
В Vulkan вы можете многопоточными вашими представлениями в GPU. В OpenGL вы не можете сделать это, потому что вы полагаетесь на реализацию, которая делает соответствующую блокировку и установку ограждений от вашего имени, что может в итоге создать узкое место. Коротким примером этого может быть [краткий пример здесь случая, когда OpenGL не вырезает его для ситуации X], а в Vulkan это решается с помощью [действие Y].
Последний абзац выше может быть неточным, но я пытался привести пример того, что я искал, не пытаясь написать что-то ужасно неправильное.