मैंने हमेशा सोचा है कि एक अच्छे एसेट मैनेजर के पास ऑपरेशन के कई तरीके होने चाहिए। इन तरीकों से सबसे अधिक संभावना होगी कि एक सामान्य इंटरफ़ेस का पालन करने वाले अलग-अलग स्रोत मॉड्यूल होंगे। ऑपरेशन के दो बुनियादी तरीके होंगे:
- उत्पादन मोड - सभी परिसंपत्तियाँ स्थानीय हैं और सभी मेटा डेटा छीन लिए गए हैं
- डेवलपमेंट मोड - एसेट्स अतिरिक्त मेटा डेटा के साथ डेटाबेस (जैसे MySQL, आदि) में संग्रहीत किए जाते हैं। डेटाबेस एक साझा डेटाबेस को कैशिंग करने वाले स्थानीय डेटाबेस के साथ एक दो स्तरीय प्रणाली होगी। सामग्री निर्माता, साझा डेटाबेस को अपडेट और अपडेट करने में सक्षम होंगे और डेवलपर / क्यूए सिस्टम के लिए स्वचालित रूप से अपडेट किए जाएंगे। प्लेसहोल्डर सामग्री बनाना भी संभव होना चाहिए। चूंकि सब कुछ एक डेटाबेस में है, इसलिए उत्पादन की स्थिति का विश्लेषण करने के लिए उत्पन्न डेटाबेस और रिपोर्ट पर प्रश्न किए जा सकते हैं।
आपको एक उपकरण की आवश्यकता होगी जो साझा डेटाबेस से सभी एसेस्ट को पकड़ सके और उत्पादन डेटासेट बना सके।
एक डेवलपर के रूप में मेरे वर्षों में, मैंने कभी ऐसा कुछ नहीं देखा, हालांकि मैंने केवल कुछ मुट्ठी भर कंपनियों के लिए काम किया है, इसलिए मेरा विचार वास्तव में प्रतिनिधि नहीं है।
अद्यतन करें
ठीक है, कुछ नकारात्मक वोट। मैं इस डिज़ाइन पर विस्तार करूँगा।
सबसे पहले, आपको वास्तव में फैक्ट्री कक्षाओं की आवश्यकता नहीं है क्योंकि अगर आपको मिल गया है:
TextureHandle tex = pRm->getResource<Texture>( "test.otx" );
आप प्रकार जानते हैं, इसलिए बस करें:
TextureHandle tex = new TextureHandle ("test.otx");
लेकिन फिर, जो मैं ऊपर कहने की कोशिश कर रहा था, वह यह है कि आप वैसे भी स्पष्ट फ़ाइल नाम का उपयोग नहीं कर रहे हैं, जिस बनावट का उपयोग किया जाता है उस मॉडल को लोड करने की बनावट निर्दिष्ट की जाएगी, इसलिए आपको वास्तव में एक मानव पठनीय नाम की आवश्यकता नहीं है, यह 32 बिट पूर्णांक मान हो सकता है, जो सीपीयू को संभालना बहुत आसान है। तो, TextureHandle के लिए निर्माता में:
if (texture already loaded)
update texture reference count
else
asset_stream = new AssetStream (resource_id)
asset_stream->ReadBytes
create texture
set texture ref count to 1
डेटा का स्थान खोजने के लिए AssetStream रिसोर्स_ड पैरामीटर का उपयोग करता है। जिस तरह से यह किया गया है वह आपके द्वारा चलाए जा रहे पर्यावरण पर निर्भर करेगा:
विकास में: स्ट्रीम फ़ाइल नाम प्राप्त करने के लिए डेटाबेस (उदाहरण के लिए SQL का उपयोग करके) में आईडी दिखता है और फिर फ़ाइल को खोलता है, फ़ाइल को स्थानीय रूप से कैश किया जा सकता है, या सर्वर से खींचा जा सकता है यदि स्थानीय फ़ाइल मौजूद नहीं है या है तारीख से बहार।
रिलीज़ में: स्ट्रीम एक कुंजी / मान तालिका में ID को एक बड़े, पैक्ड फ़ाइल (जैसे Doom की WAD फ़ाइल) में ऑफसेट / आकार प्राप्त करने के लिए देखती है।