ওপেনজিএলে "বাফার" এবং "অ্যারে" এর মধ্যে পার্থক্য?


12

আমি যখন ওয়েবজিএল বা ওপেনজিএলে ডক পড়ি তখন ফাংশন এবং অবজেক্টের নাম কীভাবে ব্যবহৃত হয় সে সম্পর্কে কিছু নিদর্শন দেখা যায়। তবে আমি বাফার অবজেক্ট এবং অ্যারের মধ্যে পার্থক্য বুঝতে পারি না।

এখানে "ভারটেক্স বাফার অবজেক্টস", "ভারটেক্স অ্যারে অবজেক্টস" এবং এমন কি কিছু ধরণের "বাফার অ্যারে" বা "অ্যারেবফার" রয়েছে।

ওপেনজিএল প্রসঙ্গে, যখন কোনও কিছু "অ্যারে" হয় এবং এর পরিবর্তে কখন এটি "বাফার" বলা উচিত?


কিছু দৃষ্টিকোণ, নেটওয়ার্কের মাধ্যমে ডেটা আনার এবং প্রাপ্ত সমস্ত কিছুর লগ সঞ্চয় করার কথা ভাবেন। আপনাকে সকেটটি পড়তে হবে এবং প্রাপ্ত ডেটা কোথাও রেখে দেওয়া উচিত যাতে আপনি এটিকে চারপাশে পাস করতে পারেন, এটি একটি বাফার। এটি প্রায়শই স্থানীয়ভাবে বিস্তৃত, গতিশীলভাবে বরাদ্দ করা সহজ তালিকার ধরণ হতে পারে। কখনও কখনও এটি একটি char* buffer = socketRead();(সিউডোকোড) এর মতো সহজ । অন্যদিকে লগ, পুরো অ্যাপ লাইফাইসাইকেলের মাধ্যমে থাকে। সুতরাং আপনি কোথাও একটি অ্যারে তৈরি করেন এবং সকেটটি পড়া শুরু করেন, যে কোনও সময় আপনি ডেটা পেয়ে গেলে অ্যারের সাথে এই অংশটি লেখেন, আপনাকে প্রাপ্ত সমস্ত ডেটার একটি ঝরঝরে তালিকা দেয়।
কেভিন

উত্তর:


5

