Fehlermeldung beim Laden einer Textdatei



  • Ich habe versucht den Code aus einem Buch über OpenGL auszuführen um zwei Textdateien(Code führ einen Vertex- und Fragmentshader) in jeweils in eine char zu schreiben, was aber zu einer Fehlermeldung führt. Ich bin ein Neuling was c++ angeht, deshalb weiß ich leider nicht ob die Lösung auf der Hand liegt.. (Ich nutze MVS Community 2013)
    Hier ist jedenfalls der Code:

    #ifndef SHADER_H
    #define SHADER_H
    #include <string>
    #include <fstream>
    #include <sstream>
    #include <iostream>
    #include <GL/glew.h>
    #include <SDL/SDL.h>
    
    class Shader
    {
    public:
    
    	GLuint program;
    
    	Shader(const GLchar* vertexPath, const GLchar* fragmentPath)
    	{
    		std::string vertexCode;
    		std::string fragmentCode;
    		std::ifstream vShaderFile;
    		std::ifstream fShaderFile;
    
    		try
    		{
    			vShaderFile.open(vertexPath);
    			vShaderFile.open(fragmentPath);
    
    			std::stringstream vShaderStream, fShaderStream;
    
    			vShaderStream << vShaderFile.rdbuf();
    			fShaderStream << fShaderFile.rdbuf();
    
    			vShaderFile.close();
    			fShaderFile.close();
    
    			vertexCode = vShaderStream.str();
    			fragmentCode = fShaderStream.str();
    
    		}
    		catch (std::ifstream::failure e)
    		{
    			std::cout << "ERROR::SHADER::NOT_SUCCESSFULLY_READ" << std::endl;
    		}
    
    		const GLchar* vShaderCode = vertexCode.c_str();
    		const GLchar* fShaderCode = fragmentCode.c_str();
    
    		GLuint vertexShader, fragmentShader;
    		GLint success;
    		GLchar infoLog[512];
    
    		vertexShader = glCreateShader(GL_VERTEX_SHADER);
    		glShaderSource(vertexShader, 1, &vShaderCode, &success);
    		glCompileShader(vertexShader);
    		if (!success)
    		{
    			glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
    			std::cout << "ERROR::SHADER::VERTEX::COMPILATION::FAILED\n" << infoLog << std::endl;
    			SDL_Delay(2000);
    		}
    
    		fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    		glShaderSource(fragmentShader, 1, &fShaderCode, &success);
    		glCompileShader(fragmentShader);
    		if (!success)
    		{
    			std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION::FAILED\n" << infoLog << std::endl;
    			SDL_Delay(2000);
    		}
    
    		this->program = glCreateProgram();
    		glAttachShader(this->program, vertexShader);
    		glAttachShader(this->program, fragmentShader);
    		glLinkProgram(this->program);
    
    		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;
    		}
    
    		glDeleteShader(vertexShader);
    		glDeleteShader(fragmentShader);
    	}
    
    	void Use()
    	{
    		glUseProgram(this->program);
    	}
    };
    #endif
    

    Beim Ausführen des Codes kommt folgender Fehler:

    "Unhandled exception at 0x68710025 (atioglxx.dll) in program.exe: 0xC0000005: Access violation reading location 0x013C1000."

    Habe bisher nur herausgefunden, dass atioglxx.dll zu meinem Amd-Grafiktreiber gehört?

    Hoffe auf eine schnelle Antwort und schon mal danke im Voraus 🙂


  • Mod

    Und was sagt der Debugger?
    An welcher stelle knirscht es?



  • Ich habe im Call Stack nach dem Fehler gesucht und angeblich liegt der Fehler in main und das verstehe ich nicht wirklich...

    Shader sObj;
    	sObj.theShader("Shader/VertexShader.vert", "Shader/FragmentShader.frag");
    
    	GLfloat vertices[] =
    	{
    		-0.5f, -0.5f, 0.0f,
    		0.5f, -0.5f, 0.0f,
    		0.0f, 0.5f, 0.0f
    	};  //Hier in dieser Zeile soll der Fehler sein
    

    Die Dateipfade müssten stimmen.

    Tut mir leid, dass ich nicht früher geantwortet habe. Hatte
    vor kurzem noch keine Zeit.
    Ich schicke falls es nötig ist sicherlich noch mehr von dem
    Code.


Anmelden zum Antworten