2017-09-06 69 views
1

我有一个OpenGL的应用程序,我过去编译过,但现在不能在同一台机器上。这个问题似乎在片段着色器中没有正确编译。错误GLSL不正确的版本450

我使用:

  • 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' 

种我的规格如下:

  • 英特尔HD 4000
  • 的Nvidia GeForce 840M

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

+0

你确定你的图形驱动程序是最新的吗?他们都支持GLSL版本450 – Asesh

+1

我无法找到英特尔卡的信息,但Nvidia应该支持GLSL 450.你有没有试过用你的Nvidia卡运行你的程序? (通常Windows默认为英特尔,所以检查) – Banex

+0

@Asesh昨天当这个问题开始困扰我时,我检查了所有的驱动程序。我甚至将它们卷回来,并使用nvidia的面板来安装最新版本 – Primemaster

回答

1

正如评论中所述,该问题似乎与运行IDE的错误选项为graphics card。由于Windows默认使用集成的英特尔HD 4000卡,操作系统将NVIDIA卡切换为默认首选卡可解决问题。