【发布时间】:2016-03-15 16:32:27
【问题描述】:
我正在开发一个 opengl 应用程序。我使用opengl函数:glCompressedTexImage2D(),以ASTC纹理压缩格式上传视频帧纹理。在GPU支持opengl扩展:GL_KHR_texture_compression_astc_ldr,压缩纹理格式为:GL_COMPRESSED_RGBA_ASTC_8x8_KHR的手机上运行良好,上传时间约为每帧2ms。
我想将应用程序移植到opengl 4.5和Nvidia GTX 750硬件的Windows平台上,发现上传成功,但是上传时间太长,每帧大约200ms~300ms。我查看硬件数据库:http://delphigl.de/glcapsviewer/listreports.php,发现 GTX 750 不支持 GL_KHR_texture_compression_astc_ldr 扩展。然后我使用了 Intel(R) HD Graphics 530,它支持 GL_KHR_texture_compression_astc_ldr 扩展,上传时间约为每帧 2ms。 所以我想知道为什么 Nvidia GTX 750 可以成功上传 ASTC 纹理但要花费这么多时间,有没有办法使用 Nvidia GTX 750 在正常时间(每帧 2 毫秒)上传 ASTC 纹理。Intel(R) HD Graphics 530无法支持复杂的 3D 应用。
这里是上传代码:
glCompressedTexImage2D(GL_TEXTURE_2D,
0,
compressed_data_internal_format,
xsize,
ysize,
0,
n_bytes_to_read,
astc_data_ptr);
GL_CHECK(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
GL_CHECK(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
GL_CHECK(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT));
GL_CHECK(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT));
【问题讨论】:
-
"上传时间太长,每帧200ms~300ms左右。"上传数据的“per-frame”是什么意思?
-
这意味着当我调用 glCompressedTexImage2D() 一次时,该函数的时间成本在支持 GL_KHR_texture_compression_astc_ldr 扩展的移动设备 GPU 和 Intel(R) HD Graphics 530 中约为 2ms。在Nvidia GTX 750中,时间大约是200ms~300ms,使用相同的数据上传。
标签: opengl upload gpu opengl-extensions