我有大约六个文件,每个250 KB到500 KB。每个文件都有多个QImages;每个文件大约有400张128x64的图像。加载到内存大约60MB/s(因为OpenGL需要将PNG解压缩到它自己的格式)。缓慢的纹理加载
可以加快这个过程吗?由于我有一场演出要填补,所以速度很慢。
QFile file("file.ucv");
if (file.open(QIODevice::ReadOnly)) {
qDebug() << "Read from hdd";
QDataStream r(&file);
r.setVersion(QDataStream::Qt_4_3);
QImage t;
int i = maxPics * place;
glGenTextures(maxPics, &texture[i]);
for (int y = 0; y < yNrPics; y++)
for (int x = 0; x < xNrPics; x++, i++) {
// Write to precomputed object
r >> t;
glBindTexture(GL_TEXTURE_2D, texture[i]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_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);
}
探查发现这条线是最consumptious:
glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits());
改变压缩到未压缩,可以节省一些时间,但仍然不多。
加载的QImage在GLformat中。
一个好的开始是分析代码,看看哪一个是瓶颈。 –
上传到GPU时,最有可能是CPU忙于等待。 – RobotRock
不是,图像很小,上传和设置开销可能是瓶颈。 –