প্ল্যাটফর্ম-অজানাস্টিক ভাবি: বাকি খেলা চলাকালীন আমি কিছু গ্রাফিকাল সংস্থান লোড করতে চাই।
নীতিগতভাবে, আমি প্রকৃত ফাইলগুলি আলাদা থ্রেডে লোড করতে পারি, বা এসিঙ্ক আই / ও ব্যবহার করে O তবে গ্রাফিকাল অবজেক্টের সাথে, আমি সেগুলি জিপিইউতে আপলোড করতে হবে এবং এটি (সাধারণত) কেবল মূল থ্রেডে করা যেতে পারে।
আমি এরকম কিছু দেখতে আমার গেমের লুপটি পরিবর্তন করতে পারি:
while true do
update()
for each pending resource do
load resource to gpu
end
draw()
end
ডিস্ক থেকে র্যামে পৃথক থ্রেড লোড সংস্থান থাকার সময়।
যাইহোক, যদি লোড করার জন্য অনেক বড় সংস্থান থাকে তবে এটি আমার একটি ফ্রেমের সময়সীমা মিস করতে পারে এবং শেষ পর্যন্ত ফ্রেমগুলি ড্রপ করতে পারে। সুতরাং আমি এটিতে লুপটি পরিবর্তন করতে পারি:
while true do
update()
if there are pending resources then
load one resource to gpu
remove that resource from the pending list
end
draw()
end
কার্যকরভাবে ফ্রেম প্রতি শুধুমাত্র একটি সংস্থান লোড করা হয়। তবে লোড করার জন্য যদি অনেকগুলি ছোট সংস্থান থাকে তবে সেগুলির সমস্ত লোড করাতে অনেকগুলি ফ্রেম লাগবে, এবং এতে প্রচুর অপচয় হবে।
সর্বোত্তমভাবে, আমি নিম্নলিখিত পদ্ধতিতে আমার লোড সময়টি পছন্দ করতে চাই:
while true do
time_start = get_time()
update()
while there are pending resources then
current_time = get_time()
if (current_time - time_start) + time_to_load(resource) >= 1/60 then
break
load one resource to gpu
remove that resource from the pending list
end
draw()
end
এইভাবে, আমি কেবলমাত্র একটি সংস্থান লোড করব যদি আমি সেই ফ্রেমের জন্য সময়টি করতে পারি তবে দুর্ভাগ্যক্রমে, একটি প্রদত্ত সংস্থান লোড করতে এটি কত সময় নেয় তা অনুমান করার জন্য এটির একটি উপায় প্রয়োজন এবং যতদূর আমি জানি, সাধারণত এটি করার কোনও উপায় নেই।
আমি এখানে কি মিস করছি? অনেক গেম কীভাবে তাদের সমস্ত জিনিস পুরোপুরি অবিচ্ছিন্ন এবং ড্রপ ফ্রেম বা চূড়ান্ত লোডিং সময় ছাড়াই লোড করতে পারে?