2017-09-06 17 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); 
} 

そして、これは何のIですエラーとしてキャッチ:

[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

Intelカードの情報が見つかりませんでしたが、NvidiaはGLSL 450をサポートしています。あなたのNvidiaカードでプログラムを実行しようとしましたか? (通常、WindowsはIntelにデフォルト設定されていますので、それをチェックしてください) – Banex

+0

@Aseshこの問題が私を悩まし始めた昨日、すべてのドライバをチェックしました。私もそれらをロールバックし、最新のものをインストールするためにnvidiaのパネルを使用しました – Primemaster

答えて

1

コメントに記載されているように、問題は選択したgraphics cardでIDEを実行するという誤ったオプションがあるようでした。 Windowsが統合されたIntel HD 4000カードをデフォルト設定にしているので、OSによってNVIDIAカードをデフォルトの優先設定に切り替えることで問題は解決しました。