রিসোর্স ম্যানেজার - তারা কি ভাল?


20

আমি উত্স কোডে অনেক সময় দেখেছি, এর মতো জিনিসগুলি [ভাল, এটি আমার ছদ্ম সি ++ ধারণা বেশি]

typedef shared_ptr<Resource> ResourcePtr;// for ease  
ResourcePtr sound1 = resourceManager.Get<SoundResource>("boom.ogg");  
sound1->Play();  
ResourcePtr sprite = resourceManager.Get<Image>("sprite.png");

আমি ভাবছিলাম যে এই জাতীয় ক্লাসটি কতটা দরকারী, এমন কিছু:

  • মিডিয়া ফাইল লোড হয়েছে
  • স্মৃতিতে তাদের সংরক্ষণ করা
  • কোনও স্তরের শুরুতে - স্ক্রীন লোড হচ্ছে।
  • পরিষ্কার করা হয়েছে

একটি সিস্টেম থাকার চেয়ে:

  • সংস্থানগুলি কেবল সত্তা, বা আলগা করে থাকে।
  • মেমোরিতে নিজস্ব লোডের জন্য দায়বদ্ধ।

প্রথমটি হ'ল একজন 'ম্যানেজার'; আমার কিছু মনে হচ্ছে এটি ব্যবহার করা ভুল indicates যাইহোক, এটি লোড করা দরকার এমন সমস্ত কিছু সন্ধান করার আশেপাশে ঝাঁকুনির চেয়ে রিসোর্স নামের ভেক্টরের মতো কিছু পাস করার অনুমতি দেয়।



1
বেপারটা এমন না. আমি মনে করি এটি একটি বৈধ প্রশ্ন।
রিকিট

বেশ নয়, তবে অনুরূপ ক্ষেত্র এবং অনুরূপ উপকার / বিপরীতে। তবে ম্যানেজারের সাথে আপনি এমন কিছু জিনিস করতে পারেন যা আপনি ম্যানিফেস্টের সাথে করবেন না। উদ্ভাস হ'ল বোবা জিনিস যা কেবল একক সূচকগুলিতে পৃথক সংস্থানকে একত্রিত করে। একটি রিসোর্স ম্যানেজারের আরও অনেক বেশি দায়িত্ব থাকতে পারে এবং গেম ইঞ্জিনের সাথে আরও ভাল ইন্টারফেসিং থাকতে পারে।
মিঃ ক্র্যাঙ্কি

আমি মনে করি না আমি একই জিনিস জিজ্ঞাসা করছি এটি আপনার কাছে কোনও ধরণের ফাইল-পাথ সংক্ষিপ্ত হওয়া উচিত কিনা তা জিজ্ঞাসা করছে বলে আমি মনে করি, যেখানে আমি কোনও সংস্থান লোডার / ক্যাশে ধরণের জিনিসটি সাজানোর বিষয়ে জিজ্ঞাসা করছি। যাইহোক, আমি মনে করি যে আমি সম্পদের চেয়ে সম্পদ ব্যবহার করায় সমুদ্র সৈকতে উপস্থিত হয়নি।
কমিউনিস্ট হাঁস

2
@ ব্রায়ান, আমি একমত নই, "সম্পদ পরিচালকরা ভাল ধারণা" "কীভাবে আপনি সম্পদ পরিচালকদের প্রয়োগ করবেন" এর চেয়ে আলাদা প্রশ্ন। মঞ্জুর, কিছু লোক দ্বিতীয় প্রশ্নের প্রথম প্রশ্নের উত্তর দেওয়ার চেষ্টা করছিল যা অনেক উত্তর ওভারল্যাপের কারণ হতে পারে cause
টেট্রাড

উত্তর:


20

আপনার গেমের 'ইঞ্জিন' কতটা ভাল - এবং কতটা নমনীয় - তার একটি উত্তম সংস্থান পরিচালক key

এটি কেবল নিম্ন স্তরের রিসোর্স ম্যানেজমেন্টের সাথে অনেকগুলি সমস্যার সমাধান করে না, তবে এটি নিশ্চিত করতে সহায়তা করে যে সংস্থানগুলি কেবল একবার লোড করা হয়েছে, এবং তারপরে ইতিমধ্যে লোড করা থাকলে পুনরায় ব্যবহার করা হবে।

যদি রিসোর্স সিস্টেমটি ভালভাবে বিমূর্ত করা হয় তবে অন্তর্নিহিত বিশদগুলি ফাইল সিস্টেম, ফিজফেস স্টোরেজ, এসকিউএল এমনকি এর মধ্যে সতর্ক হতে পারে ...

