GL_STATIC_DRAW বনাম GL_DYNAMIC_DRAW বনাম GL_STREAM_DRAW: এটা কি ব্যাপার?


11

ওপেনগিএলে বাফার অবজেক্ট ফাংশনগুলির ( glBufferData, glBufferSubDataএবং সম্ভবত আরও কয়েকজন) একটি প্যারামিটার রেখেছেন usage, যা ডকুমেন্টেশন দ্বারা অভিযুক্ত ব্যবহারের ইঙ্গিত হিসাবে বর্ণনা করা হয়েছে, সম্ভবত বাস্তবায়নটি আরও ভাল পারফরম্যান্সের ফলস্বরূপ সহায়তা করতে পারে।

ব্যবহার

ডেটা স্টোরের প্রত্যাশিত ব্যবহারের ধরণটি নির্দিষ্ট করে। সিম্বলিক ধ্রুবক হতে হবে GL_STREAM_DRAW, GL_STREAM_READ, GL_STREAM_COPY, GL_STATIC_DRAW, GL_STATIC_READ, GL_STATIC_COPY, GL_DYNAMIC_DRAW, GL_DYNAMIC_READ, অথবা GL_DYNAMIC_COPY
[...]
ব্যবহারটি কীভাবে বাফার অবজেক্টের ডেটা স্টোর অ্যাক্সেস হবে তা জিএল বাস্তবায়নের ইঙ্গিত। এটি জিএল বাস্তবায়নকে আরও বুদ্ধিমান সিদ্ধান্ত নিতে সক্ষম করে যা বাফার অবজেক্টের কার্য সম্পাদনে উল্লেখযোগ্যভাবে প্রভাব ফেলতে পারে। এটি অবশ্য ডেটা স্টোরের আসল ব্যবহারকে সীমাবদ্ধ করে না।

উইকি একইভাবে অস্পষ্ট:

এগুলি কেবলমাত্র ইঙ্গিতগুলি all এটি স্ট্যাটিক বাফারটি তৈরি হওয়ার পরে সংশোধন করা বা স্ট্রিম বাফারটি কখনই সংশোধন না করা পুরোপুরি আইনী ওপেনএল কোড।
[...]
এগুলি এমন প্রশ্ন যা কেবল সাবধানতার সাথে প্রোফাইলিং দিয়ে উত্তর দেওয়া যায়। এবং তারপরেও, উত্তরটি কেবলমাত্র সেই নির্দিষ্ট হার্ডওয়্যার বিক্রেতার কাছ থেকে নির্দিষ্ট ড্রাইভার সংস্করণের জন্যই সঠিক হবে।

মোটামুটি, এই পরামিতিটি কতটা প্রাসঙ্গিক? ড্রাইভাররা কি এটিকে আসলে বিবেচনায় রাখে, এবং যদি সেগুলি করে, আপনার অভিজ্ঞতায় এটি অনুশীলনে পারফরম্যান্সকে কতটা প্রভাবিত করে? আপনার কাছে কি শেয়ার করার ডেটা আছে?

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

উত্তর:


7

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

কিছু উল্লেখযোগ্য গেমস যা জিপিইউগুলির মধ্যে বেঞ্চমার্কের তুলনার জন্য ব্যাপকভাবে ব্যবহৃত হয় সেগুলি এই ইঙ্গিতগুলি সঠিকভাবে ব্যবহার করে না, তাই জিপিইউ বিক্রেতারা ইঙ্গিতগুলির সাথে মেলে না, তবুও সমস্ত ব্যবহার দ্রুত করতে একটি উত্সাহ রয়েছে।


4

কার্যত তারা একই হয়।

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

এই অস্পষ্টতা কারণেই glBufferStorage একটি জিনিস হয়ে ওঠে। আপনি বাফারের সাথে কী করতে সক্ষম হতে চান তা নির্দিষ্ট করে দিন (আপনি এটি বাফারসুবডাটার মাধ্যমে আপডেট করবেন কিনা, আপনি কোনও মানচিত্রের মাধ্যমে পড়বেন বা লিখবেন কিনা, ম্যাপিংটি কতটা সুসংগত, ম্যাপিংটি ব্যবহারের ক্ষেত্রে অবিচ্ছিন্ন থাকতে পারে কিনা) এবং এই সীমানার বাইরে যাওয়া একটি ত্রুটি।

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