শেডার প্রোগ্রামগুলি পরিবর্তন করার সময় আমার কি ইউনিফর্ম বা বৈশিষ্ট্যগুলি পুনরায় ফিরিয়ে দেওয়া দরকার?


11

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

সুতরাং, শেডার প্রোগ্রামগুলি স্যুইচ করার পরে বৈশিষ্ট্য এবং ইউনিফর্মগুলি পুনর্নির্মাণ করা (সাধারণভাবে) প্রয়োজনীয়? এবং কেন?

যদি তা হয় তবে প্রোগ্রামটি শুরু করার পরে এটি করার কোনও উপায় আছে এবং তাদের আবার কখনও স্পর্শ করতে হবে না (অভিন্ন মান নির্ধারণ ব্যতীত)?

উত্তর:


12

আপনাকে এতগুলি গুণাবলী পুনরায় ফিরিয়ে দেওয়ার দরকার নেই, যতক্ষণ আপনি নিশ্চিত করেন যে তাদের অবস্থান উভয় শেডারে একই থাকে। (সাধারণত layout(location = X)জিএলএসএল-তে বাক্যবিন্যাস ব্যবহার করে glBindAttribLocationতবে প্রাক্তন উপলভ্য না হলে এটিও করা যেতে পারে ))

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


আপনার ইউবিও লিঙ্কে: "শেষ অবধি, এগুলি বিভিন্ন প্রোগ্রামের মধ্যে তথ্য ভাগ করে নিতে ব্যবহার করা যেতে পারে So সুতরাং একক বাফারটি পরিবর্তন করে কার্যকরভাবে একাধিক প্রোগ্রামে ইউনিফর্মগুলি আপডেট করার অনুমতি দেওয়া যেতে পারে।"
Zouch
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.