如何使用金属和Swift对CametLayer进行深度测试?

如何使用金属和Swift对CametLayer进行深度测试?,swift,metal,depth-testing,Swift,Metal,Depth Testing,最近我决定学习如何使用Swift的金属框架。我读了一些教程,看了一些视频,做了一些事情,最后我到了我必须使用深度测试的部分,以使事情看起来很好 我以前从未做过这样低级的图形编程,所以我环顾了整个互联网,了解深度测试是如何工作的,以及如何使用Cametlayer和Metal实现深度测试 然而,我发现所有深度测试的示例都是使用OpenGL完成的,我在Metal中找不到这样的函数 如何使用Metal和Swift对CametLayer进行深度测试 提前谢谢你 这是一个很好的例子。 关键是CametLa

最近我决定学习如何使用Swift的金属框架。我读了一些教程,看了一些视频,做了一些事情,最后我到了我必须使用深度测试的部分,以使事情看起来很好

我以前从未做过这样低级的图形编程,所以我环顾了整个互联网,了解深度测试是如何工作的,以及如何使用Cametlayer和Metal实现深度测试

然而,我发现所有深度测试的示例都是使用OpenGL完成的,我在Metal中找不到这样的函数

如何使用Metal和Swift对CametLayer进行深度测试

提前谢谢你

这是一个很好的例子。

关键是
CametLayer
不会为您维护深度贴图。您需要显式地创建和管理深度纹理。并将深度纹理附加到用于创建渲染编码器的深度模具描述符。

的问题包含您的答案,尽管它是用Obj-C编写的。但基本上,正如东风所指出的,您需要自己创建和管理深度纹理

下面是一个关于如何创建深度纹理的Swift 4片段

func buildDepthTexture(u设备:MTLDevice,u大小:CGSize)->MTLTexture{
设desc=MTLTextureDescriptor.texture2DDescriptor(
像素格式:.depth32Float_模具8,
宽度:Int(size.width),高度:Int(size.height),mipmapped:false)
desc.storageMode=.private
desc.usage=.renderTarget
返回设备。makeTexture(描述符:desc)!
}
下面是如何将其附加到
MTLRenderPassDescriptor

let renderPassDesc=MTLRenderPassDescriptor()
让depthAttachment=renderPassDesc.depthAttachment!
//depthTexture是使用上述函数创建的
depthAttachment.texture=深度纹理
depthAttachment.clearDepth=1.0
depthAttachment.storeAction=.dontCare
//可能会设置颜色附件等。

您能告诉我如何从过程创建深度纹理吗?