Se glReadPixels
è troppo lento per voi, quindi glCopyTexImage2D
e glCopyTexSubImage2D
non saranno molto più veloci. Sulle piattaforme con supporto per oggetti framebuffer, come iOS, il metodo consigliato (cioè più veloce) per ottenere i dati di immagine renderizzati GPU in una texture consiste nell'utilizzare tale texture come allegato per un oggetto framebuffer e renderizzarla direttamente. Detto questo, se vuoi ancora seguire questo metodo, ecco cosa devi fare per risolverlo:
Per prima cosa, stai passando argomenti errati a glCopyTexImage2D
. Il terzo argomento, internalformat
, dovrebbe essere probabilmente GL_RGBA
anziché 0
. Se avessi chiamato glGetError
dopo aver chiamato glCopyTexImage2D
, probabilmente avresti ottenuto GL_INVALID_OPERATION
. Vedere le pagine man di OpenGL ES 1.1 per glCopyTexImage2D e glCopyTexSubImage2D.
In secondo luogo, come già osservato, lo glCopyTexImage2D
richiede che gli argomenti larghezza e altezza siano anche power-of-two. Il modo corretto per risolvere questo problema consiste nell'assegnare un'immagine texture utilizzando glTexImage2D
(è possibile passare NULL
per pixels
qui), quindi utilizzare glCopyTexSubImage2D
per copiare il contenuto del framebuffer in un rettangolo. Notare che glCopyTexSubImage2D
non accetta un argomento internalformat
, poiché sta aggiornando un sottorettangolo di una trama, utilizza il formato esistente della trama.
Per la cronologia, glGetTexImage non esiste in OpenGL ES 1.1 o 2.0, motivo per cui si sta ottenendo una dichiarazione implicita.
Sai se il problema è nella creazione della trama o successivamente nel renderlo? 'GlCopyTexImage2D' seguito da' glGetTexImage' produce lo stesso risultato di 'glReadPixels'? (non consigliato come soluzione a lungo termine per motivi di prestazioni, ma come un passo per la risoluzione dei problemi relativi alla trama) –
Per la restrizione di power-of-2, è possibile utilizzare 'glTexImage2D' per allocare la trama con un potere -di-2 dimensioni e passando 'NULL' per i dati, quindi' glCopyTexSubImage2D' che consente dimensioni non power-of-2. –