wie man glCopyImage2D benutzt

8

Ich versuche etwas wie

%Vor%

Ich denke, dass glCopyTexImage2D nicht mit einem Bild ohne Power-of-Two funktionieren wird, das ist also ein Problem; Ich habe auch glReadPixels ausprobiert, aber für meine Zwecke ist es zu langsam.

    
Adam 19.06.2010, 00:10
quelle

3 Antworten

9

Wenn glReadPixels für Sie zu langsam ist, dann werden glCopyTexImage2D und glCopyTexSubImage2D nicht viel schneller sein. Auf Plattformen mit Unterstützung für Framebuffer-Objekte, wie iOS, besteht die empfohlene (d. H. Schnellere) Möglichkeit, GPU-gerenderte Bilddaten in eine Textur zu bringen, darin, diese Textur als Farbanhang für ein Framebuffer-Objekt zu verwenden und direkt darin zu rendern. Wenn Sie diese Methode dennoch verfolgen möchten, müssen Sie Folgendes tun:

Zuerst übergibst du schlechte Argumente an glCopyTexImage2D . Das dritte Argument, internalformat , sollte wahrscheinlich GL_RGBA anstelle von 0 sein. Wenn Sie glGetError nach dem Aufruf von glCopyTexImage2D aufgerufen hätten, hätten Sie wahrscheinlich GL_INVALID_OPERATION erhalten. Siehe die OpenGL ES 1.1 Manpages für glCopyTexImage2D und glCopyTexSubImage2D .

Zweitens erfordert glCopyTexImage2D , wie Sie bereits festgestellt haben, dass seine Argumente für width und height auch Zweierpotenz sind. Die richtige Vorgehensweise ist die Zuweisung eines Texturbilds mit glTexImage2D (Sie können NULL für pixels hier übergeben) und dann glCopyTexSubImage2D , um den Inhalt Ihres Framebuffers in ein Rechteck zu kopieren. Beachten Sie, dass glCopyTexSubImage2D kein Argument internalformat benötigt - da es ein Unterrechteck einer Textur aktualisiert, verwendet es das vorhandene Format der Textur.

Für den Datensatz existiert glGetTexImage nicht in OpenGL ES 1.1 oder 2.0, weshalb Sie eine implizite Deklaration erhalten.

    
Pivot 19.06.2010, 17:33
quelle
1

Sie können prüfen, ob die Grafikkarte zwei Texturen unterstützt, wenn sie die Erweiterung ARB_texture_non_power_of_two unterstützt. Siehe hier für Informationen.

    
zooropa 21.06.2010 16:49
quelle
0

Um herauszufinden, ob die "Nicht-Potenz von Zwei" ein Problem ist, verwenden Sie glGetError () wie folgt:

%Vor%

Setzen Sie das an verschiedenen Stellen in Ihrem Code, um sicherzustellen, welche Zeile das Problem verursacht, dann überprüfen Sie den Fehlercode hier: Ссылка

Um eine Textur zu kopieren, habe ich:

%Vor%

nach dem Binden der Textur. Weitere Informationen finden Sie in den Dokumenten zu diesen beiden Funktionen.

    
Steven2163712 18.02.2018 18:41
quelle

Tags und Links