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

Убогость OpenGL API (4 стр)

Страницы: 13 4 5 639 Следующая »
#45
12:33, 3 июля 2012

=A=L=X=
> Вот прямо сейчас позырил еще на шейдерные *Program функции. =)
> Ужас какой.
> Create/Use/Compile/Bind/Attach, пипец...

Ты сегодня не с той ноги встал ? Постояно подливаешь масло в огонь :)

Где там ужас ?


#46
12:38, 3 июля 2012

=A=L=X=
> Create/Use/Compile/Bind/Attach
А что, делать glCreateProgramFromFile ? ;)

#47
12:41, 3 июля 2012

L.A.
> с ним удобней
Где с ним удобнее?
Не забыть бы glEnable(GL_TEXTURE_2D) позвать, а то малоли что...

#48
12:41, 3 июля 2012

innuendo
> Где там ужас ?

Да просто навскидку - CreateShader можно было бы совместь с ShaderSource. Даже пусть последняя остаётся, но в следующем виде:
glCreateShader( char *source ); // can be NULL, due to later ShaderSource invokation
У ShaderSource параметры - просто жуть, почему простого char *source // ASCIZ недостаточно - бог его знает, замут с указателями на указатели и даже укзателем на массив длин каждо строки - кому оно нужно?!
Одновременно с этим ShaderSource (и как следствие CreateShader) не вижу смысла разносить с ComileShader - пусть последней не будет, делает автоматом.
Т.е. там где сейчас надо вызвать 3 (три!) функции я вижу что достаточно одной.

Далее еще пляски с собственно ShaderProgram и Attach/Link/Detach, но тут пока приторможу с критикой, возможно действительно все шаги нужны, надо разобраться.

#49
12:42, 3 июля 2012

Такое ощущение, что нас троллят :)

#50
12:48, 3 июля 2012

=A=L=X=
> У ShaderSource параметры - просто жуть, почему простого char *source // ASCIZ
> недостаточно - бог его знает, замут с указателями на указатели и даже укзателем
> на массив длин каждо строки - кому оно нужно?!

а как же там гибкость и всё такое ? :)

> Далее еще пляски с собственно ShaderProgram и Attach/Link/Detach, но тут пока
> приторможу с критикой, возможно действительно все шаги нужны, надо разобраться.

Это ты ещё до тесселяции не дошёл, троллер :)


кстати, а чего Microsoft так долго тягомотилась с убогим winapi ? 

#51
12:48, 3 июля 2012

Blew_zc
> Где с ним удобнее?
если нет хорошей обертки над монструозными инициализирующими функциями из GL3 (а её нет), то практически везде.

#52
12:58, 3 июля 2012

L.A.
Неосилятор написать 10 строчек инициализации gl3 core profile ?
Хотя да, лень - двигатель прогресса. Глядишь, такими усилиями и правда появится glCreateDoomEngine()

#53
13:07, 3 июля 2012

Blew_zc
Ты про обертку над инициализацией контекста? Не смешно же :)

Конечно же речь про рендер. Посмотри сколько строк кода нужно для отрисовки одного треугольника в GL 3. Чтобы это всё было красиво нужна обертка.
Её нет и делать лень, это да.

#54
13:24, 3 июля 2012

L.A.
> с ним удобней. А разницы в качестве картинки нет, да и собсна откуда ей взяться
> та :)
Да ну! Десятки комбинация вызовов апи против нескольких строк в шейдере?? я так серьезно почистил код 2 рендеров (OpenGL/Direct3D 9) убрав альфа тест, хлам с матричными функциями, всякие glTexEnv, IDirect3DDevice9::SetTextureStageState и т.д.
Разница есть в производительности. При FFP runtime/Driver проверяет выставленные параметры и подставляет соответствующие шейдеры или ставит внутри переходы(зависит от реализации)
т.е. толще вызовы.
=A=L=X=
> Ужас какой.
> Create/Use/Compile/Bind/Attach, пипец...
Да тут насчет убогости GLSL я согласен. Плохо что совместили в программу 2 шейдера, плохо что нету групповой передачи параметров. Естественно речь идет про OpenGL 2.1 вот на Play Station 3 нету GLSL и не спроста там Cg ну и передача к примеру через cellGcmSetVertexProgramParameterBlock будет шустрее чем  куча вызовов glUniform*.

#55
13:26, 3 июля 2012

Blew_zc
> Такое ощущение, что нас троллят :)

Это лишь частично правда.
Исторически недовольство OpenGL-ной моделью к организации своего API я испытывал с первого дня когда им занялся. Как раз как любой новичок напарывался много раз на "путаницу" рендер-стейтов. Даже в своё время это коробило. Однако было это давно и в то время я так же успел обмазаться D3D 7-ой по моему версии - и надо сказать что D3D всё равно выглядел тяжеловеснее, неповоротливее и в разы больше кода требовал писать. Поэтому тогда это недовольство своё я успешно запихивал в потаёные места.

