গ্রাফিক্স ডিভাইসে মেমরির একটি ক্ষেত্র আপডেট করা (একটি টেক্সচার, বাফার এবং এর মতো) একটি রেন্ডারিং স্টেট পরিবর্তন করার মতো নয়।
রাজ্যের পরিবর্তনকে ব্যয়বহুল করে তোলে তা হ'ল নতুন রাজ্য (গুলি) যাচাই করতে এবং পাইপলাইনটি পুনরায় অর্ডার করতে ড্রাইভারকে কত পরিমাণ কাজ করতে হবে is এটি সম্ভবত সিপিইউ এবং গ্রাফিক্স ডিভাইসের মধ্যে কিছু সমন্বয় সাধন করবে। তবে, রাষ্ট্রীয় পরিবর্তনের জন্য ডিভাইসগুলির মধ্যে স্থানান্তরিত ডেটার পরিমাণ খুব কম হওয়া উচিত (সম্ভবত কয়েকটি কমান্ড))
অন্যদিকে টেক্সচার / বাফার আপডেটের জন্য, মূল ব্যয়টি ডেটা স্থানান্তরের মধ্যেই পড়ে। তত্ত্ব অনুসারে, আপনি আপডেটের পরে টেক্সচার ডেটা সিপিইউতে ফিরে না পড়লে কোনও সিঙ্ক্রোনাইজেশন বা পাইপলাইন স্টল থাকা উচিত নয়। তবে, অন্য দিকটি বিবেচনা করা উচিত: এপিআই ওভারহেড। এমনকি আপনি গ্রাফিক্স ডিভাইসে যে পরিমাণ ডেটা প্রেরণ করছেন তা যদি সামান্য হয় তবে আপনি যদি প্রায়শই পর্যাপ্ত পরিমাণে এটি করেন তবে অবশেষে ড্রাইভার / ডিভাইসের সাথে যোগাযোগের ব্যয় আরও বেশি হয়ে যাবে তবে ডেটা স্থানান্তর ব্যয়। রেন্ডারারকে অনুকূলকরণ করার সময় ব্যাচিং কেন এত গুরুত্বপূর্ণ তা অন্য কারণ।
সুতরাং আপনার ক্ষেত্রে, সর্বোত্তম পদ্ধতির বিষয়টি আমার কাছে মনে হয়, আপনি যখনই নতুন ডেটা আসেন তখন আপনি যে টেক্সচারটি আপডেট করেন তার একটি সিস্টেম-মেমরি কপি রাখবেন। একটি নোংরা পতাকা সেট করুন এবং glTexSubImage
পুরো টেক্সচারের (বা এর বৃহত অনুক্রমিক অংশ) জন্য একটি হিসাবে যথাসম্ভব আপডেট একত্রিত করুন । আপনি পিক্সেল বাফার অবজেক্টগুলির সাথেও খেলতে পারেন এবং পাইপলাইন স্টলগুলিকে যতটা সম্ভব কমাতে অ্যাসিনক্রোনাস ডেটা স্থানান্তর করার চেষ্টা করতে পারেন। আপনি যদি একরকম ডাবল বাফারিং বাস্তবায়ন করতে পারেন তবে আপনি অন্যটির সাথে রেন্ডার করার সময় আপনি টেক্সচারের একটি অনুলিপিটিতে লিখতে পারেন। এই টিউটোরিয়ালযে দৃশ্যের অন্বেষণ। এটি আমার স্বজ্ঞাত পন্থা, আমি API কলগুলি এবং "ব্যাচ" টেক্সচারের আপডেটগুলি কমিয়ে দেওয়ার চেষ্টা করব। বলা হচ্ছে, এটি খুব অনুমানমূলক এবং আপনার ব্যবহারের ক্ষেত্রে সর্বাধিক পারফরম্যান্ট কোনটি তা নিশ্চিত করে জানতে আপনাকে অন্যান্য প্রোফাইলগুলির সাথে প্রোফাইল এবং তুলনা করতে হবে several
পার্শ্ব দ্রষ্টব্য হিসাবে, এনভিডির এই উপস্থাপনাটি প্রাসঙ্গিক এবং প্রচুর ভাল অন্তর্দৃষ্টি দেয়: ওপেনগিএলে জিরো ড্রাইভার ওভারহেডের কাছে যাওয়া ।