ভার্টেক্স অ্যারে অবজেক্টের নামকরণ কিছুটা দুর্ভাগ্যজনক। আপনার অ্যাপ্লিকেশনটিতে / এর সাথে / এর আশেপাশে তিনটি পৃথক জিনিস (উপস্থিত হওয়ার আগে ব্যবহৃত) দেখা গিয়েছিল এবং নামগুলিতে "অ্যারে" বা "বাফার" সহ (যা আছে, historতিহাসিকভাবে) আলাদাভাবে নাম দেওয়া হয়েছে (ভাল, ফ্রেমবফার অবজেক্টগুলিও রয়েছে, তবে আমি তা উপেক্ষা করব)।

  1. আপনার অ্যাপ্লিকেশনটিতে আনুষ্ঠানিকভাবে এবং ঘটনাগতভাবে ডেটা থাকে তবে এটি ওপেনজিএল একযোগে টানা হয় (ভার্টেক্স-বাই-ভার্টেক্সের বিপরীতে)। এটি একবারে আপনি কীটিকে ভার্টেক্স অ্যারে বলবেন তা ছিল ।
    এর উদ্দেশ্য হ'ল ওপেনজিএল যেহেতু ডেটাটি সামঞ্জস্যপূর্ণ বলে প্রতিশ্রুতি দিয়েছিল তখন ওপিজজিএল পুরো জিনিসটি একবারে অনুলিপি করতে পারে এবং এজিপি বা একটি ব্লকের যেকোন কিছুতেই এটি চাপিয়ে দেয় since এটি আর বিদ্যমান নেই।
  2. "আবদ্ধ", অর্থাৎ সক্রিয় করা যেতে পারে এমন একটি হ্যান্ডেল দ্বারা ডেটা অস্পষ্ট এবং অ্যাক্সেসযোগ্য। ডেটা পারে মোটামুটি প্রধান মেমরি বাস বা গ্রাফিক্স কার্ডে বা একটি PCIe-mappable হয় অঞ্চল যাই হোক না কেন, কিন্তু উভয় ক্ষেত্রেই, আপনি সরানো যাবে আনুষ্ঠানিকভাবে ডেটা আপনার অ্যাপ্লিকেশন থেকে এসে নিজের না (এমনকি যদি এটা RAM- র মধ্যে এবং যদি শারীরিকভাবে হয় ) এটি - যদি আপনি বর্তমানে সম্পর্কিত এপিআইয়ের মাধ্যমে এটি "ম্যাপ" না করেন তবে কোনও লেখার যোগ্য (এবং কখনও কখনও পাঠযোগ্য) পয়েন্টারটি ফিরে পান। আপনি ডেটাতে যা ঘটে তা নিয়ন্ত্রণ করার ক্ষমতাও সীমাবদ্ধ (আপনি কিছু ইঙ্গিত দিতে পারেন, তবে এটি যথেষ্ট পরিমাণে)।
    ওপেনজিএল আরও বা কম অবাধে এই ডেটাটি সরাতে পারে এবং আপনাকে কেবল কখনও অনুমোদিত এপিআইয়ের মাধ্যমে বাফার থেকে / অনুলিপি করতে বা ম্যাপ করার সময় ডেটা অ্যাক্সেস করার অনুমতি দেওয়া হয়। এটিকেই আপনি বাফার অবজেক্টটি বলছেন (এটিতে শীর্ষস্থানীয় বাফার অবজেক্ট যদি এটিতে শিখুন থাকে তবে এটি চিত্রের ডেটা বা ইউনিফর্ম হতে পারে না, কেবল একবারই কেবল প্রথম দিকটিই সমর্থিত হয়েছিল)।
    এর উদ্দেশ্য হ'ল গ্যারান্টি দেওয়া ওপেনজিএল (নীতিগতভাবে) যা চায় তা করতে পারে, এটি এমনকি আঁকার আগেই এটি পিসিআইয়ের উপর দিয়ে বাফারটিকে অনুমান করতে পারে। এটি কাজ করে কারণ আপনার ডেটা মালিকানা নেই (ওপেনজিএল করে!) এবং আপনি কেবলমাত্র প্রদত্ত এপিআইয়ের মাধ্যমে এটি অ্যাক্সেস করতে পারেন, তাই এটি সর্বদা পরিচিত যে তথ্যটি বৈধ। ড্রাইভার এমনকি গ্রাফিক্স কার্ডে বাফার মেমরিটি ফেলে দেওয়ার বিকল্প বেছে নিতে পারে যখন এটির জন্য অন্য কোনও কিছুর জন্য মেমরি দরকার হয় এবং পরে যখন প্রয়োজন হয় তখন এটি তার গোপন অনুলিপি থেকে পুনরুদ্ধার করে।
  3. একটি সত্যই বোকা ভুল নাম যার জন্য আরও ভাল নামটি বাফার-সেট বা বর্ণনাকারী-সেট এর মতো কিছু হতে পারে, এটি কুখ্যাত ভারটিেক্স অ্যারে অবজেক্ট । এটি আপনার দৃষ্টিকোণ থেকে, অন্য অস্পষ্ট হ্যান্ডেলের (যা আপনি বাঁধতে পারেন) এর নীচে একসাথে বাফার হ্যান্ডলগুলির একটি সেট ছাড়া কিছু নয়। এটি হ'ল বাস্তবতা কিছুটা জটিল। আসলে, ভিএও প্রকৃত হার্ডওয়্যারটি কীভাবে কাজ করে তার অনেক কাছাকাছি। গ্রাফিক কার্ডগুলিতে প্রত্যেকটিতে প্রচুর পরিমাণে এন্ট্রি সহ বর্ণনাকারী সেটগুলি (কেবলমাত্র বাফারদের জন্য নয়, বরং নমুনার জন্যও) একটি অল্প সংখ্যক (প্রায়শই 2, 4 বা 8 এর মতো কিছু) থাকে যার মধ্যে তারা খুব দক্ষতার সাথে স্যুইচ করতে পারে ।
    এখন, ভারটিেক্স অ্যারে অবজেক্টের উদ্দেশ্য হ'ল এপিআই কলগুলির সংখ্যা হ্রাস করা এবং ওপেনজিএলকে অবশ্যই অভ্যন্তরীণভাবে তৈরি করা উচিত এবং অবশ্যই এটি যেমন কাজ করে তেমন হার্ডওয়্যারটি ব্যবহার করতে হবে hardware যদি আপনি 5 টি বাফার বেঁধে রাখেন, তবে প্রত্যেককে অবশ্যই কিছু ব্যয়বহুল চেকের মধ্য দিয়ে যেতে হবে এবং ড্রাইভারের ক্যাশে মিস করার জন্য প্রত্যেকেই একজন প্রার্থী, প্লাস্টিকের প্রত্যেককে একটি বর্ণনাকারী ইত্যাদি পরিবর্তন করতে গ্রাফিক্স কার্ডের সাথে যোগাযোগ করার প্রয়োজন হয় ইত্যাদি যদি আপনি পরিবর্তে হন তবে একটি ভিএও বাঁধুন, ড্রাইভার (প্রায়শই) কেবল গ্রাফিক্স কার্ডে বর্ণনাকারী সেটটি স্যুইচ করতে পারে এবং হয়ে যায়।

