Доброе время суток всем!
Если вопрос сильно нубский, просьба не пинать по лицу и почкам ;)
Возник концептуальный затык.
Смысл такой: есть три сущности - меш, шейдер и рендер агент.
Рендер агент умеет рисовать меш - выставляет материал (в данном случае шейдер, т.е. говорит ему Apply), загоняет все, что нужно в VBO и т.д., меш хранит необходимую для шейдера инфу - например TBN, шейдер всю эту инфу съедает и рисует.
Но.
Как с т.з. архитектуры правильнее сделать передачу в шейдер per-vertex параметров?
В идеале меш о своем материале ничего знать не должен имхо.
Материалов вообще много разных - для ffp один, для обычного Фонга другой, для бампа третий...
Рендер агент к материалу привязывать тоже неохота.
Извините, что так путано, всем спасибо за внимание...
Вертекс формат для меша известен после выбора материала в редакторе. Здесь его лучше и сохранить, потому как менять его в рантайме ни к чему. Тут же лучше из толстого меша, экспортнутого из 3d пакета (у которого вершинный формат избыточный на все случаи жизни) сделать тонкий под текущий вертекс формат.
MiF
Возможно, я туплю, но мы, похоже, говорим на разных языках...
Пример.
Есть класс материала "GLSL-ный бамп". Он хочет TBN, и, соотвественно, делает у себя в конструкторе glGetAttribLocation.
Есть меш. У него унутре лежит TBN.
Есть агент. Он берет меш, и делает glVertexPointer/gNormalPointer/etc -> glDrawElements.
Теперь вопрос. Откуда рендер агент узнает, что ему надо сделать еще и glVertexAttribPointer? А ведь еще в шейдер нужно uniform'ы запихать...
Сделать что-то типа класса-контекста материала? И пусть материал говорит "хочу вот эту штуку, которая у объекта лежит вот здесь, и положи мне ее вот сюда"?
А, ты про GL.
Сделай например вещь, инкапсулирующую формат вершины. Наподобие vertex declaration в d3d9.
Храни ее в меше. Рендер агент возьмет ее оттуда и сделает нужные glXXXPointer.
Хорошая идея. Странно, что я до нее не додумался. Теперь надо придумать интерфейс формата вершин и две его реализации - под dx и gl.
Но общее направление я понял.
Пойду начну писать...
Спасибо!
Тема в архиве.