gpt4 book ai didi

metal - 如何使用 Metal 将深度缓冲区保存到纹理?

转载 作者:行者123 更新时间:2023-12-01 12:28:08 25 4
gpt4 key购买 nike

我想将深度缓冲区保存到 Metal 纹理中,但我尝试过的任何方法似乎都不起作用。

_renderPassDesc.colorAttachments[1].clearColor = MTLClearColorMake(0.f, 0.f, 0.f, 1.f);
[self createTextureFor:_renderPassDesc.colorAttachments[1]
size:screenSize
withDevice:_device
format:MTLPixelFormatRGBA16Float];

_renderPassDesc.depthAttachment.loadAction = MTLLoadActionClear;
_renderPassDesc.depthAttachment.storeAction = MTLStoreActionStore;
_renderPassDesc.depthAttachment.texture = self.depthTexture;
_renderPassDesc.depthAttachment.clearDepth = 1.0;

当我将 depthTexture 传递到我的着色器(它可以很好地处理来 self 的其他纹理的数据)时,我得到的只是红色像素。

当我将 clearDepth 更改为更接近零的值时,我得到更深的红色阴影。也许我在我的着色器中没有正确采样纹理?

fragment float4 cubeFrag(ColorInOut in [[stage_in]],
texture2d<float> albedo [[ texture(0) ]],
texture2d<float> normals [[ texture(1) ]],
texture2d<float> albedo2 [[ texture(2) ]],
texture2d<float> normals2 [[ texture(3) ]],
texture2d<float> lightData [[ texture(4) ]],
texture2d<float> depth [[ texture(5) ]])
{
constexpr sampler texSampler(min_filter::linear, mag_filter::linear);
return depth.sample(texSampler, in.texCoord).rgba;
}

最佳答案

使用 depth2d<float>而不是 texture2d<float>作为参数类型,并从深度纹理中读取一个 float float val = depth.sample(texSampler, in.texCoord);

关于metal - 如何使用 Metal 将深度缓冲区保存到纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37489545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com