[英]Does OpenGL/DirectX converts other texture formats to RGBA format internally?
正如标题所述,我具有RGB565颜色缓冲区的动态纹理(每帧更新一次),我不知道哪种方法会具有更好的性能:
我认为,如果OpenGL / DirectX在内部将其他格式转换为RGBA8888,那么在上载到GPU之前,创建RGBA8888纹理并自行转换数据可能会更快。
不知道哪一个表现更好?
进行基准测试。
话虽如此,5-6-5模式之所以奇怪,是因为它只有16位。 GPU通常在硬件中支持所有这些,因此,如果存在某种格式,则可以假定存在用于处理该格式的硬件说明。
这也可能取决于您在GPU上施加的全局工作负载以及GPU的特性:将565纹理放到视频内存中并在着色器中从该纹理中读回将消耗888对应内存的一半带宽,但是( (不确定),这会消耗更多的处理能力。
因此,如果可能,可以在多种配置上进行基准测试:)
我怀疑自己将RGB565数据转换为RGBA8888是否会更快。
首先,RGB565是一种已被广泛使用的格式,并且您的硬件很有可能直接支持它。 如果精度足以满足您的用例,则由于减少了内存带宽并相应地提高了缓存命中率,它将使用RGBA8888的一半内存,并且很有可能至少具有相同的效率。
即使硬件不支持它,我仍然认为自己将其转换为RGBA8888不会更有效。 任何物有所值的驱动程序都将具有高度优化的代码,用于格式转换。 甚至更重要的是,它可能能够在必须进行的数据复制期间应用格式转换,与进行转换的代码相比,它避免了数据的一个副本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.