Frage zur "Render to Texture" Schleife



  • Hi,

    ich verwende folgenden Code um in eine Textur zu rendern (OpenGL):

    Init:

    glGenFramebuffers(1, &framebuffer); 
    glGenRenderbuffers(1, &depthRenderbuffer);
    
    int width = resolutionX;
    int height = resolutionY;
    int numberOfChannels = 3;
    GLuint internalFormat = GL_RGB8;
    GLuint format = GL_RGB;
    
    texels = new unsigned char[width * height * numberOfChannels];
    
    glGenTextures(1, &reflectionTexture);
    glBindTexture(GL_TEXTURE_2D, reflectionTexture);
    
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    
    glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, width, height, 0, format, GL_UNSIGNED_BYTE, texels);
    

    Renderschleife:

    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
    
    	glBindTexture(GL_TEXTURE_2D, reflectionTexture); 
    
    	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, reflectionTexture, 0);
    
    	glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
    
    	glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, resolutionX, resolutionY); 
    
    	glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer); 
    
    	GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER) ; 
    
    	if(status != GL_FRAMEBUFFER_COMPLETE) { 
    		f << "render to Texture: " << status << std::endl; 
    	} else
    	{
    		f <<" render To texture OK" << std::endl;
    	}
    //Hier rendern wie üblich
    
    	glBindRenderbuffer(GL_RENDERBUFFER,0);
    	glBindFramebuffer(GL_FRAMEBUFFER, 0);
    
    // Hier die Textur verwenden
    

    Gehört wirklich alles was in der Schleife steht in die Renderschleife?
    Ich meine das Binden wird ja wohl ok sein, aber ich füge ja in jedem Rendergang den Framebuffer wieder an den Renderbuffer und führe glRenderbufferStorage aus.

    Erzeugt dies ein Speicherloch?
    Was gehört in das Init und was in die Renderschleife?


Anmelden zum Antworten