上传ASTC压缩纹理使用glCompressedTexImage2D花费太多时间?

时间:2016-03-15 16:32:27

标签: opengl upload gpu opengl-extensions

我正在进行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 扩展名。然后我使用了英特尔(R)HD Graphics 530,它支持 GL_KHR_texture_compression_astc_ldr 扩展,上传时间约为每帧2ms。 所以我想知道为什么Nvidia GTX 750可以上传ASTC纹理成功但是花费了很多时间,有没有办法在正常时间(每帧2ms)使用Nvidia GTX 750上传ASTC纹理。英特尔(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));

非常感谢!

1 个答案:

答案 0 :(得分:1)

  

有没有办法使用Nvidia GTX 750在正常时间(每帧2ms)上传ASTC纹理

如果实现没有公开GL_KHR_texture_compression_astc_ldr扩展,那么实现不支持ASTC。因此,无论花费多少时间,您都无法将数据上传到它。

当您尝试以不支持的格式分配纹理存储时,NVIDIA的驱动程序应该出错。但无论是否存在,优化错误的代码都没有意义。查看错误代码的时间也没有意义。

在进行优化之前,您需要获得应该起作用的代码。你的不应该,除非支持这种扩展。