8

একটি ভার্টেক্স অ্যারে অবজেক্ট (ভিএও) এমন একটি বস্তু যা এক বা একাধিক ভার্টেক্স বাফার অবজেক্টগুলিকে ধারণ করে এবং একটি সম্পূর্ণ রেন্ডার করা অবজেক্টের জন্য তথ্য সংরক্ষণের জন্য ডিজাইন করা হয়।

( খ্রোনস থেকে টানা )

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

এটি এক উপায়। অন্যান্য উপায়গুলি এটি কাজ করতে পারে:

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

নীচের চিত্রটি এই পরবর্তী দুটি ক্ষেত্রে চিত্রিত করে।

এখানে চিত্র বর্ণনা লিখুন

নীচের লাইন: যদি "ভার্টেক্স অ্যারে" শব্দটি ওপেনগিএলে অযোগ্য হিসাবে ব্যবহৃত হয়, আপনি ধরে নিতে পারেন এর অর্থ ভিএও, যা ওপেনজিএল প্রসঙ্গে (বিশেষত) একটি বাফার থেকে আসলেই খুব আলাদা জিনিস thing

আপনার মন্তব্য সম্পাদনা করুন: GL_ARRAY_BUFFERউপরে বর্ণিত হিসাবে ভার্টেক্স অ্যাট্রিবিউট ডেটার জন্য সেই বাফার অবজেক্টটি ব্যবহার করার অভিপ্রায় নির্দেশ করে indicates এর কারণ এটি হল যে বাফারগুলি কেবল ভার্টেক্স গুণাবলীর জন্য ব্যবহৃত হয় না । তবে এটি যেহেতু সাধারণ ব্যবহারের ক্ষেত্রে এবং আপনি ভিএও সম্পর্কে জিজ্ঞাসা করছেন, আমি অন্যের মধ্যে যাব না; এখানে তবে সেট করা যেতে পারে এমন অন্যান্য ধরণের বাফারগুলির একটি তালিকা।


