Есть ли преимущество использования glGetProgramResourceLocation вместо glGetUniformLocation? - PullRequest
0 голосов
/ 03 октября 2018

Когда я смотрел на спецификацию OpenGL 4.5, я заметил, что вы можете узнать местонахождение униформы, позвонив по телефону:

glGetProgramResourceLocation(program, GL_UNIFORM, name);

Что очень похоже на:

glGetUniformLocation(program, name);

Мне было интересноесли есть какое-либо преимущество использования первого вместо второго.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

API-интерфейсы самоанализа программы OpenGL были разработаны не очень хорошо.Они выросли полуорганически из оригинального предложения 3DLabs GLSL.Но исходный дизайн был основан на запросе только атрибутов / единообразных расположений и единообразных ресурсов.

По мере роста GLSL добавлялось много других видов ресурсов: UBO, подпрограммы шейдеров, SSBO идругие.Кроме того, люди поняли, что запрос выходных переменных фрагментного шейдера также был полезен.

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

общая система самоанализа программы *1012* может запрашивать все, что старые запросы могли делать .И спецификация переопределяет старые запросы в терминах новой общей системы.Но теперь, когда вы добавляете новый ресурс в OpenGL, вам нужно только добавить несколько новых перечислителей к существующим общим запросам, а не целые функции API.

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

0 голосов
/ 03 октября 2018

Первое эквивалентно последнему.

См. Спецификация профиля ядра API OpenGL 4.6;7,6.ЕДИНЫЕ ПЕРЕМЕННЫЕ;стр. 134 :

Кроме того, для запроса свойств активных униформ предоставляется несколько выделенных команд.Команда

int GetUniformLocation( uint program, const char *name );

эквивалентна

GetProgramResourceLocation(program, UNIFORM, name);  
...