标识符“ in”未定义

我有一个使用以下代码制作的Shader.h文件:

#include <GL\GL.h>
#include <GL/freeglut.h>
#include <glm/glm.hpp>
#include <GL/glew.h>

in vec2 TexCoords;
out vec4 color;

uniform sampler2D text;
uniform vec3 textColor;

void main() {
    vec4 sampled = vec4(1.0,1.0,texture(text,TexCoords).r);
    color = vec4(textColor,1.0) * sampled;
}

问题是我收到in vec2 TexCoords;的错误消息,说“ in”是未定义的。我不确定这是否在库中以及如何在此头文件中正确使用它。我正在寻找一个教程来从LearnOpengl网站绘制文本:https://learnopengl.com/In-Practice/Text-Rendering

任何人都可以告诉我要使其正常工作需要包含哪些标题/库或我做错了什么

fangchengkuan 回答:标识符“ in”未定义

这里有一些问题。

  1. 您正在混合使用C ++和GLSL

  2. 您缺少定义所使用的GLSL版本的行。 (GLSL的第一个版本不支持'in'关键字)。

  3. 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

大家都在问