Войти
ФлеймФорумПрограммирование

Почему GAPI стали такими сложными?

Страницы: 1 2 37 8 Следующая »
#0
0:34, 17 дек. 2018

Много лет назад, когда OpenGL был версии 1.x, а DirectX - 9, было всё гораздо проще. Потом через расширения и прочее прикрутили всякие шейдеры - и, кому надо, тот пользовался и радовался жизни, а кому не надо - тоже пользовался API и радовался. Сейчас же, чтобы вывести простой залитый одним цветом экран, нужно перечитать кучу мануалов и поковыряться в чужом готовом коде, а чтобы нарисовать простой треугольник - без тех же шейдеров не обойтись... а ещё там нужны какие-то стрёмные штуки, о которых я раньше вообще не слышал, пайплайны и прочее.

Потому возникают следующие вопросы. Во-первых, почему GAPI настолько усложнились, что теперь нужно иметь семь пядей во лбу, чтобы нарисовать кубик в тридэ? Почему нельзя было оставить (или сделать по-новому, если старые чем-то не устраивали) высокоуровневые абстракции, а для тех, кому надо в скорость и прочий хайтек - пускай бы юзали расширенную версию. Но сейчас получается всё очень в матане и очень лоулевел. А если хочешь рисовать тридэ кубик, то надо в этом всём долго разбираться, либо юзать готовый движок, а разработчики GAPI как бы вообще не при делах.

P.S. Бонусный вопрос. Что ещё за Vulkan и зачем он нужен? Почему нельзя было просто выпустить очередную обратнонесовместимую версию OpenGL?


#1
0:47, 17 дек. 2018

NuclearMissileDetect
все во благо производительности!
не хочешь ботанить с GAPI юзай движок, фреймворк, обертку. благо таких хватает

#2
0:57, 17 дек. 2018
NuclearMissileDetect
> Почему GAPI стали такими сложными?
Тебе пора либо в школу либо на пенсию.
#3
1:03, 17 дек. 2018

NuclearMissileDetect
Раньше хотели абстрагироваться от железа поэтому даже низкоуровневое API делали легким для понимания человеку, но потом стало ясно что это дорого стоит в плане производительности.
Поэтому планку API опустили до уровня железа и крутись как хочешь. Если нужно высокоуровневое API то используй готовые движки.

#4
1:08, 17 дек. 2018

  Не сложными, а недоделанными.
То есть эти халтурщики поставляют тебе запчасти от автомобиля,
а собирать его ты должен сам по многочисленным инструкциям.
  И чтобы заставить колесо вращаться надо много чего с чем соединить)

#5
1:19, 17 дек. 2018

Это тоже одно из следствий деградации-юнитификации. Юзерам движков пофиг, писатели движков и так разберутся и выжмут еще немного скорости заодно, а о велосипедописателях нынче никому думать не выгодно.

В каком-то смысле раньше в гапи был свой движок. А теперь он не нужен, ибо юнити и блююпринты.

#6
2:40, 17 дек. 2018

NuclearMissileDetect
Серьезно? Что там сложного?

#7
3:18, 17 дек. 2018

NuclearMissileDetect
Разработчики GAPI общаются с топовыми программистами графики топовых компаний. И потом реализуют их хотелки. OpenGL 20 лет рисовал в 1 поток. Хотя уже с PS3 всё делается в 20 потоков. Даже шаред контексты придумывали.
Ответ - так решили Арсений Капулькин, Тьяго Соуса и прочие. Чем болше данных, чем болше фичей, тем больше уровней абстракции и уровней логики.

#8
(Правка: 3:59) 3:53, 17 дек. 2018

кстати, если уж за старину, то давайте вспомним Glide!
API был низкоуровненвый, под конкретное железо, но в итоге сдулся (по причине закрытости).
И уже тогда люди научились с низким уровнем жить на выском уровне. Например MiniGL
Т.е. была обёртка минимального OpenGL API, над низкоуровневым Glide-ом.  И благодаря этому в Quake2 можно было гонять на Voodoo карточках.
Ничто не мешает сейчас делать OpenGL over Vulkan (или Metal). И такие работы уже ведутся

это просто очередной виток истории, от низкого уровня, к высокому, и от выского, снова к низкому. 

+ не зналъ

#9
(Правка: 4:04) 4:03, 17 дек. 2018

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

Great V.
> Серьезно? Что там сложного?
можно посмотреть твою реализацию системы материалов на вулкане?

#10
(Правка: 4:13) 4:12, 17 дек. 2018

Suslik
> в этой индустрии нет места ни школьникам, ни старпёрам.
первые шейдеры (2002-а года) выглядели так:

!!ARBvp1.0
TEMP vertexClip;
DP4 vertexClip.x, state.matrix.mvp.row[0], vertex.position;
DP4 vertexClip.y, state.matrix.mvp.row[1], vertex.position;
DP4 vertexClip.z, state.matrix.mvp.row[2], vertex.position;
DP4 vertexClip.w, state.matrix.mvp.row[3], vertex.position;
MOV result.position, vertexClip;
MOV result.color, vertex.color;
MOV result.texcoord[0], vertex.texcoord;
END
(о! тогда ещё в OpenGL добавили комбайны - это предшественники шейдеров).
то всего два года спустя, опустились до высокоуровненго Си-подобного языка.

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

#11
(Правка: 5:02) 4:59, 17 дек. 2018

Suslik
> можно посмотреть твою реализацию системы материалов на вулкане?
А какое отношение система материалов имеет к вулкану?
Вулкан это просто способ передавать нолики и единички на видеокарту и приказывать ей их рисовать.
Или ты не о архитектурных решениях говоришь?

Да, я пожалуй не буду поступать некрасиво и отвертываться от ответа.
Нет у меня системы материалов на вулкане.

#12
(Правка: 5:25) 5:18, 17 дек. 2018

Great V.
> Вулкан это просто способ передавать нолики и единички на видеокарту и приказывать ей их рисовать.
как бы проблема в том, что способ передать видеокарте нолики и единички на вулкане для реализации, например, эффективной системы материалов оказывается не так-то очевиден. и не всегда понятно, как делать старые и, казалось бы, нехитрые операции вроде установки шейдерной константы, потому что это можно сделать десятью разными способами и вовсе не очевидно, какой из них предполагается использовать.

иногда наиболее эффективный способ работы с GAPI играет настолько существенную роль, что от него нужно строить всю архитектуру. а не наоборот, как это было раньше.
skalogryz
> первые шейдеры (2002-а года) выглядели так:
это практически и не поменялось. поменялась в основном работа с памятью. способ передачи данных в шейдеры (не в последнюю очередь используемый системой материалов) теперь лежит не на драйвере, а на программисте. потому что в более простых(для программиста) GAPI драйверу приходилось выполнять слишком много оверхедной работы, чтобы понять, как эффективнее всего организовать передачу данных. раньше ты когда рендерил в текстуру, например, потом мог из неё читать в шейдере, а под капотом OpenGL это означало неявный перевод внутреннего layout'а этой текстуры внутри памяти видеокарты. так как в вулкане все эти переводы делаются программистом руками, драйверу не надо пытаться угадать, когда и какие переводы осуществлять. всё это позволяет при правильном использовании более эффективно использовать аппаратные возможности, но приходит ценой усложнения GAPI, иногда значительного.

#13
(Правка: 6:11) 6:09, 17 дек. 2018

Suslik
> и не всегда понятно, как делать старые и, казалось бы, нехитрые операции вроде
> установки шейдерной константы, потому что это можно сделать десятью разными
> способами
Да, я это понимаю.

Но с моей точки зрения, если кто-то не париться производительностью - то он может взять первый же способ и сделать с помощью него.
Если же он париться производительностью - то тут ситуация такая же, как и во всех остальных АПИ.

Т.е. если делать как попало - то сложность низкая вне зависимости от АПИ. А если делать серьезно - то сложность высокая. Опять таки, вне зависимости от АПИ.

Но это имхо.

З.Ы. На счет нетривиальных вещей, то в том же OpenGL передачу инфы для инстансинга можно делать минимум пятью разными способами. Сейм щит.

#14
6:32, 17 дек. 2018

Suslik
> потому что это можно сделать десятью разными способами и вовсе не очевидно, какой из них предполагается использовать.
Это все микрооптимизации, тут либо читать рекомендации конкретных вендоров (и не факт что на других это не просадит производительность), либо перебирать все варианты в поисках самого быстрого, так если послушать презентации по портированию на вулкан на мобилках (на десктопе там всего пара игр, а сейчас интеловский драйвер вообще крэшится и всем похрен), то они пробовали разные варианты и рассказывают какой для них оказался быстрее.
Недавно была новость, что разработчики из самсунга оптимизировали рендер UE, вроде даже под какую-то игру. Получается даже в крупных кампаниях не осилили оптимизацию. И таких примеров много если поискать, еще была старая новость как разработчики из нвидиа делали тени в фолауте 3.

> но приходит ценой усложнения GAPI
Само GAPI усложнилось только за счет большего числа параметров, функции остались те же. Еще год назад можно было эмулировать вулкан через огл, сейчас там уже расширений добавили много.

Страницы: 1 2 37 8 Следующая »
ФлеймФорумПрограммирование