Friday 22 March 2013

DirectX ဆိုတာ ဘာလဲ .?


တစ္ေန႔ ကညီေလးတစ္ေယာက္ ေမးလာပါတယ္ ဘယ္သူလဲ ေတာ့မမွတ္မိေတာ့ဘူး သူေမးတာက စက္ထဲမွာ ပါတဲ့ DirectX ဆိုတာ ဘာလဲ တဲ့ 
အခု မသိေသးသူမ်ားလဲ သိရေလေအာင္ ဒါကို သေဘာေပါက္ေလာက္ေအာင္ ေျပာေပးလိုက္ပါတယ္
 DirectX ဆိုတာMicrosoft က ဖန္တီးေပးထားတဲ့ API (Application Programming Interface) အစုအေ၀းတစ္ခုပါ။Microsoft က low-level programming အေသးစိတ္ကို လုပ္ေဆာင္ေပးထားၿပီး application programmer ေတြက အဲဒီ API ေတြကို သူတို႔ရဲ႕multimedia နဲ႔ game program ေတြမွာ စိတ္တိုင္းက် ယူသံုးႏိုင္ပါတယ္။ နာမည္ႀကီး Microsoft Windows operating system ေတြမွာDirectX ကို တစ္ပါထဲ ထည့္ေပးလိုက္ေလ့ ရိွပါတယ္။ New versionကိုလည္း ေနာက္ပိုင္းမွာ ထပ္ၿပီး install လုပ္လို႔လည္း ရပါတယ္။DirectX API ေတြက multimedia နဲ႔ game application developerေတြကို hardware devices ေတြနဲ႔ ဆက္သြယ္ လုပ္ေဆာင္ဖို႔ တဲ့ေနရာမွာlow-level interface ေတြရဲ႕ အစားထိုး အေနနဲ႔ အသံုးျပဳခြင့္ေပးႏို္င္ဖို႔ အတြက္ design လုပ္ထားတာ ျဖစ္ပါတယ္။ဒီေတာ့ game developer (programmer) ေတြအေနနဲ႔hardware ေတြရဲ႕ အေသးစိတ္ကို သိစရာမလိုပဲ၊ hardware specific codes
ေတြကို ေရးေနစရာ မလိုပဲနဲ႔ DirectX API ကို သိရံုနဲ႔ hardwareေတြနဲ႔ တုိက္ရိုက္နီးပါး ခ်ိတ္ဆက္ အလုပ္လုပ္လို႔ ရတာေပါ့။

DirectX က ဘာလို႔ လုိအပ္လာရတာလည္း လို႔ ဆိုရင္DOS ေခတ္မွာ ကထဲက programmer ေတြဟာ အမ်ိဳးမ်ိဳးေသာ game ေတြကို ေရးခဲ့ၾကပါတယ္။အဲဒီ အခ်ိန္တုန္းက game developer ေတြဟာ hardware device တစ္ခု ခ်င္းစီအတြက္ အဲဒီ device ရဲ႕ လုပ္ေဆာင္ႏိုင္စြမ္း ေတြကို အျပည့္အ၀ အသံုးခ်ႏိုင္ဖို႔ အတြက္ အေသးစိတ္hardware specific controlling code ေတြကို ေရးေပးဖို႔ လိုပါတယ္။ ဒါမွလည္း game ၇ဲ႕
 performance က ေကာင္းေကာင္း ရမွာပါ။ အဲဒီလို hardware specific code ေတြကို
ေရးႏိုင္ဖို႔အတြက္ game developer ေတြဟာ device တစ္ခု ခ်င္းစီရဲ႕ အခ်က္အလက္ေတြကို
နားလည္ သိေနဖို႔လည္း လိုပါတယ္။ Game developer ေတြအတြက္ အဲဒီ အခ်က္ဟာ
အခက္အခဲ တစ္ခု ျဖစ္ေစပါတယ္။ ဘာလို႔ လည္းဆုိေတာ့ အဲဒီအခ်ိန္တုန္းက hardware device
ထုတ္လုပ္သူေတြ (ဥပမာ- graphic card, sound card ဆိုပါေတာ့) ၾကားမွာ သတ္မွတ္ထားတဲ့
 သေဘာတူ ကိုက္ညီမႈရိွတဲ့ standard ဆိုတာ မရိွေသးပါဘူး။ ဒီေတာ့ game developer
