Problem zum Einlesen vom Shader-Code aus lokalen Dateien
-
Guten Tag, Alle
Ich wollte in meinem Code die externe Shader-Dateien einbinden und habe eine Frage zur Pfad-Eingabe.
Ich möchte ein rotes Dreieck zeichnen, indem ich die externen Shader-Dateien, die im Projekt-Unterverzeichnis sind, aufrufe. In meinem Code verwende ich die Klassenfunktion als Beispiel: Shader ourShader("Shaders/vertexShader.vs", "Shaders/fragSchader.frag");
Die Funktion zum Datenstreaming sieht zum Teil wie folgendes aus:
Shader::Shader(const GLchar* vertexPath, const GLchar* fragmentPath){ // 1. Retrieve the vertex/fragment source code from filePath std::string vertexCode; std::string fragmentCode; std::ifstream vShaderFile; std::ifstream fShaderFile; // ensures ifstream objects can throw exceptions: vShaderFile.exceptions(std::ifstream::badbit); fShaderFile.exceptions(std::ifstream::badbit); try { // Open files vShaderFile.open(vertexPath); fShaderFile.open(fragmentPath); std::stringstream vShaderStream, fShaderStream; // Read file's buffer contents into streams vShaderStream << vShaderFile.rdbuf(); fShaderStream << fShaderFile.rdbuf(); // close file handlers vShaderFile.close(); fShaderFile.close(); // Convert stream into GLchar array vertexCode = vShaderStream.str(); fragmentCode = fShaderStream.str(); } catch (std::ifstream::failure e) { std::cout << "ERROR::SHADER::FILE_NOT_SUCCESFULLY_READ" << std::endl; } . . . // Shader Program this->Program = glCreateProgram(); glAttachShader(this->Program, vertex); glAttachShader(this->Program, fragment); glLinkProgram(this->Program); // Print linking errors if any glGetProgramiv(this->Program, GL_LINK_STATUS, &success); if (!success) { glGetProgramInfoLog(this->Program, 512, NULL, infoLog); std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl; }
Aber mir wurde ein weißes Dreieck angezeigt mit der Feherneldung: ERROR::SHADER::PROGRAM::LINKING_FAILED ERROR: definition for "void main()" not found auf der Kommandozeile. , ich weiß nicht woran es liegen könnte?
Die beiden Dateien befinden sich direkt im Ordner Shaders unter dem Projekt-Verzeichnis wie im folgednen Bild zu sehen ist.
Bild für die Datei-Struktur meines Projektes:
https://picload.org/view/rdcrpdip/opengl01.png.htmlIch freue mich auf jede Hilfe und Tipps!
Danke & Gruß!
Carvin
-
du hast die frage vergessen zu stellen
wenn du fehler hast, beschreibe diese moeglichst genau. (1.ich will ... tun 2. es passiert aber... 3.ich erwarte dass ... passiert 4. screenshots,logs,... )
-
Hi, rapso
Danke für deine Antwort. Ich habe die Formulierung meiner Frage nochmal verbessert.
Habt ihr Ideen oder Vorschlag zu meinem Problem?
Danke, LG
-
laut fehlermeldung fehlt "main()" im shader.
vielleicht kannst du die shader sourcen zeigen, das laden wird ja scheinbar nicht bemeckert.