# LWJGL: Textur ändern mit GL11.readPixels



## Friedhelm (15. Jan 2013)

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?




```
// 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);
```


----------



## Friedhelm (15. Jan 2013)

Achja, geht ja gar nicht mit LWJGL. Die Frage habe ich ja schon mal gestellt


----------



## Marco13 (15. Jan 2013)

Wenn es mit OpenGL an sich geht, sollte es auch mit LWJGL gehen. Aber WAS genau nicht geht, habe ich nicht nachvollzogen...


----------



## Friedhelm (15. Jan 2013)

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


----------



## Evil-Devil (15. Jan 2013)

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.


----------



## Friedhelm (15. Jan 2013)

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?


----------