တစ္ေယာက္က သူ႔ game ကို ေစ်းကြက္ထဲမွာ ရိွေနသမွ် hardware ေတြနဲ႔ အလုပ္လုပ္ဖို႔
ဆိုရင္ hardware အားလံုးအတြက္ specific code အမ်ိဳးမ်ိဳး ေတြကို သူ႔ game ထဲမွာ
 ထည့္ေရးေပးႏိုင္ဖို႔ လိုပါတယ္။ ဒါဟာလည္း game developer တစ္ေယာက္အတြက္ ႀကီးမားတဲ့ အခက္အခဲ တစ္ခုျဖစ္ေစပါတယ္။ ဒါေပမယ့္ ဒီနည္းပဲ ရိွတဲ့အတြက္ သူတို႔မွာ ေရြးခ်ယ္စရာ လမ္းမရိွပါဘူး။ ဒါေၾကာင့္ အဲဒီ အခ်ိန္တုန္းက game တစ္ခုဟာ hardware ပစၥည္း အကန္႔အသတ္နဲ႔ပဲ အလုပ္လုပ္ႏိုင္ေလ့ ရိွပါတယ္။

ဒါေၾကာင့္ game developer ေတြၾကားမွာ အမ်ိဳးမ်ိဳးေသာ hardware brands ေတြအတြက္ အားလံုးနဲ႔ အလုပ္လုပ္ႏိုင္မယ့္ standard interface တစ္ခုကို ေမွ်ာ္လင့္ခဲ့ၾကပါတယ္။ ဒါမွလည္း high-level application programmer ေတြအတြက္ hardware specific codes ေတြကို ေရးဖို႔ မလိုေတာ့မွာေပါ့။ပထမဆံုးအေနနဲ႔ Microsoft ဟာ Game Software Development Kit (GSDK) ကို ဖန္တီး ေပးခဲ့ပါတယ္။ဒါဟာ တစ္ကယ္ေတာ့ DirectX 1 ပါပဲ။ ပထမဆံုး ထြက္လာတဲ့ အဲဒီ DirectX 1 မွာ ကန္႔သတ္ခ်က္ေတြ၊ အားနည္းခ်က္ေတြ အမ်ားႀကီး ရိွေနပါတယ္။ ဒါေပမယ့္ DirectX 1 က developer ေတြအတြက္ သူတို႔ရဲ႕ application ေတြနဲ႔ hardware device ေတြၾကားမွာ common layer အလႊာ တစ္ခုအေနနဲ႔ အလုပ္လုပ္ျပႏိုင္ခဲ့ ပါတယ္။ ဒါေၾကာင့္ developer ေတြအတြက္ hardware ေတြနဲ႔ ဆက္သြယ္လုပ္ေဆာင္ရတာ အရမ္းကို လြယ္ကူ သြားေစခဲ့ ပါတယ္။ ဒါေၾကာင္ ့ပထမဆံုး ထြက္လာတဲ့DirectX 1 မွာ ကန္႔သတ္ခ်က္ေတြ၊ hardware ေတြကို support လုပ္တဲ့ ေနရာမွာ အားနည္းခ်က္ေတြ ရိွေနေပမယ့္ Microsoft ရဲ႕ ဒီ ႀကိဳးပမ္းမႈဟာ game နဲ႔ multimedia industry အတြက္ အေရးပါတဲ့ point တစ္ခု ျဖစ္လာခဲ့ပါတယ္။ အဓိက ကေတာ့ game developer ေတြအတြက္ အမ်ိဳးမ်ိဳးေသာ hardware devices ေတြနဲ႔ ဆက္သြယ္ လုပ္ေဆာင္ တဲ့ေနရာမွာ အရမ္းကို လြယ္ကူသြားေစခဲ့ပါတယ္။

