আমাদের কথা খুঁজে নিন

   

ওপেনজিএল ও ডাইরেক্ট এক্স একই সাথে ব্যবহার

I am a shader programmer.

কিভাবে একই রকম একাধিক API ব্যবহার করা যায় একই প্রোগ্রামে একাধিক API ব্যবহার করা কঠিন মনে হলেও আসলে একজন প্রোগ্রামার তা সহজেই করতে পারে। তবে প্রথমেই যেটা দরকার সেটা হল যে প্লাটফর্মে চলবে প্রোগ্রামটা তাতে ঐ API গুলো সাপোর্ট করতে হবে। প্রথমেই চিন্তা করুন যে আমাদের API দুটো হল OpenGL ও DirectX এবং আমাদের প্লাটফর্ম হল বিখ্যাত উইন্ডোজ। হয়তো মনে করতে পারেন যে একটি SDI প্রোগ্রামে একই সাথে এই দুটি API ব্যবহার হয়তো খুবই কঠিন হবে। কিন্তু আমি বলছি যে আপনারা যতটা ভাবছেন মোটেই ততটা না।

হয়তো মনে হতে পারে যে OpenGL কিভাবে বুঝবে যে DirectX কি করছে। আবার DirectX কিভাবে বুঝবে যে OpenGL কি করছে। অর্থাৎ কিভাবে এক API অন্য API -র ফাংশনগুলো বুঝবে। যদিও এই দুটো API ব্যবহার করতে গেলে অনেক সমস্যা সামনে আসবে কিন্তু তা সমাধানের পথ অবশ্যই আছে। যদি এটা একেবারেই অসম্ভব হত তো অন্যান্য প্রোগ্রাম যারা দুটো API ই ব্যবহার করে সেগুলো যেমন 3D Studio Max, Maya, Poser, Bryce ইত্যাদি কিভাবে কাজ করে।

অর্থাৎ এই কাজ যে সম্ভব তা নিশ্চিত হওয়া গেল। যদি API দুটি একই রকম না হয় তাহলে কোন সমস্যাই নাই। যেভাবেই চান কাজ হবে। কিন্তু একই রকম হলে? যদি আপনার কোন প্রোগ্রামে একাধিক একই রকম (যেমন OpenGL এবং DirectX) API প্রয়োজন হয় কিন্তু একই সময় একই সাথে প্রয়োজন না হয় তাহলে তো কাজটা খুবই সোজা হয়ে গেল। শুধু মাত্র if-else স্টেটমেন্ট ব্যবহার করুন এটা চেক করার জন্য যে কোনটা সক্রিয় আছে এবং তারপরে আপনার নিজের মতো করে Initialize করে ফেলুন।

কিন্তু যদি একই উইনডোতে একই সময়ে একটি মাত্র কাজ করতে একাধিক API ব্যবহার করার প্রয়োজন হয় তবে আপনাকে একটু খাটতে হবে। প্রথমেই আসে দুটি API -র Initialization এর ব্যাপার। এই অংশটি আপনাকে খুবই সাবধানে করতে হবে। আপনাকে একটি উইনডোর জন্য দুটি (আপনি যদি তিনটা API ব্যবহার করতে চান তাহলে আপনাকে তিনটা ব্যবহার করতে হবে) হ্যান্ডেল বানাতে হবে (যদিও এই সব কাজ একটি হ্যান্ডেলের মাধ্যমেও করা যায় তাহলেও এটাই প্রধান বিষয় না)। আপনাকে দুটি API -র জন্যই প্রায় একই Initialization করতে হবে।

অর্থাৎ OpenGL ও DirectX এর জন্য একই রকম Pixel Format রাখতে হবে। যদি Pixel Format একই না হয় তো যা চাচ্ছেন তা নাও বের হতে পারে। আপনি যদি ৮ বিট লাল রং, ৮ বিট সবুজ রং, ৮ বিট নীল রং ও ৮ বিট আলফা ব্লেন্ডিং এর জন্য নেন OpenGL এর জন্য তাহলে আপনাকে তা DirectX এর জন্যও নিতে হবে। কোন API দিয়েই উইনডোটি মুছবেন না কেননা তাতে সমস্যা হয়ে যাবে। এবং দুটি API একই সাথে কাজ করবে না।

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

