繁体   English   中英

由于纹理使用问题,Apple的延迟渲染示例无法在Metal 2上运行

[英]Apple's deferred rendering example does not run on Metal 2 due to texture usage problems

我目前正在尝试找出如何以并行友好的方式执行以下过程。 它可以归结为以下步骤:

  1. 画一个三角形到一个小的纹理
  2. 在框架上绘制较小的纹理,以允许线性采样“模糊”三角形。

如果可以,那么我应该可以渲染场景。 问题是纹理不能同时具有读取和写入访问权限。 我不确定是否一直都是这种情况,还是只是在Metal中。

因此,我转到了苹果公司的延迟渲染示例,知道延迟渲染通过写入多个纹理并一起读取这些相同的纹理以在可绘制的屏幕上生成最终图像而起作用。 但是,运行它后,我遇到了与当前渲染代码相同的错误,其中colorAttachment[0] does not have usage that specifies _

我假设这是由于Metal或iOS的更改引起的。

值得注意的是,如果将其附加到XCode,它会立即崩溃,但是如果从主屏幕打开,它可以在冻结之前自行运行几秒钟。

如何对读写访问使用纹理? 为什么示例代码不起作用?

该示例代码无法正常工作,因为Apple选择在不更新示例的情况下进行重大更改。 它发生了。

这是您可以运行示例的最小更改集:

AAPLRenderer.mm行204上,添加:

shadowTextureDesc.usage = MTLTextureUsageRenderTarget | MTLTextureUsageShaderRead;

AAPLView.mm第130行上,添加:

desc.usage = MTLTextureUsageRenderTarget;

在153和178行上重复上述操作。

对于您的用例,您想使用MTLTextureUsageRenderTarget | MTLTextureUsageShaderRead 屏幕外渲染目标上的MTLTextureUsageRenderTarget | MTLTextureUsageShaderRead 这样一来,您就可以对其进行渲染,并在随后的过程中对其进行采样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM