এখনও কি gl_quads ব্যবহারের সুবিধা আছে?


10

ঠিক আছে, আমি বুঝতে পেরেছি যে gl_quadads হ্রাস করা হয়েছে, এবং সুতরাং এগুলি আর ব্যবহার করার জন্য আমরা 'অনুমিত' নই। আমি আরও বুঝতে পারি যে একটি আধুনিক পিসি যখন গ্ল_কুয়েডস ব্যবহার করে কোনও গেম চালাচ্ছে আসলে দুটি ত্রিভুজ আঁকছে।

এখন, আমি শুনেছি যে এর পরিবর্তে একটি গেমটি ত্রিভুজ ব্যবহার করে লেখা উচিত। তবে আমি ভাবছি যদি ওপেনজিএল কীভাবে এই কোয়াডটিকে দুটি ত্রিভুজ করে তোলে, সেক্ষেত্রে কোয়াডস এখনও ব্যবহার করা কি সুবিধাজনক?

বিশেষত, আমি বর্তমানে বরং বড় বাফার অবজেক্টগুলি থেকে অনেকগুলি সংযোগযুক্ত কোয়াড সরবরাহ করছি। আমার যে ক্ষেত্রগুলিতে সাবধানতা অবলম্বন করতে হবে তা হ'ল আমি এই বাফার অবজেক্টগুলি তৈরি / আপডেট করতে ভাসমানগুলির ভেক্টরটি কত বড় ব্যবহার করি (আমার ভার্টেক্সে বেশ কয়েকটি অতিরিক্ত ভাসমানের মান রয়েছে এবং একটি বাফারে অনেকগুলি শীর্ষে রয়েছে - বৃহত্তম বাফারগুলি প্রায় 500KB)।

সুতরাং এটি আমাকে আঘাত করে যে আমি যদি আমার বাফার অবজেক্টগুলিকে ত্রিভুজ আঁকতে পরিবর্তন করি তবে এই ভার্টেক্স তথ্যটি 50% বড় হতে চলেছে (ছয়টি উল্লম্বটি 4 এর পরিবর্তে বর্গক্ষেত্র আঁকতে) এবং সিপিইউ উত্পন্ন করতে 50% বেশি সময় নেয়।

যদি gl_quads এখনও কাজ করে, আমি কি এখানে একটি সুবিধা পাচ্ছি, বা 50% অতিরিক্ত মেমরি এবং সিপিইউ সময়টি এখনও ওপেনএল-এর দুটি ত্রিভুজটিতে স্বয়ংক্রিয় রূপান্তরকরণে ব্যবহৃত হচ্ছে?


5
আমি নিশ্চিত যে ওপেনজিএল কিছু প্রকারের সূচিবদ্ধ ভার্টেক্স বাফারকে সমর্থন করে, যার অর্থ আপনি একটি কোয়াডের জন্য কেবল একই 4 টি শীর্ষটি সংরক্ষণ করেন এবং দুটি ত্রিভুজ তৈরি করতে পুরো উল্লম্বটি পুনরাবৃত্তি করার পরিবর্তে আপনি কেবল সূচকগুলি পুনরাবৃত্তি করেন: [0,1,2] , [2,3,0]


আমি বিশ্বাস করি যে জিএল স্পেক এখনও কিছু ক্ষেত্রে স্থির করে যেখানে কোয়াডের বিষয়গুলি অঙ্কন করা হয়, যেমন গ্লোপলিগনমোড (..., জিএল_লাইন) সহ।
ম্যাক্সিমাস মিনিমাস

উত্তর:


5

আপনার আসল গেমটি পরীক্ষা করুন। যদি কোয়াডগুলি দ্রুত হয় তবে সেগুলি ব্যবহার করুন। যদি না হয়, না।

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

সংক্ষেপে, পরীক্ষা। অনুমান করবেন না, এবং কার্যকারিতা পরামর্শের জন্য ইন্টারনেটকে জিজ্ঞাসা করবেন না। আমরা মাঝে মাঝে ঠিক থাকতে পারি তবে প্রায়শই আমরা হয় আপনাকে তারিখের তথ্য, আপনি যে নির্দিষ্ট পরিস্থিতিতে নেই তার উপর ভিত্তি করে ডেটা ফিড করব, অথবা আমরা নিজেরাই ইন্টারনেট বা সহকর্মীদের কাছ থেকে দ্বিতীয় হাত পেয়েছি (যারা নিজেরাই নাও করতে পারে) প্রথম হাতের অভিজ্ঞতা আছে)।


3

বিকল্পগুলি কি? ঠিক আছে, এর একটি বিকল্প হল জ্যামিতি শেডারগুলি ব্যবহার করা , একটি GL_LINES_ADJACENCYআদিম (4 টি শীর্ষে) কেটে যাওয়া এবং জিএসকে এই আদিমকে ত্রিভুজ স্ট্রিপে রূপান্তর করা। যাইহোক, এটি রেন্ডার করতে ধীর হতে চলেছে, কারণ জ্যামিতির শেডারগুলি রেন্ডার করতে সর্বদা ধীর হয় বলে ধরে নেওয়া উচিত ।

আরও ভাল পদ্ধতি হ'ল সূচিযুক্ত রেন্ডারিং ব্যবহার করা। এখানে আপনার দুটি বিকল্প রয়েছে: GL_TRIANGLESএবং GL_TRIANGLE_STRIPআদিম পুনরায় আরম্ভের সাথে। পরবর্তীটির ফলে সামান্য সংক্ষিপ্ত সূচক বাফার হবে (প্রতিটি কোয়াডের জন্য একটি সূচক)। যে কোনও কোয়াড রেন্ডারিংয়ের জন্য আপনি একই সূচক বাফারটিকে পুনরায় ব্যবহার করতে পারেন, সুতরাং আপনাকে সূচি বাফার আপডেট বা সংশোধন করার দরকার হবে না।

আমি স্বাক্ষরযুক্ত শর্টসকে সূচক প্রকার হিসাবে ব্যবহার করার পরামর্শও দেব। যদি আপনাকে একবারে আরও 16384 কোয়াড রেন্ডার করতে হয়, তবে সূচকগুলি অফসেট করতে glDrawElementsBaseVertex ব্যবহার করে একাধিক রেন্ডারিং কল করুন ।


সাম্প্রতিক কিছু বেঞ্চমার্কিং আমি এখন গ্লোমুল্ট্রিড্রআরাইগুলি এনভি এবং এএমডি উভয়ের দ্রুত পথ হতে দেখায় (ইন্টেলের সাথে বিরক্ত করে না) তাই অন্য একটি বিকল্প রয়েছে - ফ্যান বা স্ট্রিপ সহ গ্লোমুল্টিড্রআআর্রেস।
ম্যাক্সিমাস মিনিমাস

@ mh01: এর জন্য অঙ্কন কমান্ডগুলির ক্লায়েন্ট-সাইড অ্যারে প্রয়োজন। আপনি প্রয়োজন চাই glMultiDrawArraysIndirectএটা জিপিইউ-সাইড না। যা আপনি করতে পারেন তবে এটি হার্ডওয়্যারকে সীমাবদ্ধ করে।
নিকল বোলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.