তাহলেও অত খুশী হওয়ার দরকার নেই যে আপনি কোন অসাধ্য সাধন করেছেন, এজন্য আল্লাহর কাছে দোয়া করেন এজন্য যে আপনার প্রোজেক্টটি ঐ Pixel Format সেটিংসকে কাটিয়ে গেছে। আমি আপনাদের বলব যে তারাতারি ঐ Pixel Format দুটো একই করে দিন। আপনার এমন অবস্থায় বেশী সুবিধা সম্পন্ন Pixel Format কে কম সুবিধা সম্পন্ন Pixel Format এ রুপান্তর করুন। দুটি API একই সাথে ব্যবহার করতে এক API-র কোন প্রয়োজন নাই অন্য API-র কমান্ড বোঝার। কিন্তু আপনাকেই বুঝতে হবে যে কোন API কি করছে।

অর্থাৎ DirectX এবং OpenGL এর কোন প্রয়োজন প্রয়োজন নাই একে অপরের কমান্ড বোঝার। কিন্তু আপনাকে অবশ্যই বুঝতে হবে এদের কাজ। আপনার স্বচ্ছ ধারনা রাখতে হবে দুই API সম্পর্কে। মনে করেন যে একটি রাস্তায় আমাদের একটি মটর সাইকেল বানাতে হবে। এটি যদি আমরা দুইটি API দিয়ে করতে চাই তাহলে প্রথমে মনে করেন OpenGL দিয়ে আমরা রাস্তাটা বানালাম।

তারপরে আমাদের হিসাব করতে হবে যে কোন জায়গায় মটর সাইকেলটা বসাতে হবে। এবং পরে আমরা DirectX দিয়ে মটর সাইকেলটা বসাব। আপনি যদি ম্যাক অপারেটিং সিস্টেমে OpenGL এবং Glade ব্যবহার করতে চান তাহলেও একই রকম কাজ করতে হবে। আপনি যদি DirectX, OpenGL, GDI, Maya API একই সঙ্গে একটি উইনডোজ বেজসড প্রোগ্রামে ব্যবহার করতে চান তাহলেও একই রকম কাজ করলেই চলবে। তবে এতক্ষন আমরা এমন প্লাটফর্মই ব্যবহার করে আসছি যারা একাধিক API সাপোর্ট করে।

কিন্তু এমনও প্লাটফর্মও আছে যেখানে একাধিক API ব্যবহার করতে পারবেন না। এরকম কয়েকটি প্লাটফর্ম হল XboX360, PS3, Nintendo GameCUBE ইত্যাদি। এগুলো বর্তমানে ৬৪ বিটের প্রোসেসিং ব্যবহার করে। কিন্তু আমাদের মনে রাখতে হবে যে আমরা কেন একাধিক API ব্যবহার করছি। এজন্য যে আমরা অনেক বেশী সুবিধা পেতে চাই।

কিন্তু মনে করুন আপনি সকল সুবিধা এমনিতেই পাচ্ছেন তাহলে আপনি কেন একাধিক API ব্যবহার করবেন? PS3, XboX360 Nintendo GameCUBE ইত্যাদির যে নিজস্ব API আছে তা অন্য সব API-র চেয়ে বেশী সুবিধা দেয়। এজন্য এই সব প্লাটফর্মে অন্য API ব্যবহার করা লাগে না বা কেউ চায়ও না। তারা আপনাকে যে গ্রাফিক্স দিবে তা দেখতে একেবারে বাস্তবের মত। আমি তাদের বাস্তবিক দুনিয়া বলি। যদি না বিশ্বাস হয় তাহলে 'Heavy Rain' নামক গেমটা PS3 তে খেলে দেখুন, বুঝতে পারবেন।

ঠিক আছে কোন দুঃখ করার কিছুই নেই কম্পিউটারেই প্রোগ্রাম করেন। কেননা PS3, XboX360 ও Nintendo GameCUBE এ প্রোগ্রাম করতে গেলে ও গুলোর SDK প্রয়োজন হয় যার দাম অনেক। এবং এ সম্পর্কে বলতে গেলেও অনেক সময় লাগবে এবং একটি বই লেখা লাগবে। যা এখন এবং এখানে সত্যই অসম্ভব। - মাজহার আহমেদ


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

প্রাসঙ্গিক আরো কথা
Related contents feature is in beta version.