在使用可見性結果功能(通過在命令編碼器上調用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