আপনি কেবল একটি সংস্থান অনুরোধ করুন, এবং এটি আপনাকে দেওয়া হয়েছে।

রিসোর্স আইডি এবং এর মতো স্টাফ নিয়ে চিন্তার দরকার নেই।

সদৃশ সংস্থার দ্বন্দ্ব পরিচালনা ইত্যাদি etc.

রিসোর্স ম্যানেজারটিকে এটিকে সাজান।

আপনি কীভাবে এটি ডিজাইন করেন তার উপর নির্ভর করে - যদি সি ++ থাকে তবে মালিকানা সঠিকভাবে পরিচালিত হয়েছে তা নিশ্চিত করতে আপনার দৃশ্যের পরিচালনা ক্লাস (এস) এর সাথে বন্ধু করুন।

রিসোর্স পুল?

সমস্যা নেই.

রিসোর্স রিলিজ করতে ভুলে যাচ্ছেন?

সমস্যা নেই.

তারা যেখানেই থাকুক না কেন সম্পদের একই ইন্টারফেস: মেমরি, ডিস্ক, সংরক্ষণাগার, নেটওয়ার্ক।

সমস্যা নেই.

আপনি কি স্ট্রিমিং চান?

থ্রেডিং?

আপনার রিসোর্স ম্যানেজমেন্ট হাবটিকে এটি যত্ন নিতে দিন।

এবং আপনি আশ্বস্ত থাকতে পারেন যে যখন সংস্থানগুলি ব্যবহারের জন্য প্রস্তুত হবে তখন এটি আপনাকে জানাবে।

ওগ্রে থ্রি-র একটি খুব নমনীয় রিসোর্স ম্যানেজমেন্ট সিস্টেম রয়েছে তবে আমি নিশ্চিত যে সেখানে অন্যরাও আছেন।


1
আমি এই উত্তরের জন্য আপনাকে অবশ্যই ধন্যবাদ জানাতে হবে। আমি এটি পড়ার আগে একজন উত্সর্গীকৃত রিসোর্স ম্যানেজারের উপযোগিতা সম্পর্কে নিশ্চিত ছিলাম না এবং এখনই আমি খুব শীঘ্রই এর বাস্তবায়ন করব।
জ্যাক ম্যাকআর্থার

13

আমি সম্প্রতি একটি রিসোর্স ম্যানেজার লিখেছি যা আমার মামলার জন্য বেশ ভাল কাজ করে। প্রধান বৈশিষ্ট্য:

  • রিসোর্সগুলি স্ট্রিং আইডি দ্বারা অনুরোধ করা হয়, উদাহরণস্বরূপ ResourceManager::instance().getTexture("textures/player.png"),। টেক্সচার আইডি বর্তমানে সরাসরি ডিস্কের একটি ফাইলে ম্যাপ করা হয়েছে যা বিকাশের সময় সুবিধাজনক তবে এটি পরে কিছু সংরক্ষণাগারে লুকিয়ে প্রতিস্থাপন করা হবে।

  • রিসোর্স ম্যানেজার আইডির মানচিত্রে রিসোর্সগুলিকে ধারণ করে, সুতরাং এটি ইতিমধ্যে লোড হওয়া কোনও সংস্থান পুনরায় লোড করবে না।

  • উপরের কলটি কোনও Textureবস্তু নয়, বরং একটি Resource<Texture>অবজেক্ট ফেরত দেয় ; কলকারী আশা করে যে Resource<Texture>অবজেক্টটি সংরক্ষণ করবে এবং আসল জমিনটি নয়। Resource<Texture>একটি একটি স্মার্ট পয়েন্টার মত কাজ করে Texture; তার operator*()আয় Textureবস্তুর নিজেই। সুবিধাটি হ'ল আসল টেক্সচারটি সমস্ত ক্লায়েন্টকে আপডেট করার প্রয়োজন ছাড়াই পুনরায় লোড, বা আনলোড করা যায়।

  • রিসোর্স ম্যানেজার নিয়মিতভাবে ডিস্কের ফাইলগুলি পরিবর্তন হয়েছে কিনা তা পরীক্ষা করে দেখায় এবং প্রয়োজনে সেগুলি পুনরায় লোড করে। এটি আমাকে টেক্সচার বা শেডারগুলি সংশোধন করতে এবং গেমটি পুনরায় আরম্ভ না করেও ফলাফলটি দেখতে দেয়।

  • সম্পদ একে অপরের উপর নির্ভরশীল হতে পারে। বেশিরভাগ, সমস্ত না থাকলে, সংস্থানগুলি কোনও Fileসংস্থার উপর নির্ভর করে , যা সেই ফাইলটি যা তারা লোড করা হয়েছিল। উদাহরণস্বরূপ, কোনও মডেল কোনও টেক্সচারের উপর নির্ভর করে, যখনই টেক্সচারের ফাইলটি ডিস্কে পরিবর্তিত হয় তখনই মডেলটি পুনরায় লোড হবে।

  • যখন কোনও উত্স পাওয়া যায় না, বা লোড করতে ব্যর্থ হয়, তখন একটি ডিফল্ট সংস্থান নিঃশব্দে প্রতিস্থাপিত হয়। গেমটি ক্র্যাশ না করে এগুলি আমাকে এমন সংস্থানগুলি ব্যবহার করার অনুমতি দেয় যা আমি এখনও তৈরি করি নি। (পরিকল্পিত বৈশিষ্ট্য: জিপিজিপিইউ শেডারগুলির মতো "প্রয়োজনীয়" সংস্থানগুলি ইঙ্গিত করুন, এগুলি ছাড়াই গেমটি যথাযথভাবে চলতে পারে না))

  • রেফারেন্স গণনা এবং অব্যবহৃত সংস্থানগুলি আনলোড, সহজেই যুক্ত করা যায়। যেহেতু আমার খেলাটি বেশ ছোট, তাই এখনও আমার এটির প্রয়োজন হয়নি।

