【HSP】VRAMに直接書き込むモジュール【遅い…orz】
【HSP】VRAMに直接書き込むモジュール【遅い…orz】
// モジュール
#module "kerupanium_draw"
#deffunc k_d_init
mref VRAM,66
dim RGBr
WinX=ginfo(26)
WinY=ginfo(27)
return
#define global ctype index(%1=0,%2=0) (limit(%1,0,WinX-1)+(WinY-1-limit(%2,0,WinY-1))*WinX)*3
#deffunc k_d_pget int _p1,int _p2
memcpy RGBr,VRAM,3,0,index(_p1,_p2)
color (RGBr>>16)&0xFF,(RGBr>>8)&0xFF,RGBr&0xFF
return
#deffunc k_d_pset int _p1,int _p2
RGBr=(ginfo_r<<16)|(ginfo_g<<8)|ginfo_b
memcpy VRAM,RGBr,3,index(_p1,_p2),0
return
#global
k_d_init// サンプル
color 48,32,16 : boxf 0,0,639,159
color 96,80,64 : boxf 0,160,639,319
color 144,128,112 : boxf 0,320,639,479
onclick *click
*click
/* ; これで取得/設定サンプル切り替え
// ■GET (取得) サンプル
// マウスでクリックした点の色を取得し、
// タイトルバーに表示します。
k_d_pget mousex,mousey ; 639,0
title ""+ginfo_r+","+ginfo_g+","+ginfo_b
/*/
// ■SET (設定) サンプル
// マウスでクリックするたぶに、
// ランダムな色で塗りつぶします。(点の表示しまくり)
a=gettime(6)*1000+gettime(7) // 確かめ用
redraw 0
color rnd(256),rnd(256),rnd(256)
repeat 640
x=cnt
repeat 480
y=cnt
k_d_pset x,y
loop
loop
redraw
b=gettime(6)*1000+gettime(7)-a // 確かめ用
title ""+b // 確かめ用
/**/
・一番右端が塗りつぶせなかったバグ修正
バグというか、ユウキさんはlpokeを使って書き込んでいたので、最後の1ピクセル分のデータを書き込もうとするとエラーが出る状態になっていました。
・色が指定と違うものになるバグ修正
ユウキさん…色のデータは3バイトなのに、4バイトそのまま書き込んだらバグるに決まってるじゃないですか…。
(ユウキさんは3つのやり方で試していたみたいですが、そのうち2つは、元の背景色が白でない限りバグるものでした。おそらく、ユウキさんはずっと背景白で試していたんでしょうね。でも、黒や茶色にしたら一発でダメになりましたよ。)
・あとは特に意識してません
各命令の実行時間 (ms/1,000,000回)
PixelGetR,G,B 754 (by ユウキ)
PixelSetR,G,B 1962 (by ユウキ)
PixelGet 781 (by ユウキ)
PixelSet 1674 (by ユウキ)
k_d_pget 1559 (by kerupani129)
k_d_pset 1562 (by kerupani129)
pget 1886 (by HSP)
pset 15245 (by HSP)
専門用語ヤメテー←
初心者をいじめないでー←
そもそもVRなんちゃらが何か分からないレベル←
私も詳しくは知りませんけど…。
パソコンの画面上のデータを入れておくメモリのことです。簡単に言えば。(VはVideoのV、RAMはメモリのこと)
DirectXとかは、直接VRAMに書き込んだり、その他いろいろ?な機能のおかげで、すごいゲームが簡単に作れる…ようになってるんですよ、あれでも。
まあ、若干DirectXは触ったりしてるけどね・・・
なんせ時間がないから・・・
後、アルファベット恐怖症だから頭が痛くなるw
DirectXやってるんですか!
私なんか数時間であきらめたのに…orz