Tuesday, September 16, 2008

Connect DirectX with Visual C++

Microsoft DirectX ဆုိတာ game န႔ဲ multimedia ေလာကမွာ နာမည္ၾကီးပါ။ DirectX API ကို programming language ေတာ္ေတာ္ မ်ားမ်ားကေန လွမ္းေခၚ သံုးလို႕ ရပါတယ္။ ကၽြန္ေတာ္ကေတာ့ C/C++ သမား ဆိုေတာ့ Visual C++ နဲ႔ DirectX ကို ဘယ္လို ခ်ိတ္သံုးရမယ္ ဆိုတာ ေရးျပေပး ပါ့မယ္။ အမွန္က GLUT နဲ႔ Visual C++ ကို ခ်ိတ္တတ္ရင္ DirectX ကလည္း လုပ္ရတာ အတူတူပါပဲ။
Visual C++ မွ မဟုတ္ပါဘူး။ ဘယ္ IDE နဲ႔မဆို ခ်ိတ္လို႔ရေအာင္ အရင္ဆံုး API (Application Programming Interface) နဲ႔ programming language (IDE) တစ္ခု ကို ခ်ိတ္တဲ့ သေဘာတရားေလး ကို ေျပာျပခ်င္ပါတယ္။
ဘယ္ IDE (Integrated Development Environment) မွာမဆို သူနဲ႔ ျပင္ပက external add-on libraries ေတြကို ခ်ိတ္ဆက္ၿပီး အလုပ္လုပ္ႏိုင္ဖို႔ လုပ္ေဆာင္ခ်က္ေတြ ပါပါတယ္။ တစ္ခုခု နဲ႔ တစ္ခု လုပ္ရတာကြာ ေပမယ့္ သေဘာတရားက အတူတူပါပဲ။ ဥပမာ- C/C++ environment မွာဆိုရင္ ျပင္ပက API အသစ္ တစ္ခုခု နဲ႔ ခ်ိတ္ၿပီး သံုးမယ္ဆိုရင္ အဲဒီ API မွာ အပိုင္း ႏွစ္ပိုင္း ပါလာပါ လိမ့္မယ္။ ပထမ တစ္ခုက header file (include file) ေတြ၊ ဒါမွမဟုတ္ precompiled header file ေတြ ပါပါတယ္။ ေနာက္တစ္ပုိင္းက compiled (binary ထုတ္ၿပီးသား) library (.lib) file ေတြ ပါပါတယ္။ ဒီေဘာတရားက အေျခခံအားျဖင့္ API အားလံုးမွာ အတူတူပါပဲ။ C/C++ programming IDE နဲ႔ ခ်ိတ္ဖို႔အတြက္ အဲဒီ အပိုင္း ႏွစ္ခုလံုးကို သံုးရပါတယ္။
ပထမအေနနဲ႔က ကၽြန္ေတာ္တို႔ သံုးေနတဲ့ IDE (Visual C++, DevC++, CodeWarrior, Borland C++) ရဲ႕ setting ေတြထဲမွာ ကၽြန္ေတာ္တို႔ ေရးလိုက္တဲ့ program ကို compile လုပ္မယ္ ဆိုရင္ လိုအပ္တဲ့ header file ေတြကို ဘယ္မွာ ရွာရမလည္း ဆုိတာ ေျပာေပးရပါတယ္။ Access Path လု႔ိလည္း ေခၚႏိုင္ပါတယ္။ ပံုမွန္ အတိုင္းကေတာ့ အဲဒီ IDE မွာ default အေနနဲ႔ ပါလာတဲ့ ေနရာေတြကိုပဲ သြားရွာမွာ။ ဒါမွမဟုတ္ ကၽြန္ေတာ္ တို႔ လက္ရိွ ေရးေနတဲ့ project ရိွေနတဲ့ folder မွာ လုိက္ရွာပါလိ့မ္မယ္။ တစ္ကယ္လို႔ တစ္ျခား ေနရာ တစ္ခု မွာလည္း ရွာေစခ်င္တယ္ ဆိုရင္ ကၽြန္ေတာ္တို႔က IDE ကို ရွာရမယ့္ path list ထဲမွာ ကၽြန္ေတာ္တို႔ရဲ႕ ေနရာ ကို ေျပာျပထားလို႔ ရပါတယ္။ (GLUT နဲ႔ ခ်ိတ္တဲ့ ပံုစံမွာ ကၽြန္ေတာ္ လုပ္ျပထားၿပီးသားပါ)။
ေနာက္တစ္ပိုင္းက library file ေတြကိုလည္း လုိအပ္လာရင္ ဘယ္မွာ ရွာပါ ဆိုတဲ့ list ထဲမွာ ကၽြန္ေတာ္တို႔ ရဲ႕ external library file ေတြကိုထားတဲ့ ေနရာကို ေျပာထားဖို႔ လိုပါမယ္။ Header file ေတြကို ဘယ္မွာ ရွာရမယ္၊ lib file ေတြကို ဘယ္မွာ ရွာရမယ္ ဆိုတာ ႏွစ္ခုလံုးကို ေျပာထးာမွ အလုပ္လုပ္ပါလိမ့္မယ္။
ေနာက္တစ္ခု သတိထားရမွာက မ်ားေသာအားျဖင့္ lib file ေတြကို ဘယ္မွာရရမယ္ဆိုတဲ့ path ကိုပဲ ေျပာလို႔ တစ္ခါတစ္ေလ အဆင္မေျပပါဘူး။ ဒါေၾကာင့္ ေသခ်ာေအာင္ lib file ေတြကို ကိုယ့္ရဲ႕ project ထဲမွာ တစ္ခါ ထဲ Manually ေပါငး္ထည့္ေပးထားဖို႔ လိုပါတယ္။ ဒါမွသာ compile / build လုပ္တဲ့ အခ်ိန္မွာ error မေတြ႕မွာ ပါ။
ဒီေတာ့ ျပင္ပက external API တစ္ခုခုကို ကိုယ့္ရဲ႕ programming IDE တစ္ခုနဲ႔ ခ်ိတ္ဆက္ၿပီး program ေတြ develop လုပ္မယ္ဆိုရင္ အေပၚက ႏွစ္ခ်က္ကို စဥ္းစားရပါမယ္။ ဘယ္ IDE မွာမဆို ဒီ သေဘာတရားက အတူတူပါပဲ။ IDE အေပၚ မူတည္ၿပီး လုပ္ရတာပဲ ကြာသြားတာပါ။ နမူနာ သေဘာတရားကို ၾကည့္ခ်င္တယ္ ဆိုရင္ GLUT နဲ႔ Visual C++ နဲ႔ ခ်ိတ္တာကို ကၽြန္ေတာ္ ေရးျပ ထားပါတယ္။
အခု ကၽြန္ေတာ္ DirectX application ေတြကို ေရးဖို႔အတြက္ DirectX API နဲ႔ Visual C++ ကို ဘယ္လို ခ်ိတ္ဆက္ၿပီး သံုးမယ္ ဆိုတာ ရွင္းျပေပးပါ့မယ္။
DirectX API ကို သံုးဖို႔အတြက္ တစ္ကယ္က Microsoft website ကေန download ဆြဲတဲ႕ DirectX SDK တစ္ခုလံုးၾကီး မလိုပါဘူး။ အဲဒီ SDK ထဲမွာက တစ္ျခား manual ေတြ၊ helper နဲ႔ extra library ေတြ၊ နမူနာ sample program ေတြနဲ႔မို႔ အရမ္းၾကီးေနတာ။ တစ္ကယ္တမ္း ကၽြန္ေတာ္တို႔ လုိတာက အေပၚမွာ ေျပာထား သလို DirectX အတြက္လိုအပ္တဲ့ header file (include file) နဲ႔ lib file ေတြရိွရင္ လံုေလာက္ပါတယ္။ အေျခခံ လိုအပ္တဲ့ DirectX API အတြက္ file ေလးေတြကို ကၽြန္ေတာ္ ZIP file လုပ္ၿပီး ဒီ Link မွာတင္ထား ေပးပါတယ္။ အဲဒါကို ယူလို႔ ရပါတယ္။


