Как следует писать современные шейдеры OpenGL, чтобы они были совместимы с друг друга?

В модных новых версиях OpenGL (3.0 и 4.0 и выше), встроенные атрибуты вершин, такие как gl_Vertex, устарели . «Новый способ» фактически отрисовать что-либо - это указать ваши собственные атрибуты вершин для положения, цвета и т. Д., А затем привязать эти настраиваемые атрибуты к буферам.

Мой вопрос таков: как сделать это без тесной связи кода рендеринга и шейдера? Если я напишу шейдер, который использует «позицию» в качестве позиции вершины, код хоста, использующий шейдер, должен это знать и передавать данные вершины как «позицию». Если я хочу использовать другой шейдер, который был написан для приема данных вершин в «vertex_pos», мне нужно либо сначала переписать этот шейдер, либо изменить код хоста, чтобы вместо этого отправлять данные вершин как «vertex_pos».

набор рекомендуемых имён для стандартных атрибутов вершин и фрагментов, которые должны использовать все шейдеры? Или существуют балканизированные стандарты, специфичные для движка, такие, что шейдер, написанный для одного движка, не может работать на другом без изменений? Или вообще нет стандартов, таких, что вообще каждому объекту нужен свой собственный код рендеринга, соответствующий его пользовательскому шейдеру?

6
задан interfect 12 January 2011 в 05:50
поделиться