这里有一些问题。
-
您正在混合使用C ++和GLSL
-
您缺少定义所使用的GLSL版本的行。 (GLSL的第一个版本不支持'in'关键字)。
-
texture()不是GLSL命令,您可能正在寻找texture2D?
您的着色器应如下所示:
// Use GLSL 4.5
#version 450
in vec2 TexCoords;
out vec4 color;
uniform sampler2D text;
uniform vec3 textColor;
void main() {
vec4 sampled = vec4(1.0,1.0,texture2D(text,TexCoords).r);
color = vec4(textColor,1.0) * sampled;
}
另外,您需要编写C ++代码来定义几何形状,指定缓冲区并编译着色器。
,
不是标题是问题。您那里的代码是用OpenGL编程语言(glsl)编写的。因此,为了将它们传递给您的着色器程序。该特定部分的代码应通过字符串传递到Shader.h文件。您想将片段着色器和顶点着色器的代码放在2个单独的文件中,然后通过字符串将其传递给着色器程序。然后,您可以从文件中直接将代码读取到着色器中。像这样:
ShadingProgram::ShadingProgram(std::string vp,std::string fp)
{
std::string shader;
GLuint shader_id;
const GLchar *source;
_program = glCreateProgram();
shader = GetShaderCode(vp);
shader_id = glCreateShader(GL_VERTEX_SHADER);
source = shader.c_str();
glShaderSource(shader_id,1,&source,nullptr);
glCompileShader(shader_id);
CheckCompilation(shader_id,vp);
glAttachShader(_program,shader_id);
shader = GetShaderCode(fp);
shader_id = glCreateShader(GL_FRAGMENT_SHADER);
source = shader.c_str();
glShaderSource(shader_id,fp);
glAttachShader(_program,shader_id);
glLinkProgram(_program);
CheckLinking();
}
请注意,在learningopengl教程中,它们如何具有多个文件和完整的源代码供您查看。
或者,使用此示例将glsl代码作为字符串直接写入程序。
https://learnopengl.com/code_viewer_gh.php?code=src/1.getting_started/2.2.hello_triangle_indexed/hello_triangle_indexed.cpp
本文链接:https://www.f2er.com/3168988.html