错误GLSL错误版本450

时间:2017-09-06 10:48:40

标签: c++ opengl glsl glfw glew

我有一个我过去编译过的OpenGL应用程序但现在不能在同一台机器上。问题似乎是碎片着色器没有正确编译。

我正在使用:

  • Glew 2.1.0
  • Glfw 3.2.1

此外,所有必要的上下文都是在程序开头创建的。这是我的程序创建功能的样子:

std::string vSource, fSource;
try 
{
    vSource = getSource(vertexShader, "vert");
    fSource = getSource(fragmentShader, "frag");
}
catch (std::runtime_error& e)
{
    std::cout << e.what() << std::endl;
}

GLuint vsID, fsID;
try
{
    vsID = compileShader(vSource.c_str(), GL_VERTEX_SHADER); //Source char* was checked and looking good
    fsID = compileShader(fSource.c_str(), GL_FRAGMENT_SHADER);
}
catch (std::runtime_error& e)
{
    std::cout << e.what() << std::endl; //incorrect glsl version 450 thrown here
}
GLuint programID;
try
{
    programID = createProgram(vsID, fsID); //Debugging fails here
}
catch (std::runtime_error& e)
{
    std::cout << e.what() << std::endl;
}

glDeleteShader(vsID);
glDeleteShader(fsID);

return programID;

我的主要人物:

/* ---------------------------- */
/* OPENGL CONTEXT SET WITH GLEW */
/* ---------------------------- */
static bool contextFlag = initializer::createContext(vmath::uvec2(1280, 720), "mWs", window);
std::thread* checkerThread = new std::thread(initializer::checkContext, contextFlag);

/* --------------------------------- */
/* STATIC STATE SINGLETON DEFINITION */
/* --------------------------------- */
Playing Playing::playingState; //Failing comes from here which tries to create a program



/* ---- */
/* MAIN */
/* ---- */
int main(int argc, char** argv)
{
    checkerThread->join();
    delete checkerThread;

    Application* app = new Application();
    ...
    return 0;
}

以下是fragmentShader文件的示例:

#version 450 core

out vec4 fColor;

void main()
{
    fColor = vec4(0.5, 0.4, 0.8, 1.0);
}

这就是我所看到的错误:

[Engine] Glew initialized! Using version: 2.1.0
[CheckerThread] Glew state flagged as correct! Proceeding to mainthread!

Error compiling shader: ERROR: 0:1: '' :  incorrect GLSL version: 450
ERROR: 0:7: 'fColor' : undeclared identifier
ERROR: 0:7: 'assign' :  cannot convert from 'const 4-component vector of float' to 'float'

我的规格如下:

  • Intel HD 4000
  • Nvidia GeForce 840M

我将说明我之前在同一台机器上编译了着色器。磁盘格式化后,我再也无法做到了。但是,每个驱动程序都会更新。

1 个答案:

答案 0 :(得分:1)

正如评论中所述,问题似乎是运行带有选定graphics card的IDE的错误选项。由于Windows默认使用集成的Intel HD 4000卡,因此操作系统将NVIDIA卡切换为默认的首选卡可以解决问题。