На ваш вопрос нельзя ответить, так как он будет меняться в зависимости от реализации драйвера и т. Д. Однако факты и история функциональности должны быть информативными.
EXT_separate_shader_objects было первым воплощением этой функциональности. Самая большая разница между ними заключалась в следующем: вы не могли использовать пользовательские изменения в версии EXT. Вы должны были использовать старые входы/выходы совместимости, такие как gl_TexCoord
.
Issue #2 in the EXT_separate_shader_objects specification
попытки оправдать эту непонятную надзор
объясняет аргументирует это следующим образом:
Это нежелательно с точки зрения производительности, чтобы попытаться поддержать «Свидание по имени» для произвольных отдельных шейдеров, так как отдельные шейдеры не будут скомпилированы естественным образом для соответствия их различным входам и выходам с одинаковым именем без специального шага ссылки. Такая специальная ссылка приведет к дополнительным служебным накладкам для привязки отдельных шейдеров. Сама связь должна быть отложена до момента glBegin, поскольку отдельные шейдеры не будут совпадать при переходе от одного набора согласованных шейдеров к другому. Эта специальная ссылка все равно будет создавать ошибки или неопределенное поведение, если имена входных и выходных переменных совпадают, но их типы не совпадают.
Это говорит о том, что причина не полагаться на имя сопоставления
, помимо некомпетентности,
было связанных с производительностью (если вы не можете сказать, я не думаю, что очень высоко EXT_SSO). Выполнение «рандеву по имени» происходит от необходимости делать это при каждом призыве к призыву, а не в том, чтобы делать это один раз.
ARB_separate_shader_objects инкапсулирует коллекцию программ в объект. Следовательно, объект может хранить все данные «рандеву». Первый обратный вызов может быть медленнее, но последующее использование одного и того же PPO будет быстрым, если вы не присоединяете к нему новые программы.
Поэтому я хотел бы принять это как доказательство того, что у ПЗО должны быть установлены на них программы, а затем оставлены в покое. Как правило, следует избегать изменения объектов вложений. Вот почему вас поощряют не добавлять и не удалять текстуры/рендеринги из FBOs.
Вы измеряли оба? Кроме того, я думаю, вы должны хранить объекты Pipeline, потому что они относительно дешевы, нет? –
Я реализовал сегодня эту систему и не вижу ухудшения производительности.Но нужно видеть, влияет ли частое обновление объектов конвейера –