ESDLを試したけど、失敗した。その2
前回のエントリ: http://d.hatena.ne.jp/mzp/20090102/esdl
30分プログラム、その508。こりずにErlangのSDLバインディング、ESDLを試して、またも失敗した。
本当は、サーフェイスのピクセルデータを自分でごにょごにょして加算合成じゃい、αブレンディングじゃい、と遊ぶつもりだったけど、うまくサーフェイスが作れない。 たぶん、ボクがSDLを使いこなせていないのと、ESDLが一部の関数しかErlangインタフェースを用意してないのが原因だと思う。
使い方
1> sdl_test:go().
ソースコード
-module(sdl_test). -compile([export_all]). -include_lib("esdl/include/sdl.hrl"). -include_lib("esdl/include/sdl_video.hrl"). -include_lib("esdl/include/sdl_events.hrl"). load(Path) -> Bmp = sdl_video:loadBMP(Path), Surface = sdl_video:createRGBsurface(?SDL_SWSURFACE,300,300,24,16#FF,16#FF00,16#FF0000,0), sdl_video:blitSurface(Bmp,null,Surface,null), Surface. mapSurface(F,Surface)-> Pixels = sdl_video:getPixels(Surface,#sdl_rect{x=0,y=0,w=300,h=300}), sdl_video:createRGBsurfaceFrom(F(Pixels),?SDL_SWSURFACE,300,300,24,16#FF,16#FF00,16#FF0000,0). go() -> _Server = sdl:init(?SDL_INIT_VIDEO), sdl_util:debug(1), ScreenRef = sdl_video:setVideoMode(640, 480, 8, ?SDL_ANYFORMAT bor ?SDL_RESIZABLE), Screen = sdl_video:getSurface(ScreenRef), sdl_video:blitSurface(mapSurface(fun(X)->X end,load("air.bmp")),null,Screen,null), sdl_video:updateRect(Screen,0,0,640,480), loop(). loop() -> case sdl_events:waitEvent() of #quit{} -> exit(normal); _ -> loop() end.