Metal创建id<CVMetalTexture>的细节问题
最近项目代码中使用CVMetalTextureCacheCreateTextureFromImage接口发现特别慢,但是CVMetalTextureCacheCreate特别快。主要原因是代码写得不规范,频繁释放CVMetalTextureCacheRef,延后
释放了CVMetalTextureRef。
在旧的代码中每个CVPixelBufferRef去绑定一个CVMetalTextureCacheRef, 然后由CVMetalTextureCacheRef去创建CVMetalTextureRef,最后获取id
问题1:CVMetalTextureCacheRef每次都会重新创建一个。实际上应该同一个device保留同一个。
问题2:没有及时释放CVMetalTextureRef。应该在获取id
整个代码构建应该:
1、构建static thread_local device,与这个相关的CVMetalTextureRef。这个CVMetalTextureRef在需要的时候构建,只构建一次。CVMetalTextureRef和device生命周期相同。
2、传入CVPixelBufferRef后去获取当前线程的CVMetalTextureRef。
3、获取CVPixelBufferRef的pixelformat等相关信息。
4、创建CVMetalTextureRef。
5、创建id
6、释放CVMetalTextureRef,返回id

浙公网安备 33010602011771号