2017-09-06 73 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卡切換爲默認首選卡可解決問題。