আমি মোবাইল প্ল্যাটফর্মের জন্য একটি স্প্রাইট ভিত্তিক 2 ডি গেমটি বিকাশ করছি এবং আমি গ্রাফিক্স রেন্ডার করতে ওপেনজিএল (ভাল, আসলে ইরলিচ্ট) ব্যবহার করছি। প্রথমে আমি একটি সহজ উপায়ে স্প্রাইট রেন্ডারিং বাস্তবায়ন করেছি: প্রতিটি গেমের অবজেক্টকে তার নিজস্ব জিপিইউ ড্র কল সহ কোয়াড হিসাবে রেন্ডার করা হয়, যার অর্থ যদি আমার 200 গেম অবজেক্ট থাকে তবে আমি ফ্রেমে প্রতি 200 ড্র কল করেছিলাম। অবশ্যই এটি একটি খারাপ পছন্দ ছিল এবং আমার গেমটি সম্পূর্ণ সিপিইউ আবদ্ধ ছিল কারণ প্রতিটি জিপিইউ ড্র কলটিতে কিছুটা সিপিইউ ওভারহেড Assosiacted হয়। জিপিইউ বেশিরভাগ সময় অলস থাকে।
এখন, আমি ভেবেছিলাম যে আমি বড় ব্যাচগুলিতে বস্তু সংগ্রহ করে এবং কেবল কয়েকটি ড্র কল দিয়ে এই ব্যাচগুলি রেন্ডার করে কর্মক্ষমতা উন্নত করতে পারি। আমি ব্যাচিং বাস্তবায়ন করেছি (যাতে প্রতিটি গেমের অবজেক্ট একই টেক্সচারটি ভাগ করে একই ব্যাচে রেন্ডার করা হয়) এবং ভেবেছিলাম যে আমার সমস্যাগুলি চলে গেছে ... কেবলমাত্র আমার ফ্রেমের হার আগের চেয়েও কম ছিল তা খুঁজে বের করতে।
কেন? ঠিক আছে, আমার কাছে 200 (বা আরও) গেম অবজেক্ট রয়েছে এবং সেগুলি প্রতি সেকেন্ডে 60 বার আপডেট হয়। প্রতিটি ফ্রেমে আমাকে সিপিইউতে উল্লম্বের জন্য নতুন অবস্থান (অনুবাদ এবং রোটেশন) গণনা করতে হবে (মোবাইল প্ল্যাটফর্মের জিপিইউ তাত্ক্ষণিক সমর্থন করে না তাই আমি এটি করতে পারি না), এবং প্রতি সেকেন্ডে 48000 করে (২০০ * 60 * 4) প্রতিটি স্প্রাইটের 4 টি শীর্ষ বিভাজন রয়েছে) কেবল খুব ধীর বলে মনে হচ্ছে।
পারফরম্যান্স উন্নত করতে আমি কী করতে পারি? সমস্ত গেমের অবজেক্টগুলি প্রতিটি ফ্রেমে চলন্ত / ঘোরানো (প্রায়) হয় তাই আমাকে সত্যই ভার্টেক্স অবস্থানগুলি পুনরায় গণনা করতে হবে। কেবলমাত্র অপ্টিমাইজেশন যা আমি ভাবতে পারি তা ঘূর্ণনের জন্য একটি সারণী যা আমি তাদের গণনা করতে না পারি। স্প্রেটসকে সহায়তা করবে? কোন কদর্য হ্যাক? আর কিছু?
ধন্যবাদ।