DirectX ကို ဖန္တီးတဲ့ ေနရာမွာ Microsoft က ေနာက္ပိုင္းမွာ ပိုၿပီး အဆင့္ျမင့္တဲ့ နည္းပညာ ေတြ ေပၚလာရင္ အသစ္အသစ္ေတြ ထပ္ေပါင္းထည့္ႏိုင္ဖို႔၊ အဲဒီလို ရိွၿပီးသား DirectX ေပၚမွာ
 ေနာက္ထပ္ function အသစ္ေတြကို ထပ္ေပါင္းထည့္တဲ့ ေနရာမွာ backward compatibility လို႔ေခၚတဲ့ အေဟာင္းေတြနဲ႔ ကိုက္ညီမႈလည္း ရိွေစဖို႔ အတြက္ စဥ္းစားေပးခဲ့ပါတယ္။သေဘာက DirectX 7 ကိုသံုးၿပီး ဖန္တီးထားတဲ့ game တစ္ခုကို အသစ္ေပၚတဲ့DirectX 9 နဲ႔ အလုပ္လုပ္ရင္ ဘာျပႆနာမွ မရိွေအာင္ေပါ့။ အဒီလိုု ျဖစ္ေစဖို႔အတြက္ Microsoft က DirectX ကို COM (Component Object Model) ဆိုတဲ့ နည္းပညာ
အေပၚမွာ အေျခခံ တည္ေဆာက္ခဲ့ ပါတယ္။COM နဲ႔ တည္ေဆာက္ထားတဲ့ software object ေတြဟာ တစ္ျခား programmer ေတြကသူတို႔ကို အသံုးျပဳ ႏိုင္ဖို႔အတြက္ Interface ေတြကို အသံုးျပဳၾကပါတယ္။ အဲဒီ interfaceေတြထဲမွာ programmer ေတြက လွမ္းေခၚၿပီး ရယူ အသံုးျပဳႏိုင္တဲ့ methods (functions) ေတြ အမ်ားႀကီး ပါပါတယ္။ DirectX COM objects ေတြဟာ အသစ္ ထပ္ထည့္လိုက္လို႔ interface အသစ္ေတြ ပါလာရင္ေတာင္မွ အရင္ interface အေဟာင္း ေတြကိုလည္းလံုး၀ အလုပ္လုပ္ ေပးႏိုင္ပါတယ္။ COM object နည္းပညာကို အသံုးျပဳတဲ့ ေနာက္ထပ္ ေကာင္းတဲ့ အခ်က္က COM object ေတြဟာ သူတို႔ကို ဘယ္ programming language ကေနမဆို လွမ္းေခၚၿပီး သံုးလို႔ရပါတယ္။ ကန္႔သတ္ခ်က္ မရိွပါဘူး။ (COM အေၾကာင္းကို အေသးစိတ္ သိခ်င္ရင္ စာအုပ္ေတြ ရိွပါတယ္။ ေလ့လာၾကည့္ပါ။)

လက္ရိွ DirectX နည္းပညာကို layer နွစ္ခုနဲ႔ တည္ေဆာက္ထားပါတယ္။ API Layer နဲ႔ HAL (Hardware Abstraction Layer) ေတြလို႔ ေခၚပါတယ္။ Game developer ေတြနဲ႔ programmer ေတြက hardware ေတြနဲ႔ ဆက္သြယ္ဖို႔အတြက္ API layer နဲ႔ပဲ ဆက္သြယ္ဖို႔ လိုပါတယ္။ API Layer ကမွ HAL နဲ႔ ဆက္သြယ္ၿပီး hardware ေတြနဲ႔ တိုက္ရိုက္ ခ်ိတ္ဆက္မွာ ျဖစ္ပါတယ္။ ဒီေတာ့ ေတြးၾကည့္ရင္ HAL က hardware ေတြနဲ႔ တိုက္ရိုက္ ဆက္သြယ္ရမွာ ဆိုေတာ့ သူက hardware ေတြ အေၾကာင္းကို သိဖို႔ လိုတာေပါ့ေနာ္။ ဒီအတြက္ hardware deviceထုတ္လုပ္သူေတြက သူတို႔ရဲ႕ hardware ေတြအတြက္ DirectX HAL နဲ႔ ကိုက္ညီမႈရိွတဲ့
 device driver ေတြကို ဖန္တီးေပးၾကပါ လိမ့္မယ္။ DirectX compatible hardware ဆိုတာ အဲဒါမ်ိဳးေတြေပါ့။
