我正在通過Metal iOS Swift示例嘗試理解他們所建議的三重緩衝實踐。這顯示在統一動畫的演示中。這段代碼如何在swift中找到struct的內存對齊大小?爲什麼需要二元操作?
據我所知,它對齊的內存只是從一個特定的增量開始,這個增量是設備真正喜歡的字節數量的倍數。我的困惑是這行代碼
// The 256 byte aligned size of our uniform structure
let alignedUniformsSize = (MemoryLayout<Uniforms>.size & ~0xFF) + 0x100
他們用它來找到Uniforms結構的大小和字節。我很困惑爲什麼在這裏有二元操作,我真的不知道他們在做什麼。
如果它幫助這個對齊的大小用於創建像這樣的緩衝區。我確信緩衝區會自動分配字節對齊的內存,並且此後將用作制服的內存存儲位置。
let buffer = self.device.makeBuffer(length:alignedUniformsSize * 3, options:[MTLResourceOptions.storageModeShared])
所以,基本上,而不是經歷自己分配字節對齊內存的麻煩,他們讓金屬爲他們做。
是否有任何理由說他們使用的策略let allignedUniformsSize =
不適用於其他類型,如Int
或Float
等?
非常感謝這行,正常的算術版本更具可讀性! – zsero