मैं मेटल आईओएस स्विफ्ट उदाहरण के माध्यम से जा रहा हूं जो उनके द्वारा सुझाए गए ट्रिपल बफरिंग अभ्यास को समझने की कोशिश कर रहा है। यह वर्दी एनिमेशन के लिए डेमो के अंदर दिखाया गया है।इस कोड को स्विफ्ट में स्ट्रक्चर के मेमोरी गठबंधन आकार को कैसे मिलता है? बाइनरी परिचालनों की आवश्यकता क्यों है?
के रूप में मैं समझता हूँ कि यह स्मृति गठबंधन बस एक specefic वेतन वृद्धि कुछ बाइट राशि है कि डिवाइस वास्तव में पसंद करती है की एक बहु है कि कम से शुरू होता है। मेरा भ्रम कोड
// The 256 byte aligned size of our uniform structure
let alignedUniformsSize = (MemoryLayout<Uniforms>.size & ~0xFF) + 0x100
वे वर्दी संरचना के आकार और बाइट को खोजने के लिए इसका उपयोग करते हैं। मैं इस बारे में उलझन में हूं कि यहां बाइनरी ऑपरेशंस क्यों हैं, मुझे सच में यकीन नहीं है कि वे क्या करते हैं।
यदि यह इस संरेखित आकार को इस तरह बफर बनाने के लिए उपयोग किया जाता है। मैं काफी यकीन है कि बफर आवंटित करता है कि बाइट स्वचालित रूप से गठबंधन स्मृति और आगे से वर्दी के लिए स्मृति भंडारण स्थान के रूप में प्रयोग किया जाता है कर रहा हूँ।
let buffer = self.device.makeBuffer(length:alignedUniformsSize * 3, options:[MTLResourceOptions.storageModeShared])
इसलिए अनिवार्य रूप से बाइट गठबंधन स्मृति आवंटित करने की परेशानी से गुजरने के बजाय वे धातु को उनके लिए करते हैं।
क्या कोई कारण है कि उन्होंने let allignedUniformsSize =
पर उपयोग की जाने वाली रणनीति Int
या Float
आदि जैसे अन्य प्रकारों के लिए काम नहीं करेगी?
इस लाइन के लिए बहुत बहुत धन्यवाद, सामान्य अंकगणितीय संस्करण इतना अधिक पठनीय है! – zsero