我正在进行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));
非常感谢!
答案 0 :(得分:1)
有没有办法使用Nvidia GTX 750在正常时间(每帧2ms)上传ASTC纹理
如果实现没有公开GL_KHR_texture_compression_astc_ldr
扩展,那么实现不支持ASTC。因此,无论花费多少时间,您都无法将数据上传到它。
当您尝试以不支持的格式分配纹理存储时,NVIDIA的驱动程序应该出错。但无论是否存在,优化错误的代码都没有意义。查看错误代码的时间也没有意义。
在进行优化之前,您需要获得应该起作用的代码。你的不应该,除非支持这种扩展。