texturas - texture in opengl c++
cómo usar glCopyImage2D (2)
Si glReadPixels
es demasiado lento para usted, entonces glCopyTexImage2D
y glCopyTexSubImage2D
no serán mucho más rápidos. En plataformas con soporte para objetos framebuffer, como iOS, la forma recomendada (es decir, más rápida) de obtener datos de imágenes renderizados por GPU en una textura es usar esa textura como el archivo adjunto de color para un objeto framebuffer y representarlo directamente en él. Dicho esto, si aún desea seguir este método, esto es lo que debe hacer para solucionarlo:
Primero, está pasando argumentos malos a glCopyTexImage2D
. El tercer argumento, internalformat
, probablemente debería ser GL_RGBA
lugar de 0
. Si glGetError
después de llamar a glCopyTexImage2D
, probablemente habrás 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 también sean potencia de dos. La forma correcta de manejar esto es asignar una imagen de textura usando glTexImage2D
(puede pasar NULL
para los 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 de formato 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.
Estoy intentando algo como
glEnable(texture_2d)
glBindTexture
glCopyTexImage2D
glDisable(GL_TEXTURE_2D);
Creo que glCopyTexImage2D no funcionará con un poder de dos imágenes, así que ese es un problema; También probé glReadPixels, pero es demasiado lento para mis propósitos.
¡Gracias!
Puede verificar si la tarjeta de video admite no potencia de 2 texturas si es compatible con la extensión ARB_texture_non_power_of_two. Mira aquí para obtener información.