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.html

    Ich freue mich auf jede Hilfe und Tipps!

    Danke & Gruß! 🙂

    Carvin


  • Mod

    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


  • Mod

    laut fehlermeldung fehlt "main()" im shader.
    vielleicht kannst du die shader sourcen zeigen, das laden wird ja scheinbar nicht bemeckert.


Anmelden zum Antworten