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