OpenGL не рисует, когда у меня есть "out" в вершинном шейдере - PullRequest
0 голосов
/ 14 октября 2011

У меня есть вершинный шейдер и фрагментный шейдер. Я посылаю переменную цвета в буфере вершинному шейдеру, а затем пытаюсь передать ее фрагментному шейдеру. Когда в моем коде есть out vec4 out_color, рисуется nothign. Мой код

"in vec4 in_position;\n"
"in vec4 in_color;\n"
"out vec4 out_color;"
"void\nmain()\n"
"{\n"
"  gl_Position = in_position;\n"
"out_color = in_color;"
"}\n\n";

Кто-нибудь может пролить свет на это?

Ответы [ 2 ]

1 голос
/ 15 октября 2011

Вы забыли перевод строки после объявления out_color в вашей строке шейдера. Таким образом, он находится на той же строке, что и void main() (в которой у вас также есть символ новой строки, но это не может быть проблемой).

Для ясности я бы предложил вам всегда использовать одну подстроку для одной строки и всегда включать символ новой строки в конце каждой подстроки, если вы действительно хотите использовать кодировочный код в шейдере в любом случае.

И вы также должны всегда проверять, правильно ли скомпилированы ваши шейдеры и правильно ли связана программа, и запрашивать информационный журнал, если они этого не сделали. Это, очевидно, сообщило бы вам об ошибке (или, по крайней мере, подсказало бы вам).

0 голосов
/ 15 октября 2011

Оказывается, я использовал неправильную версию языка затенения Вы должны включить код в верхней части обоих шейдеров

#version 140;
...