Opengl GLSL着色器不会影响渲染结果
我正在学习教程,刚刚开始绘制多边形。但我有一个问题:着色器源的内容并不重要。以下是相关代码: 主要条款c: vert.glsl: frag.glsl: 如您所见,代码与教程非常相似。但是,我是否使用行Opengl GLSL着色器不会影响渲染结果,opengl,graphics,shader,fragment-shader,vertex-shader,Opengl,Graphics,Shader,Fragment Shader,Vertex Shader,我正在学习教程,刚刚开始绘制多边形。但我有一个问题:着色器源的内容并不重要。以下是相关代码: 主要条款c: vert.glsl: frag.glsl: 如您所见,代码与教程非常相似。但是,我是否使用行outColor=vec4(1.0,1.0,1.0,1.0)或outColor=vec4(0.0,0.0,0.0,1.0)在片段着色器中,我始终获得以下输出: 只要着色器源代码编译,我就可以执行并得到这个结果。我甚至不需要返回任何东西,它仍然会呈现相同的效果。如果在vert着色器中添加或减去位置的
outColor=vec4(1.0,1.0,1.0,1.0)代码>或outColor=vec4(0.0,0.0,0.0,1.0)代码>在片段着色器中,我始终获得以下输出:
只要着色器源代码编译,我就可以执行并得到这个结果。我甚至不需要返回任何东西,它仍然会呈现相同的效果。如果在vert着色器中添加或减去位置
的x或y值,则得到相同的结果。如果我犯了语法错误,opengl尝试编译时程序就会崩溃,但编译什么似乎无关紧要
如果有帮助的话,我正在使用NVIDIA图形卡和NVIDIA驱动程序运行Debian<代码>glGetString(GL_版本)
返回“4.2.0 NVIDIA 304.117”。我正在使用freeglut作为渲染上下文。好的,结果是着色器编译中出现错误。我使用的是(location=#)
,但没有在我的着色器中包含#扩展GL#u ARB_explicit_attrib_location:enable
。我之前的一条评论指出了问题:
我怀疑您在创建或链接着色器时出错。您可以调用glGetShaderiv()以在这方面提供帮助
不如改为填充gl\u FragColor
?我没有零钱。也没有提到内置的gl\u FragColor
输出。我可以在glBegin()
(或等效)调用之前从InvokeglUseProgram()
查看内容。你在这样做吗?我怀疑你在创建或链接着色器时出错。您可以调用glGetShaderiv()
,在这方面为您提供帮助。
float vertices[] = {
0.0, 0.5,
0.5, -0.5,
-0.5, -0.5
};
GLuint vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
char *vertsource = loadsource("vert.glsl");
glShaderSource(vertexShader, 1, &vertsource, NULL);
free(vertsource);
glCompileShader(vertexShader);
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
char *fragsource = loadsource("frag.glsl");
glShaderSource(fragmentShader, 1, &fragsource, NULL);
free(fragsource);
glCompileShader(fragmentShader);
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
//Only necesary if multiple outputs:
//glBindFragDataLocation(shaderProgram, 0, "outColor");
glLinkProgram(shaderProgram);
glUseProgram(shaderProgram);
//0 is the position input for vert shader
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
#version 150
layout(location = 0) in vec2 position;
void main()
{
gl_Position = vec4(position, 0.0, 1.0);
}
#version 150
out vec4 outColor;
void main()
{
outColor = vec4(1.0, 1.0, 1.0, 1.0);
//Alternative line:
//outColor = vec4(0.0, 0.0, 0.0, 1.0);
}