ইউনিফর্ম বাফার ব্যবহার করুন (যেমন ডি 3 ডি লিঙ্গোর ধ্রুব বাফার )।
যতক্ষণ না আপনার সমস্ত ছায়াময় এই জাতীয় প্রতিটি বাফারের লেআউট এবং বাঁধাই পয়েন্টে একমত হন তারপরে আপডেট করা একটি হাওয়া হয়ে যায়। মডেলগুলির শেডারগুলি সম্পর্কে মোটেই কিছু জানার দরকার নেই। তাদের কেবলমাত্র তাদের ধ্রুবক বাফারে মডেল-ভিউ ম্যাট্রিক্স আপডেট করতে হবে এবং রেন্ডারিং পাইপলাইন এটি স্বয়ংক্রিয়ভাবে ব্যবহার করবে।
সর্বনিম্ন আমি যুক্তি দেব যে আপনার এমন দুটি বাফার থাকা উচিত। প্রথমটিতে আপনার প্রজেকশন ম্যাট্রিক্স, ক্যামেরা ম্যাট্রিক্স, কনটেনটেটেড ক্যামেরা-প্রজেকশন ম্যাট্রিক্স, ভিউপোর্টের তথ্য, হতাশার বিবরণ এবং ম্যাট্রিক্স বিপরীতগুলি সঞ্চয় করা উচিত। আপনার প্রতি দৃশ্যে একবারে এই বাফারটি আপডেট করতে হবে।
তারপরে প্রতিটি মডেলকে তার মডেল-ভিউ ম্যাট্রিক্স, সাধারণ ম্যাট্রিক্স, বিপরীতগুলি এবং উপাদানগুলির বৈশিষ্ট্যগুলি সঞ্চয় করতে অন্য একটি বাফার দিন। এটি প্রতিটি মডেলের জন্য একবার আপডেট করা হয় এবং আলাদা আপডেট পাসে করা যায় (যদি / উপযুক্ত হয়)। যদি আপনার একাধিক অবজেক্টের মধ্যে উপকরণ ভাগ করার ক্ষমতা রাখে তবে উপাদানীয় তথ্য তৃতীয় উপাদান-নির্দিষ্ট বাফারে স্থানান্তরিত করা উচিত।
একটি ফরোয়ার্ড শেডিং সেটআপে এটি সমস্ত বাতাকে অন্য একটি বাফারে এবং মুলতুবি-শেডিং করার জন্য কিছুটা অর্থপূর্ণ করে তোলে একইভাবে লাইট পাসের জন্য প্রতি-লাইট বাফারটি ব্যবহার করা বুদ্ধিমান হয় (একটি মডেল / ম্যাটেরিয়াল বাফারের স্থানে ব্যবহৃত) জ্যামিতি পাস)।
নোট করুন যে আপনাকে একসাথে বাফার ব্যবহারের জন্য জিএল-এর একটি হালকা আপ-টু-ডেট সংস্করণ প্রয়োজন (৩.১ বা একটি এক্সটেনশান; কিছু পুরানো তবে এখনও ইন-সার্ভিস ল্যাপটপগুলি ব্যতীত আজ প্রচলিত সাধারণ) এবং আপনার হতে মোটামুটি সাম্প্রতিক সংস্করণটি প্রয়োজন শেডার কোডের অভ্যন্তর থেকে নির্দিষ্ট আবদ্ধ স্থানে ইউনিফর্ম বাফারগুলিকে আবদ্ধ করতে সক্ষম (৪.২; এখনও অস্বাভাবিক তবে আরও ভাল হচ্ছে) অন্যথায় আপনাকে জিনিসগুলি সেট আপ করতে আপনার সিপিইউ-সাইড কোডে আরও কাজ করতে হবে (আপনার সিপিইউ কোডটি সঠিক বাঁধাই জানতে হবে) যাইহোক পয়েন্টস, সুতরাং এটি কোনও গুরুতর সমস্যার চেয়ে এটির একটি API গন্ধ বেশি)। ওপেনজিএল | ইএস 3.0 পর্যন্ত অভিন্ন বাফারগুলি যোগ করে নি যা দুর্ভাগ্যক্রমে এখনও বেশিরভাগ জনপ্রিয় মোবাইল প্ল্যাটফর্মগুলিতে অসমর্থিত।
যদি বাফারগুলি বিকল্প না হয় তবে আপনার সক্রিয় শ্যাডারের জন্য সূচী অবস্থানগুলি সঞ্চয় করতে কিছু বৈশ্বিক জায়গা প্রয়োজন হবে। glGetUniformLocation
আপনার শেডার লোড করার পরে আপনি সুপরিচিত নামগুলির জন্য সূচকগুলি (যেমন ModelViewMatrix
বা পছন্দ মতো) অনুসন্ধান করতে পারেন তবে এই সূচকগুলি সংরক্ষণ করুন। আপনার রেন্ডার এনাম মানগুলিকে মানচিত্রে যেমন আবদ্ধ শেডারটি সন্ধান করতে, সূচকটি সন্ধান করতে এবং সঠিকভাবে কল MODEL_VIEW
করতে একটি SetUniform
মোড়ক ফাংশনে পাস করেছে glUniform
। বাফার থেকে ক্লায়েন্ট কোড ব্যবহারে এটি কোনও বিশেষ বিশাল পরিবর্তন নয়, যদি আপনি সমস্ত ভালভাবে গুটিয়ে রাখেন তবে আলাদাভাবে প্রতিটি ইউনিফর্ম সেট করার দরকার নেই।
দেখুন GLSL Inteface ব্লক এবং ইউনিফর্ম বাফার অবজেক্টস ।