Если зайти в мой профиль и посмотреть созданные темы то можно без труда найти что буквально пару месяцев назад я создал тему о том что хотел бы вернуться к экспериментам с 3D графикой и просил подмочь с выбором литературы. Выбор мой пал на OpenGL 3.x/4.x. И ох, начал вникать в примеры (в свободное время конечно же) и блин тяжко, тяжко. Первый же пример выводящий один треугольник даже при наличии сторонней либы работающей с матричной математикой заставлял меня неиллюзорно напрягать внимательность отслеживая где и какой BindBuffer был вызван и с какой целью - залить ли в него данные или ренедерить. Буквально в уме рисовал диаграммки с кубиками и стрелками между ними чтобы закрепить материал.
Тяжкая входимость стала, тяжкая. Я в принципе был готов к этому, т.к. безальтернативная шейдерность конечно предполагает что код инициализации - в разы больше старой модели, но чехарда вот этих BindBuffer, AtribPointer, UseProgram, LinkShader плохо своими именами выражающими то что мы называем "самодокументируемость" - это конечно вызывает глухое раздражение.

Поэтому тему честно завел почти без подвохов, и innuendo даже видел в какой момент.

#56
13:29, 3 июля 2012

Andrey
> Да ну! Десятки комбинация вызовов апи против нескольких строк в шейдере??

тут вопрос спорный, смотря на что смотреть :)

> > Ужас какой.
> > Create/Use/Compile/Bind/Attach, пипец...
> Да тут насчет убогости GLSL я согласен. Плохо что совместили в программу 2
> шейдера, плохо что нету групповой передачи параметров. Естественно речь идет
> про OpenGL 2.1 вот на Play Station 3 нету GLSL и не спроста там Cg ну и
> передача к примеру через cellGcmSetVertexProgramParameterBlock будет шустрее
> чем куча вызовов glUniform*.

ты реально напалмом поливаешь - чем плохо то, что совместили программу  ? а в DX11 ручками 5 вызовов делать лучше вместо одного ?

>плохо что нету групповой передачи параметров

ну сколько же можно, а ? ну сделано там не много не так как в DX - но есть же способ оптимизации ... зачем кстати, сделали возможным передавать часть регистров в DX9 ?

> вот на Play Station 3 нету GLSL и не спроста там Cg

неспроста на всяких яблочниках нету Cg ( он, конечно есть :)  ) и есть glsl ?

> ну и передача к примеру через cellGcmSetVertexProgramParameterBlock будет
> шустрее чем куча вызовов glUniform*.

зачем куча ? неужеле не понятно как можно сделать в glsl ? в RAGE так и сделано

#57
13:32, 3 июля 2012

=A=L=X=
> Как раз как любой новичок напарывался много раз на "путаницу" рендер-стейтов

каких например ? :)

#58
13:37, 3 июля 2012

innuendo
> где тут старые и новые фичи ?

Dependencies on ARB_compatibility

    When the ARB_compatibility extension is not supported, client arrays
    cannot be used to source vertex attribute data.

Так же читаешь спеки, то что оранжевым для компатибл профиля.

> ты говоришь аля DX11 стайл - банальный пример: есть железка ( не NV и AMD ), там есть indirect и нету instance ?

Не понял.

L.A.
> то есть сейчас вендору приходится реализовывать, скажем работу тесселяции под
> glBegin/End, DL, VA, VBO, VBO+VAO ?

В общем случае думаю да. Если говорить конкретно о способе отправки вершин на рендер и тесселяцию, то вряд ли там есть какая-то связь. Это был утрированный пример.
Вот например в коре профиле нельзя линию шириной больше 1, а это значит, что в дровах уже ставится проверка аля:
if (lineWidth > 1 && coreProfile)
  error
else
  ok;

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

> А вот если используется только функционал GL 2.1, нужно ли принудительно ставить контекст 2.1 ?

Нет.

> А то сейчас пишет 4.1, а как видно из постов в этой теме и еще какого то чела
> из NV, который кстати говорил что GL3 может работать даже медленнее чем GL2

Не знаю о чём речь.

> в некоторых случаях, что смешивание FFP и GL3+ в режиме совместимости нежелательно

Согласен.

innuendo
> неспроста на всяких яблочниках нету Cg ( он, конечно есть :)  ) и есть glsl ?

Неспроста на яблоках GLES, который намного чище своего старшего брата. :)

#59
13:42, 3 июля 2012

Executor
> где тут старые и новые фичи ?
> Dependencies on ARB_compatibility
> When the ARB_compatibility extension is not supported, client arrays
> cannot be used to source vertex attribute data.

нет, ну я не знаю как тут быть прям, да, есть core и профили - да, там по разному есть фичи  - как реализуется в драйвере я не в курсе

> > ты говоришь аля DX11 стайл - банальный пример: есть железка ( не NV и AMD ),
> > там есть indirect и нету instance ?
> Не понял.

сделали железку ( какой-нибудь там новый PowerVX ), там нету инстансинга, но есть индирект дро - как писать драйвер без учёта зависимостей ?

Executor
> > неспроста на всяких яблочниках нету Cg ( он, конечно есть :) ) и есть glsl
> > ?
> Неспроста на яблоках GLES, который намного чище своего старшего брата. :)

да, но регистры то не приделали :)
естественно, что далеко не всем нужно всё что было в glsl 1.0

Страницы: 13 4 5 639 Следующая »
ФлеймФорумПрограммирование