У меня есть проект MetalKit на MacOS, где все работает, как и ожидалось, за исключением трафарета глубины.
Поскольку я смог найти только примеры шаблонов глубины для iOS, я следую за ними. Приведенный ниже фрагмент вызывается сразу после создания конвейера рендеринга, но возвращаемое значение из newDepthStencilStateWithDescriptor представляется недопустимым (устройство и метка оба имеют значение null).
Возможно, я неправильно настроил MTKView, но не уверен, потому что нет примеров трафарета глубины с использованием MTKView и MacOS.
Если бы кто-нибудь мог объяснить, как это могло произойти, как я мог бы отладить это, или если у них есть пример кода, который я мог бы сравнить с этим, было бы здорово.
desc := MTLDepthStencilDescriptor.alloc.init.autorelease;
desc.setDepthCompareFunction(MTLCompareFunctionLess);
desc.setDepthWriteEnabled(true);
desc.setLabel(NSSTR('MY DEPTH STENCIL'));
depthStencilState := device.newDepthStencilStateWithDescriptor(desc);
<MTLDepthStencilDescriptorInternal: 0x1003153a0>
label = MY DEPTH STENCIL
depthCompareFunction = MTLCompareFunctionLess
depthWriteEnabled = 1
frontFace:
stencilCompareFunction = MTLCompareFunctionAlways
stencilFailOperation = MTLStencilOperationKeep
stencilPassDepthFailOperation = MTLStencilOperationKeep
stencilPassDepthPassOperation = MTLStencilOperationKeep
stencilReadMask = 0xffffffff
stencilWriteMask = 0xffffffff
backFace:
stencilCompareFunction = MTLCompareFunctionAlways
stencilFailOperation = MTLStencilOperationKeep
stencilPassDepthFailOperation = MTLStencilOperationKeep
stencilPassDepthPassOperation = MTLStencilOperationKeep
stencilReadMask = 0xffffffff
stencilWriteMask = 0xffffffff
<MTLIGDepthStencilState: 0x1003241d0>
label = <none>
device = <null>
Обратите внимание, что трафарет глубины не работает, а фрагменты рисуются в неправильном порядке.