C++ OpenGL没有';当我有一个“t”时,我不会画画;“出去”;在顶点着色器中

C++ OpenGL没有';当我有一个“t”时,我不会画画;“出去”;在顶点着色器中,c++,visual-c++,opengl,glsl,C++,Visual C++,Opengl,Glsl,我有一个顶点着色器和一个片段着色器。我正在将缓冲区中的颜色变量发送到顶点着色器,然后尝试将其传递到片段着色器。当我的代码中有一个out vec4 out\u color时,不会绘制任何符号。我的代码是 "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;"

我有一个顶点着色器和一个片段着色器。我正在将缓冲区中的颜色变量发送到顶点着色器,然后尝试将其传递到片段着色器。当我的代码中有一个
out vec4 out\u color
时,不会绘制任何符号。我的代码是

"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";

有人能解释一下吗?

在着色器字符串中声明了
out\u color
之后,您忘记了换行符。因此,它与
void main()
位于同一行(其中还有一个换行符,但这可能不是问题)

为了清楚起见,我建议您始终为一行使用一个子字符串,并且始终在每个子字符串的末尾包含一个换行符,如果您确实希望在代码着色器代码中使用


您还应该始终检查着色器是否编译正确,程序链接是否正确,并查询信息日志,以防它们不正确。这会很明显地告诉您错误(或者至少会给您一个提示)。

结果是我使用了错误版本的着色语言 必须在两个着色器的顶部都包含代码

#version 140;

难道你不能从一个文件中加载它,而不是像那样把它放在一个字符串中吗?在任何情况下,着色器是否编译?不应该是
“out\u color=In\u color;”
?抱歉。我的代码中有什么颜色?尼科尔,是的,我可以,但这有什么不同吗?@James,没有,但这肯定会改进问题的格式。但别担心,他的问题是着色器是否编译并且程序链接是否正确,这一点更为重要。@James那么,请看我的最后一段,告诉我们信息日志上说了什么。信息中没有警告log@James您分别使用
GL\u COMPILE\u STATUS
GL\u LINK\u STATUS
查询和。@James和您确定片段着色器一种
in-vec4-out\u颜色?否则,这可能会导致链接错误。@James:The有完整的错误检查示例代码。