Я пытаюсь реализовать проекцию, используя вершинный шейдер.
Есть ли способ иметь отдельный вершинный шейдер для обработки набора gl_Position и иметь другой вершинный шейдер для установки значений, необходимых дляфрагментный шейдер?
У меня проблема в том, что вызывается только функция main () первого вершинного шейдера.
Редактировать: я нашел способ заставить его работать, комбинируя шейдерисходники вместо использования нескольких независимых шейдеров.Я не уверен, что это лучший способ сделать это, но, похоже, он хорошо работает.
main_shader.vsh
attribute vec4 src_color;
varying vec4 dst_color; // forward declaration
void transform(void);
void main(void)
{
dst_color = src_color;
transform();
}
transform_2d.vsh
attribute vec4 position;
void transform(void)
{
gl_Position = position;
}
Тогда используйте это так:
char merged[2048];
strcat(merged, main_shader_src);
strcat(merged, transform_shader_src);
// create and compile shader with merged as source