错误 GLSL 版本不正确 450
Posted
技术标签:
【中文标题】错误 GLSL 版本不正确 450【英文标题】:Error GLSL incorrect version 450 【发布时间】:2017-09-06 10:48:40 【问题描述】:我有一个过去编译的 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'
我的规格如下:
英特尔高清 4000 英伟达 GeForce 840M我将声明我之前在同一台机器上编译过着色器。磁盘格式化后我不能再这样做了。但是,每个驱动程序都会更新。
【问题讨论】:
您确定您的图形驱动程序是最新的吗?它们都支持 GLSL 版本 450 我找不到 Intel 卡的信息,但 Nvidia 肯定应该支持 GLSL 450。你试过用你的 Nvidia 卡运行你的程序吗? (通常 Windows 默认为 Intel 的,所以检查一下) 它可能仍在使用英特尔的显卡。转到桌面,右键单击,选择 NVIDIA 控制面板,管理 3D 设置。现在从首选的图形处理器中选择 NVIDIA 并重试。无论如何,就像我说的那样,您的英特尔显卡支持该着色器模型 @Aseshrun with graphics processor
选项无法正常工作。你是对的。选择 NVIDIA 作为全球首选是可行的。正如有关英特尔 HD 4000 支持 OpenGL 4.5
的说法可能已经过时了,因为我没有过多关注它们。
HD 4000 (Ivy Bridge) 在 windows 上支持 4.0,在 linux 上支持 4.2。不支持 4.5。
【参考方案1】:
正如 cmets 中所述,问题似乎在于使用选定的 graphics card
运行 IDE 的错误选项。由于 windows 默认集成 Intel HD 4000 卡,因此将 NVIDIA 卡切换为操作系统默认的首选卡即可解决此问题。
【讨论】:
以上是关于错误 GLSL 版本不正确 450的主要内容,如果未能解决你的问题,请参考以下文章
Mac OS X 上的 GLSL 版本 130 导致错误 [关闭]
错误:不支持 GLSL 3.30。支持的版本有:1.10、1.20、1.30、1.00 ES、3.00 ES、3.10 ES 和 3.20 ES [关闭]
错误:不支持GLSL 3.30。支持的版本包括:1.10,1.20,1.30,1.00 ES,3.00 ES,3.10 ES和3.20 ES [关闭]