Monday, March 31, 2008

SDL (Simple Directmedia Layer)

Graphic mode ေတြအေၾကာင္းကို ဆက္မေရးခင္ ၾကားျဖတ္ၿပီး ကၽြန္ေတာ္ သေဘာက်တဲ့ Game နဲ႔ Graphic application ေတြေရးတဲ့ library set တစ္ခုအေၾကာင္း ေျပာျပခ်င္ပါတယ္။
SDL (Simple Directmedia Layers) လို႔ေခၚပါတယ္။ သူက cross-platform library ျဖစ္တဲ့အတြက္ ဘယ္ OS မွာမဆို အလုပ္လုပ္ပါ လိမ့္မယ္။ SDL ဆိုတာ တစ္ကယ္ေတာ့ graphic အတြက္တင္ မဟုတ္ပါဘူး။ အထူးသျဖင့္ game programmer ေတြနဲ႔ multimedia application programmer အတြက္ လိုအပ္တဲ့ graphic လုပ္ေဆာင္ခ်က္ေတြ၊ sound နဲ႔ ပါတ္သက္တဲ့ လုပ္ေဆာင္မႈေတြ၊ input devices ေတြနဲ႔ ပါတ္သက္တဲ့ event လုပ္ေဆာင္ခ်က္ေတြ၊ CD/DVD ကို ဖတ္တဲ့ လုပ္ေဆာင္ခ်က္ေတြ၊ performance ေကာင္းေကာင္း ရဖို႔အတြက္ လိုအပ္တဲ့ multi-threads လုပ္ေဆာင္ခ်က္ေတြ အားလံုးအတြက္ လြယ္ကူေအာင္၊ အခ်ိန္ကုန္ သက္သာေအာင္ ဖန္တီးေပးထားတဲ့ API (application programming interface) တစ္ခု ပါပဲ။
SDL layer ဟာ Microsoft DirectX နဲ႔ေရာ၊ OpenGL နဲ႔ပါ ေကာင္းေကာင္း အလုပ္ လုပ္ႏိုင္ပါတယ္။ အထူးသျဖင့္ Graphic နဲ႔ ပါတ္သက္တဲ့ ျမန္ႏႈန္းကို အထူး လိုအပ္တဲ့ လုပ္ေဆာင္ခ်က္ေတြမွာ programmer ေတြအတြက္ သိပ္ စဥ္းစားစရာ၊ အေသးစိတ္ code ေတြကို ေရးေနစရာ မလိုပဲနဲ႔ multimedia application ေတြကို ဖန္တီးခြင့္ ေပးပါတယ္။
လက္ရိွ ေစ်းကြက္မွာ ေရာင္းေနတဲ့ တစ္ခ်ဳိ႕ game ေတြ၊ emulator ေတြ၊ multimedia application ေတြနဲ႔ MPEG player ေတြကို SDL library နဲ႔ ဖန္တီးထားပါတယ္။ ဥပမာ အေနနဲ႔ ေျပာရရင္ Civilization : Call to Power ဆိုတဲ့ game ကို SDL နဲ႔ ဖန္တီး ထားတာပါ။
SDL Layer ဟာ cross-platform ျဖစ္တဲ့အတြက္ Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, QNX စတဲ့ အမ်ိဳးမ်ိဳးေသာ OS ေတြနဲ႔ ေကာင္းေကာင္း အလုပ္လုပ္ႏိုင္ပါတယ္။
SDL ကို ဖန္တီးဖို႔အတြက္ C programming language ကို သံုးထားပါတယ္။ ဒါေပမယ့္ သူ႔ကို အမ်ိဳးမ်ိဳးေသာ programming language ေတြကေန ေခၚသံုးႏိုင္ပါတယ္။ တိတိက်က် ေျပာရရင္ SDL ကို C++, Ada, C#, D, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, Smalltalk, Tcl စတဲ့ အမ်ိဳးမ်ိဳးေသာ programming language ေတြနဲ႔ ေပါင္းစပ္ၿပီး အသံုးျပဳ ႏိုင္ပါတယ္။
ကၽြန္ေတာ္ စမ္းၿပီး သံုးၾကည့္ေတာ့ SDL ကို အေတာ္ သေဘာက်မိပါတယ္။ Visual C++ ကိုသံုးၿပီး DirectX program တစ္ခုကို ဖန္တီးမယ္ ဆိုရင္ ပံုမွန္အတိုင္း ေရးရင္ အမ်ားႀကီး ေရးရမယ့္ code line ေတြကို SDL သံုးလိုက္ရင္ ေတာ္ေတာ္ သက္သာတာကို ေတြ႕ရပါတယ္။ ၿပီးေတာ့ SDL က အတြင္းပိုင္းထဲက အေသးစိတ္ logic ေတြကိုလည္း stable ျဖစ္ေအာင္ ထိန္းေပးသြားတဲ့ အတြက္ programmer ေတြအတြက္ အမ်ားႀကီး သက္သာေစပါတယ္။
ဥပမာ ေျပာရရင္ ကၽြန္ေတာ္တို႔က DirectX 9 ကို သံုးၿပီး graphic application တစ္ခုကို Visual C++ နဲ႔ ေရးမယ္ဆိုရင္ DirectX 9 graphic function ေတြကို အစျပဳႏိုင္ဖို႔အတြက္ ဒီလို အေသးစိတ္ ေရးေပးရပါတယ္။ ဒါက DX9 ကို initialize လုပ္တဲ့ အပိုင္းေလး တစ္ပိုင္းပဲ ျပထားတာပါ။

