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.
Sind Sie sicher, dass Ihre Grafiktreiber auf dem neuesten Stand sind? Beide unterstützen GLSL-Version 450 – Asesh
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
@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