Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 着色器中的编译错误_C++_Opengl_Glsl_Shader - Fatal编程技术网

C++ 着色器中的编译错误

C++ 着色器中的编译错误,c++,opengl,glsl,shader,C++,Opengl,Glsl,Shader,您好,我正在编写一个使用着色器的程序,在编译着色器时遇到一些错误。下面是我的着色器字符串 const GLchar* vertexShaderCode = \ "#verison 140 \n" \ "in vec4 a_Position; \n" \ "uniform mat

您好,我正在编写一个使用着色器的程序,在编译着色器时遇到一些错误。下面是我的着色器字符串

const GLchar* vertexShaderCode =                               \
    "#verison 140                                      \n" \
    "in vec4 a_Position;                               \n" \
    "uniform   mat4 u_MVPMatrix;                       \n" \
    "void main()                                       \n" \
    "{                                                 \n" \
    "    gl_Position = u_MVPMatrix * a_Position;       \n" \
    "}                                                   ";\

const GLchar* fragmentShaderCode =                             \
    "#verison 140                                      \n" \
    "uniform vec4 u_Color;                             \n" \
    "out vec4 fragmentColor;                           \n" \
    "void main()                                       \n" \
    " {                                                \n" \
    "  fragmentColor = u_Color;                        \n" \
    " }      
下面是我加载初始化着色器对象的代码

GLuint MtShader::LoadShader(int type, const GLchar* shaderCode)
{
    GLuint shader = glCreateShader(type);

    // Add the source code to the shader and compile it
    glShaderSource(shader, 1, &shaderCode, NULL);
    glCompileShader(shader);

    GLint  compiled;
    glGetShaderiv( shader, GL_COMPILE_STATUS, &compiled );
    if ( !compiled ) {
        std::cerr << " failed to compile:" << std::endl;
        GLint  logSize;
        glGetShaderiv( shader, GL_INFO_LOG_LENGTH, &logSize );
        char* logMsg = new char[logSize];
        glGetShaderInfoLog( shader, logSize, NULL, logMsg );
        std::cerr << logMsg << std::endl;
        delete [] logMsg;

        exit( EXIT_FAILURE );
    }

    return shader;
}


void MtShader::CompileShader(const GLchar* vertexShaderCode, const GLchar* fragmentShaderCode)
{
    // Load the shaders.
    int vertexShader      = LoadShader(GL_VERTEX_SHADER,   vertexShaderCode);
    int fragmentShader    = LoadShader(GL_FRAGMENT_SHADER, fragmentShaderCode);

    // Create the program.
    m_Program = glCreateProgram();             // Create empty shader Program.
    glAttachShader(m_Program, vertexShader);   // Add the vertex shader to program.
    glAttachShader(m_Program, fragmentShader); // Add the fragment shader to program.
    glLinkProgram (m_Program);                 // links the shader program.

    GLint  linked;
    glGetProgramiv( m_Program, GL_LINK_STATUS, &linked );
    if ( !linked ) {
        std::cerr << "Shader program failed to link" << std::endl;
        GLint  logSize;
        glGetProgramiv( m_Program, GL_INFO_LOG_LENGTH, &logSize);
        char* logMsg = new char[logSize];
        glGetProgramInfoLog( m_Program, logSize, NULL, logMsg );
        std::cerr << logMsg << std::endl;
        delete [] logMsg;

        exit( EXIT_FAILURE );
    }

    glUseProgram(m_Program);
}

另外,我正在创建opengl 3.1上下文。有什么帮助吗???

请在着色器第一行中尝试版本310您在着色器中编写了Verison not version,这可能没有帮助。@AdamMiles:这很有帮助。抱歉问这么愚蠢的问题question@keksnicoh:没有。GL 3.3之前的GLSL版本都很奇怪;他们。GLSL 1.40确实与GL3.1相匹配。@Nicol Bolas:在OpenGL上学习总是新的有趣的东西,谢谢!
ERROR: 0:1: '' :   Invalid Directive verison
ERROR: 0:1: '' : syntax error: unexpected tokens following preprocessor directive - expected a newline
ERROR: 0:6: 'u_MVPMatrix' : undeclared identifier 
ERROR: 0:6: 'a_Position' : undeclared identifier 
ERROR: 0:6: 'assign' :  cannot convert from 'float' to 'Position 4-component vector of float'