我想将深度缓冲区保存到金属质地中,但我尝试的任何东西似乎都无法工作。
_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
传递到我的着色器(对我的其他纹理中的数据工作正常)时,我得到的只是红色像素。
当我将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;
}
答案 0 :(得分:4)
使用depth2d<float>
代替texture2d<float>
作为参数类型,并从深度纹理float val = depth.sample(texSampler, in.texCoord);
中读取浮点数
答案 1 :(得分:0)
好的,事实证明我只需要使用depth2d而不是texture2d:
depth2d<float> depth [[ texture(5) ]])