ဒါေၾကာင့္ ကၽြန္ေတာ္တို႔က DirectX game တစ္ခုကို ဖန္တီးေတာ့မယ္ ဆိုရင္ HAL နဲ႔ တိုက္ရိုက္ ဆက္သြယ္ အလုပ္လုပ္ဖို႔ မလိုပါဘူး။ API Layer ကေပးထားတဲ့ interface ေတြ၊ function ေတြနဲ႔ပဲအလုပ္လုပ္ႏိုင္တယ္ဆိုရင္ ရပါၿပီ။ ဟိုးအရင္ DirectX version အေဟာင္းမွာတုန္းက HEL (Hardware Emulation Layer) ဆိုတာ သံုးခဲ့ပါေသးတယ္။ အခု ေနာက္ပိုင္းVersion ေတြမွာ မသံုးေတာ့ပါဘူး။ ဒါေၾကာင့္ အဲဒါ အေၾကာင္းကို အေသးစိတ္ မေျပာေတာ့ဘူးေနာ္။ ေနာက္ပိုင္း DirectX version ေတြမွာ HEL အစားPluggable Software Device ဆိုတဲ့ နည္းပညာကို အစားထိုးခဲ့ပါတယ္။ အဲဒါနဲ႔ ပတ္သက္ၿပီး အေသးစိတ္ သိခ်င္ရင္ DirectX Device Driver Kit (DDK) မွာပါတဲ့ documentation ကိုပဲဖတ္ၾကည့္ပါေနာ္။ Version ျမင့္လာေလေလ ေပးအပ္ထားတဲ့လုပ္ေဆာင္ႏိုင္စြမ္း ေတြလည္းမ်ားမ်ားလာေလ ျဖစ္ပါတယ္။ ေနာက္ဆံုးထြက္ DirectX versionနဲ႔ အလုပ္လုပ္ႏိုင္ ဖို႔အတြက္ အဲဒီ DirectX ကို support လုပ္တဲ့ hardware ေတာ့ ျဖစ္ရပါမယ္။ဥပမာ- Nvidia Geforce 4 Ti နဲ႔ Geforce FX (5) နဲ႔ က အျမန္ႏႈန္း core clock speed မွာအတူတူ ပါပဲ။ ဒါေပမယ့္ Geforce 4 Ti က DirectX 8 ကုိပဲ support လုပ္ၿပီး၊Geforce FX ေတြက DirectX 9 interface ေတြကို ေကာင္းေကာင္း support လုပ္ပါတယ္။ဒါေၾကာင့္ ဘယ္လိုပဲ ျဖစ္ျဖစ္ DirectX 9 ကိုသံုးၿပီး ဖန္တီးထားတဲ့ application ေတြကို run မယ္ဆိုရင္ Geforce FX က Geforce 4 ထက္ ပိုေကာင္း၊ ပိုတိက်တဲ့ ပံုရိပ္ေတြကို ရမွာ အေသအခ်ာပါပဲ။
ဒီေလာက္ဆိုရင္ သေဘာေပါက္ေလာက္မယ္ထင္ပါတယ္ေနာ္
|

No comments:

Post a Comment

အၾကံေလးေတြေပးပါလား

အခ်ိန္ရွိခုိက္လံု႕လစိုက္

Template Design by Shihara | Published by New Blog Themes
Powered by Blogger