HSP標準で使われているビットマップは24bitのDIBセクションなのはご存知だと思います。、
最近のビデオカードは32bitのみで24bitをサポートしてないからなのか32bitに比べてすごく遅い気がします。
特に画面の更新(redraw 1)は激遅な感じです。
興味本位なんですが皆さんのPC環境ではどうなのか試させてもらいたいです。
以下のスクリプトを試して結果を張り付けてもらえないですか。
#include "gdi32.as" #include "user32.as" #include "kernel32.as" wx=800 wy=600 vx=1 vy=1 fc=0 fend=0 screen 0,wx,wy SetTimer hwnd,1,1000,0 oncmd gosub *OnTimer,0x0113;WM_TIMER st="24bitDIB: " t2=ptimer() repeat redraw 0 color 255,255,255 boxf 0,0,wx,wy color circle px,py,px+60,py+60 px+=vx py+=vy if px<=0 | px>=wx-60:vx=-vx if py<=0 | py>=wy-60:vy=-vy redraw 1 await 0 fc++ if fend:break loop cls txt= strf("24bitDIB: fps=%.f\n",fps1) txt+= strf("32bitDIB: fps=%.f\n",fps2) txt+= strf("DDB: fps=%.f\n",fps3) txt+="\n" dim dv,106 dv=424 dupptr dvstr,varptr(dv)+36,128,2 repeat EnumDisplayDevices 0,cnt,varptr(dv),0 if stat==0:break if dv.41&4{ txt+=dvstr+"\n" break } loop dim devm,31 devm.9=124 EnumDisplaySettings 0,-1,varptr(devm) txt+=""+devm.27+"*"+devm.28+"*"+devm.26+"\n" mesbox txt,wx,wy stop *OnTimer if ct=2{ t1=ptimer() c1=fc } if ct=5{ fps1=double(fc-c1)/(ptimer()-t1) chgbm 32 st="32bitDIB: " } if ct=7{ t1=ptimer() c1=fc } if ct=10{ fps2=double(fc-c1)/(ptimer()-t1) chgbm 0 st="DDB: " } if ct=12{ t1=ptimer() c1=fc } if ct=15{ fps3=double(fc-c1)/(ptimer()-t1) fend=1 KillTimer hwnd,1 } fps=double(fc-c2)/(ptimer()-t2) c2=fc t2=refdval title st+strf("fps=%.1f",fps) ct++ return #deffunc chgbm int bpp mref bm,67 if bpp==0{ GetDC 0 hdisp=stat CreateCompatibleBitmap hdisp,bm.1,bm.2 hnewbm=stat ReleaseDC 0,hdisp bm.5=0 }else{ dupptr bminfo,bm.6,40 wpoke bminfo,14,bpp bminfo.5=0 CreateDIBSection 0,bm.6,0,varptr(bm.5),0,0 hnewbm=stat } SelectObject hdc,hnewbm DeleteObject bm.7 bm.7=hnewbm bm.67=(bm.1*bpp+31)/32*4 bm.16=bm.67*bm.2 return #defcfunc ptimer if freq==0{ freq=0.0 : qtime=0.0 QueryPerformanceFrequency varptr(freq) freq=double(strf("%I64u",freq)) } QueryPerformanceCounter varptr(qtime) return double(strf("%I64u",qtime))/freq