কোনও টেক্সচার পরিবর্তন করা (এটিতে চিত্রিত করা) "রাষ্ট্রীয় পরিবর্তন" হিসাবে বিবেচিত?


11

গ্রাফিক্সের কনভেনশনটি হ'ল আরও বেশি স্টেট পরিবর্তন (শ্যাডার, বাঁধাই বাফার, বাঁধাই টেক্সচার ইত্যাদি) পরিবর্তনের চেয়ে কম রাষ্ট্র পরিবর্তন করা ভাল। টেক্সচারের জন্য, প্রতিটি বহুভুজের জন্য পৃথকভাবে একটি নতুন টেক্সচার বেঁধে রাখার চেয়ে একক আটলাস (স্প্রেটস / পাঠ্য রেন্ডারিংয়ের জন্য) ব্যবহার করে বহু বহুভুজ রেন্ডার করা আরও দ্রুত is

আমি যদি ক্রমাগত কোনও টেক্সচারের মাধ্যমে পেইন্টিং করে থাকি তবে এটি কি সত্য ধরে রাখে glTexSubImage2D? আমার কাছে (একটি নেটওয়ার্কের উপরে) ডেটা প্রবাহ আসছে যা প্রক্রিয়াজাতকরণের মধ্য দিয়ে যায় এবং তারপরে একবারে এক সারি একটি টেক্সচারে আঁকা হয়। অবিরাম স্ক্রোলটিতে ডেটা দৃশ্যত উপস্থাপন করা হয়।

আমি কি আরও বড় আয়তক্ষেত্রে রেন্ডার করা একটি টেক্সচারের চিত্রকর্মের চেয়ে আরও ভাল হতে পারি (পেইন্টেড ডেটা দেখার উদ্দেশ্যে)? এখানে ধারণাটি হ'ল আমার কেবলমাত্র একটি (বা দুটি) টেক্সচার আবদ্ধ থাকতে হবে যখন আমি কেবল এটি আঁকছি।

অথবা আমার প্রচুর ছোট আয়তক্ষেত্র আঁকতে হবে (পেইন্টিং করার পরে কেবল আয়তক্ষেত্রটি প্রকাশ করে)? আমি ধরে নিয়েছি যে আমি প্রতি আয়তক্ষেত্রের জন্য একটি টেক্সচার বেঁধে দেব।

উত্তর:


11

গ্রাফিক্স ডিভাইসে মেমরির একটি ক্ষেত্র আপডেট করা (একটি টেক্সচার, বাফার এবং এর মতো) একটি রেন্ডারিং স্টেট পরিবর্তন করার মতো নয়।

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

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

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

পার্শ্ব দ্রষ্টব্য হিসাবে, এনভিডির এই উপস্থাপনাটি প্রাসঙ্গিক এবং প্রচুর ভাল অন্তর্দৃষ্টি দেয়: ওপেনগিএলে জিরো ড্রাইভার ওভারহেডের কাছে যাওয়া


5
আমি নিশ্চিতভাবে জানি না, তবে আমি অবশ্যই সন্দেহ করব যে শেষ ফ্রেম বা দুটিতে রচনা করা হয়েছে এমন একটি টেক্সচারের উপর glTexSubI छवि পাইপলাইন স্টল করবে, যেহেতু পিসি ড্রাইভাররা প্রায়শই একটি ফ্রেম বা দুটি ফ্রেম বাফার করার চেষ্টা করে এবং সম্ভবত এটি হয় না একটি ছোট আপডেটের কারণে পুরো টেক্সচারের অনুলিপি তৈরি করতে চান। সুতরাং আমি আশা করব যে সর্বাধিক কর্মক্ষমতা অর্জনের জন্য টেক্সচার (বা পিক্সেল বাফার অবজেক্টগুলি) দ্বিগুণ বা ট্রিপল-বাফারিংয়ের প্রয়োজন হবে।
জন কলসবেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.