Ошибка компиляции шейдера при запуске исполняемого файла - PullRequest
0 голосов
/ 04 августа 2020

Мой код OpenGl создается и запускается без ошибок в Visual Studio 2019 в режиме отладки.

Когда я запускаю исполняемый файл из выходного каталога, я получаю следующие ошибки в консоли, но приложение работает как будто ошибок не произошло (все текстуры, униформа, события работают должным образом):

SHADER_ID_COMPILE error has been generated. GLSL compile failed for shader 5, "":
Failed to compile: 35633

Я также получаю несколько ошибок униформ и отрисовки, которые, как я полагаю, являются следствием сбоя компиляции шейдера.

Я использовал абсолютные пути для своих путей шейдера.

Код компиляции шейдера:

Shader(const std::string& vertexShaderPath, const std::string& fragmentShaderPath)
        : m_id(glCreateProgram())
    {
        const GLuint vs = CompileShader(GL_VERTEX_SHADER, getShaderSource(vertexShaderPath));
        const GLuint fs = CompileShader(GL_FRAGMENT_SHADER, getShaderSource(fragmentShaderPath));

        glAttachShader(m_id, vs);
        glAttachShader(m_id, fs);

        glLinkProgram(m_id);
        glValidateProgram(m_id);

        glDeleteShader(vs);
        glDeleteShader(fs);
    }

Функция CompileShader:

unsigned int CompileShader(GLenum type, const std::string& source)
    {
        GLuint shader = glCreateShader(type);
        const GLchar* src = source.c_str();
        glShaderSource(shader, 1, &src, nullptr);
        glCompileShader(shader);
        return shader;
    }

1 Ответ

0 голосов
/ 10 августа 2020

попробуйте использовать этот код, чтобы предоставить нам больше информации об ошибке, а также помочь себе в случае будущих ошибок компиляции шейдера

            GLint result = GL_FALSE ;
            int logLength ;
            glCompileShader ( SHADER_ID ) ;

            // Check vertex shader

            glGetShaderiv ( SHADER_ID  , GL_COMPILE_STATUS , &result );
            glGetShaderiv ( SHADER_ID  , GL_INFO_LOG_LENGTH , &logLength );
            GLchar *shaderError = new GLchar [ ( logLength > 1 ) ? logLength : 1 ] ;
            glGetShaderInfoLog ( SHADER_ID   , logLength , NULL , shaderError );
            if ( logLength ) printf ( "Compiling Shader Error : \n%s\n" , shaderError ) ;

используйте его для каждого шейдера (вершина, фрагмент, [геометрия]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...