Мой геометрический шейдер точно такой же, как тот, что указан на этой странице
Да, но ваши бесплатные вершинные и фрагментные шейдеры не .
Информация проходит через конвейер OpenGL следующим образом: во-первых, вершинный шейдер получает данные. Он передает свои выходные данные в геометрический шейдер, если он присутствует. Геометрический шейдер передает свои выходные данные фрагментному шейдеру (конечно, после обычного растеризации треугольника). И фрагментный шейдер передает свои выходные данные на стадию смешивания.
Ваш вершинный шейдер имеет два выхода: gl_Position
и vertexColor
. Однако ваш геометрический шейдер принимает только один ввод: gl_in[0].gl_Position
. Это недопустимо в GLSL: если один этап выводит значение, следующий этап должен ввести его. Единственными исключениями являются значения, определенные GLSL, такие как gl_Position
, который используется растеризатором.
Ваш транзитный GS должен на самом деле передавать данные через , если вы хотите, чтобы они были сквозными. Вам нужно правильно ввести данные в GS:
in vec4 vertexColor[];
Однако глобальные переменные в GLSL нельзя называть одинаковыми. Таким образом, вы не можете взять vertexColor
в качестве входа и в качестве выхода. Поэтому вместо этого вы должны изменить имя вывода (или использовать интерфейсные блоки ):
out vec4 gsColor;
Ваш фрагментный шейдер должен теперь взять in vec4 gsColor;
и работать с этим.
Когда вы пытались связать эти шейдеры, ваш компилятор должен был предоставить вам соответствующий информационный журнал, объясняющий несоответствие. Получаете ли вы ваши информационные журналы, когда ваши шейдеры не связываются? Если нет, вам следует.