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