openGL SubTexturing

8

Ich habe Bilddaten und ich möchte ein Unterbild davon als OpenGL-Textur verwenden.

%Vor%

Wie kann ich ein Teilbild dieses Bildes als Textur laden? Ich denke, es hat etwas mit der Verwendung von glTexSubImage2D zu tun, aber ich habe keine Ahnung, wie man es benutzt, um eine neue Textur zu erstellen, die ich laden kann. Aufruf:

%Vor%

Doe nichts, was ich sehen kann, und Aufruf von glCopyTexSubImage2D nimmt nur einen Teil meines Framebuffers. Danke

    
DavidG 15.10.2008, 16:56
quelle

2 Antworten

27

Bearbeiten: Verwenden Sie glPixelStorei. Sie verwenden es, um GL_UNPACK_ROW_LENGTH auf die Breite (in Pixeln) des gesamten Bildes zu setzen. Dann rufen Sie glTexImage2D (oder was auch immer) auf und übergeben ihm einen Zeiger auf das erste Pixel des Unterbildes und die Breite und Höhe des Unterbildes.

Vergessen Sie nicht, GL_UNPACK_ROW_LENGTH auf 0 zurückzusetzen, wenn Sie damit fertig sind.

Ie:

%Vor%

Oder, wenn Sie allergisch auf Zeiger-Mathe sind:

%Vor%

Edit2: Der Vollständigkeit halber sollte ich darauf hinweisen, dass Sie bei Verwendung von OpenGL-ES nicht GL_UNPACK_ROW_LENGTH erhalten. In diesem Fall könnten Sie entweder (a) das Unterbild selbst in einen neuen Puffer extrahieren, oder (b) ...

%Vor%     
Mike F 15.10.2008, 17:05
quelle
1

Für diejenigen, die 2018 und später bei OpenGL ES 1.1 / 2.0 feststeckten, habe ich mit verschiedenen Methoden getestet, wie man einen Teil der Textur aus Bilddaten aktualisiert (das Bild hat die gleiche Größe wie die Textur).

Methode 1: Kopieren Sie das gesamte Bild mit glTexImage2D :

%Vor%

Methode 2: Kopieren Sie das gesamte Bild mit glTexSubImage2D :

%Vor%

Methode 3: Bildteil zeilenweise in einer Schleife kopieren:

%Vor%

Methode 4: Kopiere die gesamte Breite des Bildes, aber kopiere nur den Teil, der sich geändert hat:

%Vor%

Und hier sind die Ergebnisse des Tests, der auf dem PC durchgeführt wurde, 100000 Mal, indem verschiedene Teile der Textur aktualisiert wurden, die ungefähr 1/5 der Größe der gesamten Textur betrugen.

  • Methode 1 - 38,17 sec
  • Methode 2 - 26,09 sec
  • Methode 3 - 54,83 sec - langsamste
  • Methode 4 - 5,93 sec - Gewinner

Es überrascht nicht, dass Methode 4 am schnellsten ist, da sie nur einen Teil des Bildes kopiert und dies mit einem einzigen Aufruf der Funktion glTex ... () macht.

    
vedranm 19.01.2018 01:41
quelle

Tags und Links