ক্রস প্ল্যাটফর্ম নিম্ন স্তরের গ্রাফিক API


11

যখন সিস্টেম বিমূর্ততা তৈরি করা হয় তখন প্ল্যাটফর্মটির আলাদা আলাদা API গুলি সর্বনিম্ন স্তরে সাধারণ ইন্টারফেসের মাধ্যমে লুকানো ভাল that

বিভিন্ন আধুনিক (কোনও স্থির ফাংশন পাইপলাইনবিহীন) নেটিভ গ্রাফিক্স API গুলি অ্যাকাউন্টে নেওয়া: ওপেনগ্লেস ২.০++, ওপেনজিএলএল 3.0+, ডাইরেক্টএক্স 10.0+, এক্সবক্স ডাইরেক্টএক্স 9, লিবিজিসিএম

যদি সবার মধ্যে বসে থাকার জন্য একটি রাষ্ট্রবিহীন নিম্ন স্তরের গ্রাফিক এপিআই তৈরি করা হয় তবে এটিকে যতটা সম্ভব পাতলা এবং দ্রুততর করার সর্বোত্তম উপায় কী হবে?


এপিআইকে রাষ্ট্রহীন হওয়ার প্রয়োজনীয়তা আকর্ষণীয়। ওপেনজিএল, উদাহরণস্বরূপ, রাষ্ট্রনায়ক, এবং আমি মনে করি যে একটি স্টেটলেস এপিআই যা এটি আরও বেশি উচ্চ স্তরের হলে এটি কেবল আবশ্যক হবে, যাতে এটি হয় না, উদাহরণস্বরূপ, প্রত্যেকের জন্য একই ম্যাট্রিকগুলি ধাক্কা দেওয়া এবং পপ করতে হবে isn't পৃষ্ঠ এটি রেন্ডার করে।
চাঁদমাইজার

অযথা রাষ্ট্র পরিবর্তনগুলি এড়ানো এখনও উচ্চ স্তরে প্রয়োগ করা যেতে পারে যেমন ডিভাইসে জমা দেওয়ার আগে তাদের রাজ্যের উপর ভিত্তি করে রেন্ডার কলগুলি বাছাই করে। এবং রাষ্ট্রটি কেবলমাত্র বর্তমানের থেকে আলাদা হলে সেট করে setting
NocturnDragon

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

হ্যাঁ, প্রতিটি ড্র কলের জন্য আপনার প্রয়োজন হবে, জাল তথ্য, মিশ্রণের অবস্থা, আবদ্ধ করার জন্য টেক্সচার, স্যাম্পলিং স্টেটস ইত্যাদি .. এপিআই না পরিবর্তন করেই অপ্টিমাইজেশন করা যেতে পারে। অথবা হতে পারে আমি আপনার মন্তব্যটি ভুল পড়ছি ..
NocturnDragon

উত্তর:


6

আমার দৃষ্টিকোণ থেকে যে সর্বনিম্ন স্তরটি বোঝা যায় তা হ'ল এমন কিছু যা রেন্ডারিংয়ের সাথে জড়িত সংস্থানগুলি সম্পর্কে কথা বলে - ভিবি / আইবি, উপস্থাপনা, টেক্সচার, শেডার, স্টেট ব্লকস ইত্যাদি about

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

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

(সিডনোট: আপনি যদি প্ল্যাটফর্ম-নির্দিষ্ট কৌশলগুলি বিশেষ ধরণের সংস্থান হিসাবে বিবেচনা করেন তবে আপনি এই পুরো ধারণাটি বেশ দূরে ঠেলে দিতে পারেন))

সুতরাং কোনও উপায়ে আপনি দুটি জিনিস তৈরি করবেন: একটি হার্ডওয়্যার রিসোর্স ম্যানেজার এবং এই সংস্থানগুলির একটি ডিএজি সেটআপ করার জন্য একটি সরঞ্জামকিট।


প্ল্যাটফর্ম-নির্দিষ্ট জিনিসগুলিকে সংস্থান হিসাবে বিবেচনা করার বিষয়ে আমি কখনই ভাবিনি। এটা খুব ভাল ধারণা মত শোনাচ্ছে! ধন্যবাদ।
NocturnDragon

10

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

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

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

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


এটি আসলে একটি ভাল আইডিয়া। এবং এটি আমি তৈরি করার চেষ্টা করছি এমন একটি ডিজাইনের অংশ, তবে আমার মনে যা ছিল তা হ'ল একটি সাধারণ নিম্ন স্তরের এপিআইয়ের শীর্ষে এই বৈশিষ্ট্যগুলি প্রয়োগ করা। তবে এটি এমন ঘটনা হতে পারে যে কয়েকটি বৈশিষ্ট্যের জন্য আপনাকে আরও কিছু নির্দিষ্ট ক্ষেত্রে নেটিভ এপিআইয়ের গভীরতর প্রয়োজন।
NocturnDragon

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

1

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

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

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


0

এমিল পার্সসন (হিউমাস) এর বিষয়ে জিপিইউ প্রো সম্পর্কে একটি নিবন্ধ রয়েছে

http://gpupro.blogspot.com/2009/12/making-it-large-beautiful-fast-and.html

রেন্ডারিংয়ের জন্য একটি ক্রস প্ল্যাটফর্ম ইন্টারফেস। এটি থাকার সুবিধাগুলি এবং কীভাবে আমরা DX9 কনসোল সহ একটি সাধারণ ইন্টারফেসে DX10 ক্র্যাশ করেছি এবং ভাল পারফরম্যান্স বজায় রেখেছি।


-4

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


4
এটি সত্যই প্রশ্নের উত্তর দেয় না, ওপেনজিএল এবং ডাইরেক্টএক্স উভয়ই (ওগ্রে 3 ডি, ইরলিখট ইত্যাদি দেখুন) গুটিয়ে রাখা খুব সম্ভব কিনা তা উল্লেখ করা উচিত নয়।
জেসন কোজাক

আপনি যে গেমগুলি খেলেছেন তা বিবেচনা করুন। তাদের মধ্যে কতটির কাছে ডাইরেক্টএক্স বা ওপেনজিএল ব্যবহারের বিকল্প রয়েছে? দুটি লাইব্রেরিতে যে কোনও একটিকে সমর্থন করতে সক্ষম হওয়ার জন্য অনেকে এই পরিমাণ মোড়ক তৈরি করে। আপনার একটি সীমাবদ্ধ কল্পনা আছে। :
রিকিট

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

1
প্রশ্নটি একটি ক্রস প্ল্যাটফর্ম স্টেটলেস নিম্ন স্তরের এপিআই সম্পর্কে। এসডিএল এবং অ্যালেগ্রো এর সাথে কিছু করার নেই।
NocturnDragon

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