gpt4 book ai didi

c++ - OpenGL 纹理占用太多内存

转载 作者:行者123 更新时间:2023-11-28 00:57:41 27 4
gpt4 key购买 nike

我有 75 * 9 * 32 张图像,PNG 格式的硬盘驱动器总共有 64 MB。如果我加载每张 128*256 像素的图像,它会在 RAM 中占用高达 1.5 GB 的内存!我没有启用 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。

最佳答案

I am figuring this could be because the GPU only stores raw images,

当然,它们是原始格式。尽管 GPU 直接支持 Deflate 和 JPEG 解压缩会很好,但它们不支持。

is there a way to tighten the memory usage?

您可以使用压缩纹理格式。是的,现代 GPU 确实支持即时解压缩,但使用的编解码器与 PNG 或 JPEG 有很大不同。

I am loading the textures with the use of a framebuffer object, which is created only once.

为什么? FBO 用于其他用途。您可以直接从文件加载 QImage 而无需此类代理。

关于c++ - OpenGL 纹理占用太多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10209290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com