আমি মনে করি যে এই বৈশিষ্ট্য তালিকাটি দেখায় যে হ্যাঁ, সম্পদ পরিচালকরা ভাল হতে পারেন!


2

রিসোর্স ম্যানেজার থাকার অন্যতম কারণ হ'ল সংস্থান ভাগ করা of উদাহরণস্বরূপ, আপনি যখন কল করবেন resourceManager.Get("sprite.png"), যদি "স্প্রাইট.পিএনজি" ইতিমধ্যে লোড করা থাকে তবে রিসোর্স ম্যানেজার একটি নতুন চিত্র তৈরি এবং ডিস্ক থেকে পুনরায় লোড করার পরিবর্তে কেবলমাত্র ইতিমধ্যে লোড হওয়া স্প্রাইট রিসোর্সে একটি পয়েন্টার ফিরিয়ে দিতে পারে।

রিসোর্স ম্যানেজার রিসোর্সগুলিও ক্যাশে করতে পারে, যাতে কোনও উত্সের শেষ রেফারেন্সটি বাদ দেওয়া হলেও, অদূর ভবিষ্যতে পুনরায় লোড হওয়ার ক্ষেত্রে রিসোর্স ম্যানেজার এটিকে স্মৃতিতে রাখতে পছন্দ করতে পারে। রিসোর্স ম্যানেজারটি আপনার রিসোর্সের সাহায্যে সমস্ত মেমরি ম্যানেজমেন্ট স্বয়ংক্রিয়ভাবে পরিচালনা করার জন্য প্রোগ্রাম করা হবে।

অবশেষে, আমি মনে করি একটি খুব দরকারী বৈশিষ্ট্য হ'ল ইন-গেম রিসোর্সগুলি পুনরায় লোড করা। যেহেতু রিসোর্স ম্যানেজার সমস্ত গেমস রিসোর্সে হ্যান্ডলগুলি ধরে রেখেছে, আপনি এমন একটি ফাংশন তৈরি করতে পারেন যার ফলে সমস্ত সংস্থানগুলি ডিস্ক থেকে পুনরায় লোড করা যায় এবং গেমটি রিয়েল-টাইমে আপডেট করা যায় যা আপনার গেমের সাথে কাজ করে এমন শিল্পী / ডিজাইনারদের জন্য অত্যন্ত কার্যকর ।


1

আরেকটি সুবিধা হ'ল, ক্যাচিং এবং রেফারেন্স গণনা ছাড়াও এটি নির্ভরতাগুলি হ্যান্ডেল করতে পারে (মডেলটির একটি প্রয়োজনীয় টেক্সচার বি? আমি এটি আপনার জন্য পেয়ে যাব!) এবং লোড অর্ডার সমস্যাগুলি (শ্যাডার বি কী প্রয়োজন তা জানতে মডেলটির প্রয়োজন? আমাকে শেডার লোড করতে দিন) মডেল লোড করার আগে খ!)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.