我有 75 * 9 * 32 的图像,在 PNG 格式的硬盘上总共有 64 MB。如果我加载每个 128*256 像素的图像,它会占用高达 1.5 GB 的 RAM 内存!我没有启用 mipmapping。
我想这可能是因为 GPU 只存储原始图像,有没有办法收紧内存使用?
我正在使用仅创建一次的帧缓冲区对象加载纹理。
我使用以下内容加载纹理:
QImage catchImage = catchFbo->toImage();
QImage t = QGLWidget::convertToGLFormat(catchImage);
glGenTextures( 1, &Item::texture[i] );
glBindTexture( GL_TEXTURE_2D, Item::texture[i] );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits() );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
编辑: GL_COMPRESSED_RGBA 而不是 GL_RGBA 似乎有很大的不同。它现在使用 500 MB。