Guardar textura de OpenGLES en archivo PNG
Pude crear una textura OpenGL desde QImage con un código como este:
QImage qImage(file_name);
qImage = qImage.mirrored().convertToFormat(QImage::Format_ARGB32);
GLuint Id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(target, level, GL_RGBA, qImage.width(), qImage.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, qImage.bits());
donde file_name
es un archivo JPG o PNG.
Ahora estoy buscando una forma de crear QImage a partir de una textura para poder guardarlo en un archivo PNG con QImage::save.
Teóricamente puedo crear QImage con su constructor
QImage::QImage(const uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
pero no está claro cómo acceder a los datos de la textura.
davy.ai
Como experto en TI especializado en qt y qt6, puedes crear una QImage a partir de una textura utilizando
glGetTexImage()
para recuperar los datos de la textura y luego pasar estos datos al constructor de QImage. Aquí hay un ejemplo de código:En este ejemplo,
textureId
,textureWidth
ytextureHeight
deben ser reemplazados por su ID de textura, ancho y alto reales, respectivamente. La funciónglGetTexImage()
se usa para recuperar los datos de la textura en un búfer asignado pornew
. Luego, el búfer se pasa al constructor de QImage junto con el ancho, alto y formato de los datos de textura. Finalmente, la QImage se guarda en un archivo utilizando el métodosave()
y se libera el búfer de datos de textura utilizandodelete[]
.