Si glReadPixels
es demasiado lento para usted, entonces glCopyTexImage2D
y glCopyTexSubImage2D
no serán mucho más rápidos. En las plataformas con soporte para objetos framebuffer, como iOS, la forma recomendada (es decir, más rápida) de obtener datos de imágenes procesados por GPU en una textura es usar esa textura como el archivo adjunto en color para un objeto framebuffer y representarlo directamente en él. Dicho esto, si aún desea seguir este método, aquí tiene lo que debe hacer para solucionarlo:
Primero, está pasando argumentos incorrectos al glCopyTexImage2D
. El tercer argumento, internalformat
, probablemente debería ser GL_RGBA
en lugar de 0
. Si hubiera llamado al glGetError
después de llamar al glCopyTexImage2D
, probablemente hubiera obtenido GL_INVALID_OPERATION
. Consulte las páginas de manual de OpenGL ES 1.1 para glCopyTexImage2D y glCopyTexSubImage2D.
En segundo lugar, como ya ha observado, glCopyTexImage2D
requiere que sus argumentos de ancho y alto sean también potencia de dos. La forma correcta de solucionar esto es asignar una imagen de textura usando glTexImage2D
(puede pasar NULL
para pixels
aquí), luego use glCopyTexSubImage2D
para copiar el contenido de su framebuffer en un rectángulo. Tenga en cuenta que glCopyTexSubImage2D
no toma un argumento internalformat
, ya que está actualizando un subrectangle de una textura, utiliza el formato existente de la textura.
Para el registro, glGetTexImage no existe en OpenGL ES 1.1 o 2.0, por lo que está obteniendo una declaración implícita.
¿Sabes si el problema está en crear la textura o en renderizarla más tarde? ¿'GlCopyTexImage2D' seguido de' glGetTexImage' produce el mismo resultado que 'glReadPixels'? (no se recomienda como una solución a largo plazo por motivos de rendimiento, sino como un paso de solución de problemas para ver qué ocurre con la textura) –
Para la restricción de la potencia de 2, puede usar 'glTexImage2D' para asignar la textura con una potencia -de-2 tamaño y pasa 'NULL' para los datos, luego' glCopyTexSubImage2D' que permite dimensiones sin potencia de 2. –