VRAMの操作(色の取得・点の描画)を行うモジュール。
パレットエントリの理解が曖昧なので、まだベータ版。マジックナンバーも減らせるはず。
※コピー&ペーストの問題はCSSにあったようです。対策を施したので、今回の投稿からはきちんとコピーできるはず。// VRAM操作モジュール vram.hsp
// 【参考】http://dream.freespace.jp/puma/iroiro/struct/bmscr3.htm
#module VRAM_MODULE vram, bmscr, screenWidth, screenHeight, bitmapWidth, colorMode
#modinit int screenID, local selectedScreen
selectedScreen = ginfo_sel
gsel screenID
mref vram, 66
mref bmscr, 67
screenWidth = bmscr(1)
screenHeight = bmscr(2)
colorMode = 3 - bmscr(3) * 2 // FULL = 3, PALETTE = 1
bitmapWidth = (screenWidth * colorMode + 3) / 4 * 4
gsel selectedScreen
return
#modfunc _outOfScreen@VRAM_MODULE int x, int y
return (x < 0) | (y < 0) | (screenWidth <= x) | (screenHeight <= y)
#defcfunc outOfScreen@VRAM_MODULE var modVar, int x, int y
_outOfScreen modVar, x, y
return stat
#modfunc _index@VRAM_MODULE int x, int y
return (screenHeight - y - 1) * bitmapWidth + x * colorMode
#defcfunc index@VRAM_MODULE var modVar, int x, int y
_index modVar, x, y
return stat
#modfunc getColor int x, int y, local i
if outOfScreen(thismod, x, y) : return -1
i = index(thismod, x, y)
if (colorMode == 1) {
palcolor peek(vram, i)
} else {
color peek(vram, i + 2), peek(vram, i + 1), peek(vram, i)
}
return 0
#modfunc drawPoint int x, int y, local i
if outOfScreen(thismod, x, y) : return -1
i = index(thismod, x, y)
if (colorMode == 1) {
poke vram, i, bmscr(12)
} else {
poke vram, i + 2, ginfo_r
poke vram, i + 1, ginfo_g
poke vram, i, ginfo_b
}
return 0
#global
; screen 0, 640, 480, SCREEN_PALETTE
newmod vramController, VRAM_MODULE, 0
getColor vramController, 0, 0
dialog "左上の色は:\n" + str(ginfo_r) + "," + str(ginfo_g) + "," + str(ginfo_b)
color 0, 0, 255
repeat ginfo_winy / 2
y = cnt * 2
repeat ginfo_winx
drawPoint vramController, cnt, y
loop
loop
redraw 1
2007年6月26日火曜日
VRAM操作モジュール
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