if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
{ lastResult = E_FAIL; return false; }

D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
d3dpp.Windowed = TRUE;

d3dpp.BackBufferCount = 1;
d3dpp.BackBufferHeight = SCRN_HEIGHT;
d3dpp.BackBufferWidth = SCRN_WIDTH;
d3dpp.hDeviceWindow = hwnd;

pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &pd3dDevice ) ;

အဲဒါေတြကို တစ္ကယ္လို႔သာ SDL library နဲ႔ ေရးမယ္ဆိုရင္ေကာ။ Graphic system တစ္ခုကို အစျပဳဖို႔အတြက္ လိုအပ္တာက ေအာက္က code line ေလးေတြပါ။

SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(SCRN_WIDTH, SCRN_HEIGHT, 24, SDL_HWSURFACE l SDL_DOUBLEBUF l SDL_FULLSCREEN);

ဒါကို ၾကည့္ရင္ SDL ရဲ႕ effective ျဖစ္မႈကို ေတြ႕ႏိုင္မယ္ ထင္ပါတယ္ေနာ္။ ဒါက graphic နဲ႔ ပါတ္သက္တာ တစ္ခုထဲကို ျပတာပါ။ SDL က progammer ေတြကို သက္သာေအာင္၊ code ေတြ ေရးတဲ့ ေနရာမွာ efficient ျဖစ္ေအာင္ လုပ္ေပးတဲ့ အပိုင္းေတြ အမ်ားႀကီး ရိွပါတယ္။ SDL ကို ေသေသခ်ာခ်ာ အသံုးျပဳဖို႔ အတြက္ အေသးစိတ္ သေဘာတရားေတြနဲ႔ အလုပ္ လုပ္ပံုေတြကို သိဖို႔ လိုတယ္ ဆိုရင္လည္း SDL အတြက္ စာအုပ္ရိွပါတယ္။ Focus on SDL လို႔ ေခၚပါတယ္။ အဲဒီ စာအုပ္ကို Internet ကေန free download လုပ္လို႔ ရႏိုင္ပါတယ္။ အဲဒီ စာအုပ္ထဲမွာ SDL ကို သံုးၿပီး multimedia နဲ႔ game ေတြ ဘယ္လို ဖန္တီးရမယ္ ဆိုတာ ရွင္းျပထားပါတယ္။ ကၽြန္ေတာ္ေတာ့ NTU က တစ္ခ်ိဳ႕ ကၽြန္ေတာ့ရဲ႕ assignment ေတြကိုေတာင္ SDL သံုးၿပီး ဖန္တီး ျဖစ္ခဲ့ပါတယ္။
Graphic နဲ႔ multimedia ကုိ စိတ္၀င္စားတဲ့ programmer ေတြ အတြက္ေတာ့ SDL က အသံုးတည့္မယ့္ cross-platform library တစ္ခုပါပဲ။ SDL လိုပဲ တစ္ျခား graphic library ေတြ ရိွေတာ့ ရိွပါေသးတယ္။ ဥပမာ- Clan Library ေတြလို မ်ိဳးေပါ့။ ဒါေပမယ့္ ကၽြန္ေတာ္ေတာ့ SDL က အသံုးလည္း မ်ားတယ္၊ stable လည္း ျဖစ္တဲ့ multimedia API တစ္ခုလို႔ ထင္မိပါတယ္။

0 comments:

Post a Comment