我有大约六个文件,每个文件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 );
}
分析器发现此行是最消费的:
glTexImage2D( GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits() );
将压缩更改为非压缩,节省了一些时间,但仍然不多。
加载的QImage采用GLformat格式。
答案 0 :(得分:2)
确保您确定自己的数据:
另外,避免做工作是最好的优化:
流水线工作,特别是I / O是加快速度的好方法,通常很简单(生产者 - 消费者并行):
尽可能使用CPU上的所有可用内核:
此外,当您不需要时,请避免通过缓冲的API流式传输数据:
答案 1 :(得分:1)
如果您确定瓶颈在于该段代码,那么您可能会做以下几件事:
GL_COMPRESSED_RGBA
,而只需使用GL_RGBA