在使用可见性结果功能(通过在命令编码器上调用setVisibilityResultMode
)时,我使用MTLVisibilityResultModeBoolean
模式获取布尔值,告诉我是否有任何片段通过了可见性测试。macOS上的金属:可见性测试行为不正确
经过这一点摔跤后,我注意到,我实际上并没有使用此API获取布尔值。我似乎得到了一个uint
计数通过可见性测试的片段(像素??)的数量。我也不确定这个计数器的长度:它是32位的吗? 64位?
它实际上看起来像是表现得像MTLVisibilityResultModeCounting
,但我明确指定MTLVisibilityResultModeBoolean
。
这是一个金属错误吗?我担心这可能是我的笔记本电脑上的一个驱动程序错误,虽然它在我的MacBook Pro(包括Radeon Pro 460和Intel HD Graphics 530)上的两个GPU上都以同样的方式发生。
以下是我正在提取BOOL
:
uint32 *resultBuffer = [visibilityResultBuffer contents];
BOOL result = (*resultBuffer != 0);
这正常工作在我的测试,但我担心这可能不会在其他的GPU /驱动器正常工作,因为它似乎不匹配文档。任何想法的人?
这是我的坏@warrenm,我不知何故错过了这一段,并认为它是一个'BOOL'。然后再次,这个段落没有正确描述被写入的数据类型。我已经向Apple提交了一个文档错误。 – ldoogy
感谢您的报告。你能分享雷达号码吗? – warrenm
确实是@warrenm,它是29512495.谢谢你的帮助。顺便说一下,关于非零值的文本并不是我预期的那样。它位于“图形渲染:渲染命令编码器”下的“金属编程指南”中,但是当您查找“MTLVisibilityResultModeBoolean”的引用时,它所表示的只是“指示样本是否通过深度和模板测试”。 – ldoogy