У меня есть проект MetalKit на MacOS, где все работает, как ожидалось, за исключением трафарета глубины.
Поскольку я смог найти только примеры трафарета глубины для iOS, я следую за ними. Приведенный ниже фрагмент вызывается сразу после создания конвейера рендеринга, но возвращаемое значение из newDepthStencilStateWithDescriptor кажется недопустимым (устройство и метка равны нулю).
Возможно, я неправильно настроил 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>
Обратите внимание, что трафарет глубины не работает и фрагменты рисуются в неправильном порядке.
-debugDescription
или отформатированные с помощью%@
), или вы сбрасываете их с помощью специального кода? Вы устанавливаете объект состояния трафарета глубины в кодировщике команды рендеринга? Вы работаете с включенным слоем проверки Metal? (Xcode включает его по умолчанию, но я не знаю, используете ли вы Xcode.) - person Ken Thomases   schedule 03.07.2018METAL_DEVICE_WRAPPER_TYPE
значение 1. - person Ken Thomases   schedule 03.07.2018