C++ 错误GLSL不正确的版本450

C++ 错误GLSL不正确的版本450,c++,opengl,glsl,glfw,glew,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, "fr

我有一个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;
下面是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'
我的规格如下:

  • 英特尔高清4000
  • Nvidia GeForce 840M

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

如注释中所述,问题似乎在于使用选定的
图形卡运行IDE的选项有误。当Windows默认集成英特尔HD 4000卡时,通过OS将英伟达卡切换到默认的首选卡,解决了问题。他们都支持GLSL版本450i无法找到英特尔卡的信息,但英伟达公司肯定支持GLSL 450。您是否尝试过使用Nvidia卡运行程序?(通常Windows默认为Intel one,因此请检查)它可能仍在使用Intel的图形卡。进入桌面,右键单击,选择NVIDIA控制面板,管理3D设置。现在从首选图形处理器中选择NVIDIA并重试。不管怎样,就像我说的,你的英特尔显卡支持这个着色器model@Asesh使用图形处理器运行的
选项工作不正常。你说得对。选择英伟达作为全球首选的工作。正如人们所说的,英特尔HD 4000支持OpenGL 4.5可能已经过时,因为我没有太多关注它们。HD 4000(常春藤桥)在windows上支持4.0,在linux上支持4.2。不支持4.5。
[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'