glCompileShader 状态为 false 但日志为空

Jac*_*aks 5 c++ opengl

当我为顶点着色器调用 glCompileShader() 并使用 glGetShaderiv 获取状态时,它返回 false。但是当我查看日志时,它是空的。我是着色器新手,所以我确信我做错了什么。这是我的代码:

void GLSLProgram::compileShader(const std::string& filePath, GLuint id)
{
    /*Shader Program Reading*/
    //don't worry about this \/, it just loads my shader program from the file.
    std::string shader = gdcUtil::implode(gdcFile::readBlock(filePath, 0, 0, '\n', 0, true), true);

    const char* shaderPtr = shader.c_str();

    /*Shader Source Refering*/
    glShaderSource(id, 1, &shaderPtr, nullptr);

    /*Shader Compiling*/
    glCompileShader(id);
    GLint success = 0;
    glGetShaderiv(id, GL_COMPILE_STATUS, &success);
    if (success == GL_FALSE) {
        //Setup Error Log
        GLint maxLength = 0;
        glGetShaderiv(id, GL_INFO_LOG_LENGTH, &maxLength);
        std::vector<char> errorLog(maxLength);
        glGetShaderInfoLog(id, maxLength, &maxLength, &errorLog[0]);
        std::string log;
        for (int i = 0; i < errorLog.size(); i++) {
            log += errorLog[i];
        }
        gdcUtil::error(log, "GD_GLSL");
        glDeleteShader(id);
        gdcUtil::quit();
    }
}
Run Code Online (Sandbox Code Playgroud)

顶点着色器程序:

#version 130

in vec2 vertexPosition;

void main() {
    gl_Position.xy = vertexPosition;
    gl_Position.z = 0.0;
    gl_Position.w = 1.0;
}
Run Code Online (Sandbox Code Playgroud)

我知道它正确加载着色器程序,只是在编译时失败。

编辑:这是调用compileShader的代码

//Create Shaders
_vertID = glCreateShader(GL_VERTEX_SHADER);
bool shaderValid = glIsShader(_vertID);
if (_vertID = 0) {
    gdcUtil::error("Could not create Vertex Shader", "GD_GLSL");
    gdcUtil::quit();
}
_fragID = glCreateShader(GL_FRAGMENT_SHADER);
if (_fragID = 0) {
    gdcUtil::error("Could not create Fragment Shader", "GD_GLSL");
    gdcUtil::quit();
}

//Compile Shaders
compileShader(vertFilePath, _vertID);
compileShader(fragFilePath, _fragID);
Run Code Online (Sandbox Code Playgroud)