Я хочу, чтобы некоторые объекты, используя шейдер.Я называю эти объекты obj_1, obj_2, ... obj_n.
Данные одного объекта хранятся в одном vbo.Я называю эти vbos vbo_1, vbo_2, ... vbo_n.
Мне нужно использовать вершинный шейдер, геометрический шейдер и фрагментный шейдер для каждого объекта.
Все вершинные шейдеры просто кратны вершине с матрицей viewview модели.
Все фрагменты шейдера просто устанавливают цвет.
Однако каждый геометрический шейдер отличается.
Вот мой план A:
Я создаю одну программу.Вершинный шейдер имеет единую переменную с именем ModelViewProjection.Фрагментный шейдер имеет равномерную переменную с именем color.
В цикле всех объектов я установил равномерную переменную ModelViewProjection вершинного шейдера и установил единую переменную цвета шейдерного фрагмента.
Затем измените геометрический шейдер, используя соответствующий код GLSL.
Однако я не могу найти способ заменить геометрический шейдер в программе при неизменном изменении вершинного шейдера и фрагментного шейдера.
Итак, у меня есть план B:
Я создаю много программ, столько же, сколько объектов.Это возможно.Однако это означает, что шейдер varialbe и фрагментный шейдер повторяется столько же, сколько и количество объектов.Это пустая трата пространства, и ее трудно расширить.
Так что мой вопрос: есть ли план C для моего случая?Или что есть способ изменить геометрию шейдера в программе?