সুতরাং বাফারগুলি হ'ল: জিপিইউতে 1. এর আগে, ২. বেশিরভাগ সময় এক ধরণের ডেটা থাকে (কেবলমাত্র ভার্টেক্স, কেবল রঙ ইক্য্ট), ৩. ডেটা ইন্টারলিভড হয়, এটি ১১১১২২২২৩৩৩৩ ect। ৪. ডেটা অ্যাক্সেসের জন্য কোনও পদ্ধতি সরবরাহ করবেন না (বাফার [২] বা বাফার নয় [ভার্টেক্স_3434]) এখন, অ্যারেগুলি হ'ল: 1 বাফার সংগ্রহ, এটিতে থাকা বাফারগুলিকে কীভাবে পার্স করবেন সে সম্পর্কে তথ্য সংরক্ষণ করুন। (এটি অ্যারে স্টোর স্ট্রাইড , একটি উপাদানের আকার, অফসেটস, যাতে বাফারগুলি থেকে ডেটা সঠিকভাবে অ্যাক্সেস করা যায় right ঠিক?
কুকিট

১. বাফারগুলি উভয় প্রান্তে রয়েছে এবং সিপিইউ এবং জিপিইউর মধ্যে স্থানান্তর (সম্ভাব্য পিছনে এবং সামান্য), অন্যথায় আপনি কীভাবে ডিস্ক থেকে জাল লোড করার সময় জিপিইউতে আপলোড করার জন্য ডেটা তৈরি করবেন?? হ্যাঁ, উপাদানগুলি বাফার জুড়ে অভিন্ন ধরণের, তবে আপনি যে প্রযুক্তি ব্যবহার করছেন তার উপর নির্ভর করে প্রতিটি বাফার উপাদান হয় আদিম বা কোনও structপ্রকারের হতে পারে । ডেটা পারে ইন্টারলিভড্ হতে পারে অথবা সম্পূর্ণরূপে অভিন্ন, বাফার প্রতি হও। আপনি সেগুলিতে সূচক করতে পারেন ঠিক তেমনি সিপিইউতে traditionalতিহ্যবাহী সি অ্যারে দিয়ে। অ্যারে অবজেক্টস (এই সঠিক পরিভাষাটি ব্যবহার করুন বা নিজেকে বিভ্রান্ত করার জন্য শেষ করুন!) ... (নীচে অবিরত)
ইঞ্জিনিয়ার

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

সুতরাং, কেবল পেরেকটি আরও আঘাত করার জন্য ... লোকেরা এওয়ের আগে কেবল বিও ব্যবহার করে কীভাবে কাজ করবে? বা এও সর্বদা ওপেনগিলে উপস্থিত ছিল এবং এটি কেবল ভিএও যা পরে পরে ভিবিও চালু হয়েছিল?
কুকিট

@coobit io7m.com/documents/history-vertex-spec - এটি আপনাকে স্থির পাইপলাইন (পুরাতন স্কুল) ওপেনজিএল, থ্রিডিএফএক্স ইত্যাদি এবং আধুনিক, প্রোগ্রামেবল পাইপলাইন ওপেনজিএল এবং ডাইরেক্ট 3 ডি এর মধ্যে পার্থক্য সম্পর্কে ধারণা দেয়।
প্রকৌশলী

5

এই পরিভাষাটি ওপেনজিএল-এর ইতিহাসে মূল। সবচেয়ে গুরুত্বপূর্ণ যেটি মনে রাখতে হবে তা হ'ল, এখানে প্রাসঙ্গিক বেশিরভাগ জিএল সংস্করণগুলির জন্য ওপেনজিএল ক্রমবর্ধমানভাবে উন্নত হয়েছিল এবং এপিআই পরিবর্তন করার পরিবর্তে একটি ইতিমধ্যে বিদ্যমান এপিআইতে নতুন কার্যকারিতা যুক্ত করে।

ওপেনজিএল এর প্রথম সংস্করণে এই ধরণের কোনও কিছুই ছিল না। একাধিক glBegin / glEnd কল জারি করে অঙ্কন অর্জন করা হয়েছিল এবং এই মডেলটির একটি সমস্যা হ'ল ফাংশন কল ওভারহেডের ক্ষেত্রে এটি খুব অদক্ষ ছিল।

ওপেনজিএল 1.1 ভার্টেক্স অ্যারে প্রবর্তন করে এটিকে মোকাবেলার জন্য প্রথম পদক্ষেপ নিয়েছে। সরাসরি ভার্টেক্স তথ্য নির্দিষ্ট করার পরিবর্তে আপনি এখন এটি সি / সি ++ অ্যারে থেকে উত্স করতে পারেন - এই কারণে নাম। সুতরাং একটি শীর্ষবিন্দু অ্যারে কেবল এটি - একটি সূচি বিন্যাস এবং তাদের নির্দিষ্ট করার জন্য জিএল রাষ্ট্রের প্রয়োজন।

পরবর্তী বড় বিবর্তনটি জিএল 1.5 সাথে আসে এবং জিপিইউ মেমরিতে ভার্টেক্স অ্যারের ডেটা সিস্টেমে ("ক্লায়েন্ট-সাইড") মেমরির পরিবর্তে সঞ্চয় করার অনুমতি দেয়। জিএল 1.1 ভার্টেক্স অ্যারের স্পেসিফিকেশনের একটি দুর্বলতা হ'ল প্রতিবার আপনি এটি ব্যবহার করতে চাইলে ভার্টেক্সের ডেটার পুরো সেটটি জিপিইউতে স্থানান্তর করতে হবে; যদি এটি ইতিমধ্যে জিপিইউতে থাকে তবে এই স্থানান্তরটি এড়ানো যেত এবং সম্ভাব্য পারফরম্যান্স লাভ অর্জন করা যেতে পারে।

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

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

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

ভার্টেক্স অ্যারে অবজেক্টটি প্রবেশ করান, যা এই সমস্তগুলি একসাথে সংগ্রহ করে।

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


0

আমি কিছুক্ষণের মধ্যে ওপেনজিএল নিয়ে কাজ করি নি, তাই আমি কেবল অর্ধ-ডান হতে পারি। সাধারণত বলছেন: বাফাররা বিনা অপ্রকাশিত মেমরির একটি অ্যারে সঞ্চয় করে। একটি অ্যারে সংক্ষিপ্ত মেমরির একটি সাধারণ শব্দ।

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

আশা করি এটা কিছুটা সাহায্য করবে


তাহলে GL_ARRAY_BUFFER কী? কেন এটি বলা হয়েছিল? আপনার অনুমান অনুসারে এটি "অপরিবর্তিত
স্বচ্ছ

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

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