LWJGL: Textur ändern mit GL11.readPixels

Friedhelm

Bekanntes Mitglied
Ich habe eine Szene mit einem 3D Objekt und einer Textur (kein Problem soweit, wird alles richtig angezeigt).

Jetzt versuche ich, kurz nach dem ich die Textur auf die Grafikkarte geschoben habe, wieder mit readPixels aus der Grafikkarte zu lesen und dann wieder Testweise in die Grafikkarte zu schrieben... einfach nur um sie zu modifizieren (Glow etc.). Das ist auch nur ein Test, um zu sehen ob readPixel arbeitet...

... tut es aber nicht. Weil ich bekomme dann nur Pixelmüll.

Wenn ich die Pixeldaten mit Grün fülle (0xff,0x00,x000,0xff => RGBA) ist alles ok und das 3D Objekt erstrahlt in einem satten Grün. Irgendwie werden die Pixeldaten mit readPixels nicht richtig gelesen oder verarbeitet.

Hat jemand einen Tip?



Code:
// Image-Daten (imageBuffer) in die Grafikkarte schreiben

IntBuffer textureData = BufferUtils.createIntBuffer(4); // * IntBuffer: RGB + Alpha *

GL11.glGenTextures(textureData); 
textureID = textureData.get(0);   
     
GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureID); 
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, imageBuffer); 


// * Textur aus der Grafikkarte lesen *

ByteBuffer pixels = ByteBuffer.allocateDirect(texture.getWidth()*texture.getHeight()*4);		

GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture.getTextureID());
GL11.glReadPixels(0, 0, texture.getWidth(),texture.getHeight(), GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, pixels);

// * Textur in die Grafikkarte schreiben *

GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture.getTextureID()); 
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, texture.getWidth(), texture.getHeight(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, pixels);
 
Stimmt, es funktioniert mit "glGetTexImage" und nicht mit readPixels (kann man wohl nur einen Screenshot mit machen)

Sogar wirklich schnell (kopieren der kompletten Textur + Änderungen: < 1ms).
 
glReadPixel liest die jeweiligen Daten aus dem Buffer bzw. der aktiven Quelle. Zum schreiben zurückschreiben von Daten ist die Funktion nicht gedacht.
Chapter 8 - OpenGL Programming Guide

An sich würde ich dir vorschlagen für Textur Manipulationen auf Shader zu setzen. Da sind die Möglichkeiten weitaus umfangreicher.
 
Danke... nächstes Problem, das funktioniert nicht in Android, weil die "glGetTexImage" funktion nicht existiert.

Habe nur ein FBO Beispiel gefunden... was sehr umständlich ist und wohl nicht auf allen Geräten funktioniert.

Hat jemand das bei Android schon mal hinbekommen eine Textur aus dem Grafikspeicher zu lesen?
 
Zuletzt bearbeitet:

Zurück
Oben