void lib_flushgraphbox(int opt, struct LIB_WINDOW *win, int x, int y, int sx, int sy, int skip, void *p) : 機能:グラフィックボックスをflushする ビデオメモリに書き込んだ内容をグラフィックボックスに反映させる。ビデオ メモリにアクセスしたら必ずこれを行う必要がある(リードアクセスしかしてい ないときはflushしなくてもよい)。 modeは、16色モードでは0x8001を、フルカラーモードでは0x8004か0x8024を指 定する。 グラフィックボックス全体をflushする時 x, y : グラフィックボックスオープン時に指定したx_pos, y_posの値 sx, sy : グラフィックボックスオープン時に指定したx_size, y_sizeの値 skip : 0 p : グラフィックボックスのポインタ (「グラフィックボックスのポインタについて」参照) グラフィックボックスの一部分をflushする時 x, y : flushする範囲の左上の座標(window内の座標系で指定する) sx, sy : flushする範囲のサイズ skip : (グラフィックボックスのx_size - この時のsx)*(1か2か4) p : グラフィックボックスのポインタ + この時のy * グラフィックボックスのx_size + この時のx (「グラフィックボックスのポインタについて」参照) サンプル:mt_xor(introd), test043
void lib_drawline0(int opt, struct LIB_GRAPHBOX *gbox, int color, int x0, int y0, int x1, int y1) : 機能:直線の描画 グラフィックボックスに直線を一本引く。クリッピングなどの処理は行われな いため、始点・終点座標は必ずグラフィックボックスに収まるように注意する。 opt : lib_drawpoint0と同様 color : 描画する色(0~15) x0, y0 : 直線の始点座標 x1, y1 : 直線の終点座標 サンプル:bballc0(introd)
グラフィックボックスのポインタは、グラフィックボックスのモードによって異なるため、次のマクロを使うと便利である。 /* グラフィックボックスのマクロ */ #if (!defined(LIB_GBOX_BUF)) #define LIB_GBOX_BUF(gbox) ((void *) ((char *) (gbox) + 64)) #define LIB_GBOX_BUF8(gbox) ((unsigned char *) LIB_GBOX_BUF(gbox)) #define LIB_GBOX_BUF16(gbox) ((unsigned short *) LIB_GBOX_BUF(gbox)) #define LIB_GBOX_BUF32(gbox) ((unsigned int *) LIB_GBOX_BUF(gbox)) #endif
(This host) = http://osask.net