FrameBuffer in Textur kopieren



  • Meine Frage siehe Topic.

    Bei glCopyTexImage2D habe ich ja das Problem, dass die Textur Viewport-Größe haben muss, wenn ich das gesamte Framebufferbild in die Textur bekommen möchte, weil der 1:1 die Pixel kopiert und nicht blittet wie zB bei der WinGDI.

    Ich habe als Ausgangslage den Frambuffer in einer Größe die nicht 2^n ist, und möchte das ganze Bild nun entsprechend runtergerechnet in eine 256er-Textur haben. Wie geht das? Und wirklich kopiert, ohne die ganez Szene ein zweites mal in die Textur rendern zu müssen

    MfG Pellaeon



  • das Problem, dass die Textur Viewport-Größe haben muss

    mach die textur gross genug und benutze glCopySubTexImage2D - blitten kann man dann leicht selbst.
    warum ueberhaupt 2^n-texturen?



  • Naja kleinere Texturen machen sich auf langsameren Rechnern ganz gut^^
    Wie meinst du das mit dem selber blitten?
    Außerdem scheints so, als wenn ATI-Karten mit glCopyTexImage2D Probleme haben.

    //
    void CGraphic::drawScene()
    {
    	glCallList(m_axisID);
    	m_area.draw();
    
    	int vp[4];
    	glGetIntegerv(GL_VIEWPORT,vp);
    
    	glBindTexture(GL_TEXTURE_2D,m_texID);
    	glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0,vp[2],vp[3], 0);
    
    	//
    	glEnable(GL_TEXTURE_2D);
    	glBegin(GL_QUADS);
    	  glTexCoord2i(0,0);
    	  glVertex3f(30,0,0);
    	  glTexCoord2i(1,0);
    	  glVertex3f(50,0,0);
    	  glTexCoord2i(1,1);
    	  glVertex3f(50,20,0);
    	  glTexCoord2i(0,1);
    	  glVertex3f(20,20,0);
            glEnd();	  
    
    	glDisable(GL_TEXTURE_2D);	
    }
    

    Das ist aus einem Test. Auf meiner nVidia-Karte läuft das, bei nem Kumpel der hat nur ATI, kommt es zu Fehldarstellungen oder ist total langsam 😕



  • es gibt zwar immer noch ne menge probleme in atis opengl-implementierung, aber bzgl glCopyTexImage2D kann ich gerade kein konkretes problem erkennen...

    Wie meinst du das mit dem selber blitten?

    grundlegend renderst du deine szene erstmal in eine textur.
    dann zeichnest du damit ein quad in eine andere (kleinere) textur.
    das waere einfaches blitting mit bilinearem filter, fuer komplexere filter verwendet man mehrere durchgaenge oder textureinheiten.
    normalerweise wuerde man fuer render2texture pbuffer verwenden, was du aber offenbar nicht willst.
    also musst du einen zwischenschritt machen indem du deinen viewport zunaechst in eine textur (die gross genug ist) kopierst.


Log in to reply