赋值中的类型(vec4和vec3)不兼容

时间:2017-08-20 21:19:58

标签: c++ opengl glsl

我一直在学习OpenGl,还有“GLSL”。 目前我在尝试编译片段着色器时遇到错误:

  

分配中不兼容的类型(vec4和vec3)(并且没有可用的隐式转换)

有人可以帮我理解并解决此错误吗? 代码如下:

#version 330 core
in vec3 ourColor;
in vec2 TexCoord;

out vec4 color;

// Texture samplers
uniform sampler2D ourTexture1;

void main() {
    // Linearly interpolate between both textures (second texture is only slightly combined)
    color = texture(ourTexture1, TexCoord);
}

谢谢。

编辑: 这是我的着色器编译器:

class shaders_shader
{
public:
    GLuint Program;
    // Constructor generates the shader on the fly
    shaders_shader( const GLchar *vertexPath, const GLchar *fragmentPath )
    {
    // 1. Retrieve the vertex/fragment source code from filePath
    std::string vertexCode;
    std::string fragmentCode;
    std::ifstream vShaderFile;
    std::ifstream fShaderFile;
    // ensures ifstream objects can throw exceptions:
    vShaderFile.exceptions ( std::ifstream::badbit );
    fShaderFile.exceptions ( std::ifstream::badbit );
    try
    {
        // Open files
        vShaderFile.open( vertexPath );
        fShaderFile.open( fragmentPath );
        std::stringstream vShaderStream, fShaderStream;
        // Read file's buffer contents into streams
        vShaderStream << vShaderFile.rdbuf( );
        fShaderStream << fShaderFile.rdbuf( );
        // close file handlers
        vShaderFile.close( );
        fShaderFile.close( );
        // Convert stream into string
        vertexCode = vShaderStream.str( );
        fragmentCode = fShaderStream.str( );
    }
    catch ( std::ifstream::failure e )
    {
        std::cout << "ERROR::SHADER::FILE_NOT_SUCCESFULLY_READ" << std::endl;
    }
    const GLchar *vShaderCode = vertexCode.c_str( );
    const GLchar *fShaderCode = fragmentCode.c_str( );
    // 2. Compile shaders
    GLuint vertex, fragment;
    GLint success;
    GLchar infoLog[512];
    // Vertex Shader
    vertex = glCreateShader( GL_VERTEX_SHADER );
    glShaderSource( vertex, 1, &vShaderCode, NULL );
    glCompileShader( vertex );
    // Print compile errors if any
    glGetShaderiv( vertex, GL_COMPILE_STATUS, &success );
    if ( !success )
    {
        glGetShaderInfoLog( vertex, 512, NULL, infoLog );
        std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
    }
    // Fragment Shader
    fragment = glCreateShader( GL_FRAGMENT_SHADER );
    glShaderSource( fragment, 1, &fShaderCode, NULL );
    glCompileShader( fragment );
    // Print compile errors if any
    glGetShaderiv( fragment, GL_COMPILE_STATUS, &success );
    if ( !success )
    {
        glGetShaderInfoLog( fragment, 512, NULL, infoLog );
        std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;
    }
    // Shader Program
    this->Program = glCreateProgram( );
    glAttachShader( this->Program, vertex );
    glAttachShader( this->Program, fragment );
    glLinkProgram( this->Program );
    // Print linking errors if any
    glGetProgramiv( this->Program, GL_LINK_STATUS, &success );
    if (!success)
    {
        glGetProgramInfoLog( this->Program, 512, NULL, infoLog );
        std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;
    }
    // Delete the shaders as they're linked into our program now and no longer necessery
    glDeleteShader( vertex );
    glDeleteShader( fragment );

}
// Uses the current shader
void Use( )
{
    glUseProgram( this->Program );
}
};

0 个答案:

没有答案