2017-09-06 5 views
1

Ich habe eine bestimmte OpenGL-Anwendung, die ich in der Vergangenheit kompiliert habe, aber jetzt nicht in der gleichen Maschine. Das Problem scheint darin zu liegen, dass der Fragment-Shader nicht richtig kompiliert wird.Fehler GLSL falsche Version 450

Ich verwende:

  • Glew 2.1.0
  • GLFW 3.2.1

auch alle notwendigen Kontext am Anfang des Programms erstellt wird. Hier ist, wie meine Programmerstellung Funktion wie folgt aussieht:

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; 

Mein Haupt:

/* ---------------------------- */ 
/* 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; 
} 

Hier wird die Suche eines Beispiels der fragmentShader Datei:

#version 450 core 

out vec4 fColor; 

void main() 
{ 
    fColor = vec4(0.5, 0.4, 0.8, 1.0); 
} 

Und das ist, was ich als Fehler fangen:

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

Meine Spezifikationen sind die folgenden:

  • Intel HD 4000
  • Nvidia GeForce 840M

Ich werde sagen, dass ich vor in derselben Maschine Shadern zusammengestellt. Ich kann es nach einem Diskettenformat nicht mehr machen. Jeder Treiber wird jedoch aktualisiert.

+0

Sind Sie sicher, dass Ihre Grafiktreiber auf dem neuesten Stand sind? Beide unterstützen GLSL-Version 450 – Asesh

+1

Ich konnte keine Infos für die Intel-Karte finden, aber die Nvidia sollte definitiv GLSL 450 unterstützen. Haben Sie versucht, Ihr Programm mit Ihrer Nvidia-Karte auszuführen? (In der Regel ist Windows standardmäßig auf Intel eingestellt, überprüfen Sie das also) – Banex

+0

@Asesh Gestern, als dieses Problem mich zu nerven begann, überprüfte ich alle Treiber. Ich rollte sie sogar zurück und benutzte nvidias Panel, um die neuesten zu installieren. – Primemaster

Antwort

1

Wie in Kommentaren angegeben, schien das Problem mit einer fehlerhaften Option zu sein, die IDE mit ausgewähltem graphics card auszuführen. Als Windows-Standard die integrierte Intel HD 4000-Karte, die NVIDIA-Karte auf die Standardvorgabe durch das Betriebssystem, das Problem behoben.

Verwandte Themen