Closed mycrl closed 3 months ago
wgpu 虽然至少可以在 metal 及 vulkan 后端支持 srgb 格式的 external texture, 但目前确实还不支持 textureSampleBaseClampToEdge.
我猜测大概是需要将YUV拆分成3个R8通道,然后将3个通道在shader里面转换
你的想法是对的,拆分成 3 个单通道的 r8/16/r32 纹理在 shader 中转换是可行的。可以借助 chatgpt 等 AI 工具写出 glsl 的代码,然后再手动转换成 wgsl 语法
我查找了很多资料,都没有找到相关的示例,并且我也去wgpu的discussions里面问了一下,也没有得到解答,我找到的最接近的示例就是一个在web上使用webgpu的示例
https://github.com/tidoust/media-tests/blob/main/ToRGBXVideoFrameConverter.js
这个示例是将任何纹理转成RGBA,这个例子其实很好,但是我发现移植到wgpu会存在一些问题,比如
device.importExternalTexture
,wgpu还没有支持这个草案,虽然wgpu支持yuv或者nv12的format,但是能支持这个颜色空间的设备很少,至少目前我手上的不支持,所以我只能创建一个rgba的surface和texture我猜测大概是需要将YUV拆分成3个R8通道,然后将3个通道在shader里面转换,但是我目前完全只有一个模糊的概念,对于实际如何操作完全不清楚,这个问题已经困扰我很久了
虽然在这个repo里面提这个问题有点ot,但是我目前找不到其他可以寻求帮助的途径了
感谢!