http://www.4shared.com/file/63153860/ef3d946a/DirectX9_SDK.html

အခု ကၽြန္ေတာ္ေပးထားတဲ့ DirectX က version 9 ပါ။ အရင္က DirectX 7 နဲ႔ ေရွ႕က version အေဟာင္း ေတြနဲ႔ DX9 နဲ႔က ေရးရတာ နဲနဲကြာပါတယ္။ ျဖစ္ႏုိင္ရင္ DirectX 9 ကိုပဲ သံုးပါ။ သူ႔မွာ တစ္ျခား ေရးရတာ လြယ္ေအာင္ လုပ္ေပးတဲ့ helper function ေတြပါပါတယ္။ ပိုၿပီး လြယ္ခ်င္ရင္ေတာ့ SDL (Simple DirectMedia Layer) ဆိုတဲ့ API ကို သံုးၾကည့္ပါ။ ေရးရတာ အရမ္းသက္သာပါ လိမ့္မယ္။
ထားပါေတာ့... ေလာေလာဆယ္က ကၽြန္ေတာ္ Visual C++ နဲ႔ DX9 API နဲ႔ ခ်ိတ္တာကို ေျပာပါမယ္။ လြယ္လြယ္ ေလးပါ။ DX header နဲ႔ lib ေတြပါတဲ့ folder ကို hard disk ထဲကို download လုပ္ပါ။ ၿပီးရင္ Visual C++ ရဲ႕ Directory path က include နဲ႔ library file ေတြအတြက္ လိုအပ္တဲ့ path ေတြမွာ ခုနက download ဆြဲထားတဲ့ folder ေတြရ႕ဲ လမ္းေၾကာင္းေလးေတြကို ထည့္ေပးလိုက္ပါ။
တစ္ကယ္တမ္း project ကို အလုပ္လုပ္ဖို႔ အတြက္ သက္ဆိုင္ရာ DX library file ေလးေတြကို ကိုယ့္ရဲ႕ project ထဲမွာ ေပါင္းထည့္ ေပးဖို႔ မေမ့နဲ႔ေနာ္။
တစ္ခု သတိထားရမွာက ကၽြန္ေတာ္တုိ႔က DX 9 ကို သံုးၿပီး ကၽြန္ေတာ္တို႔ရဲဲ႕ application ကို ဖန္တီးမယ္ ဆိုရင္ အဲဒီ application ကို run မယ့္ ကြန္ပ်ဴတာထဲမွာ DX 9 (runtime DLL) ေတြရိွရပါမယ္။ SDK ရိွဖို႔ မလုိပါဘူး။
Windows XP (service pack 1) မွာ DX 8.1 တစ္ခါထဲ ပါလာၿပီးသားပါ။ Windows XP (service pack 2) မွာ DX 9 ပါလာၿပီးသားပါ။ Windows Vista မွာ DX 10 ပါပါတယ္။ ကၽြန္ေတာ္ေျပာတာ run time ေတြကို ေျပာတာေနာ္။ SDK မပါဘူး။ ကိုယ့္စက္ထဲမွာ ဘယ္ DirectX version ရိွေနလည္း သိခ်င္ရင္ Start Menu က Run ကို သြားၿပီး.. DXDIAG လို႔ ရိုက္ၿပီး DirectX dialog box ကို ဖြင့္ၾကည့္လို႕ရပါတယ္။ DirectX ကို သီးသန္႔ download လုပ္ၿပီး install လုပ္ယူလို႔လည္း ရပါတယ္။

တစ္ကယ္တမ္း DirectX program ကို ေရးရတာ OpenGL ထက္ပိုၿပီး ရႈပ္တယ္လို႔ ထင္ရပါတယ္။ DirectX က graphic တစ္ခုထဲ အတြက္ လုပ္ထားတာ မဟုတ္ပါဘူး။ Input devices, network, sound, music စတာေတြ နဲ႔ အကုန္ အလုပ္လုပ္ ႏိုင္ေအာင္ လုပ္ထားတာပါ။ DirexctX programming သေဘာတရားေတြကို အခ်ိန္ရရင္ ေနာက္မွ ေရးပါဦးမယ္။

ဒါဆိုရင္ DirectX မွ မဟုတ္ပါဘူး၊ တစ္ျခားဘယ္ API နဲ႔ မဆို ကိုယ့္ရဲ႕ VC++ IDE နဲ႔ ခ်ိတ္ဆက္တဲ့ သေဘာ တရားကို နားလည္မယ္ လို႔ ေမွ်ာ္လင့္ပါတယ္။ SDL Library ကလည္း ဒီအတိုင္းပဲ ခ်ိတ္ရတာပါပဲ။

0 comments:

Post a Comment