hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
小ワザ/VRAMを直接操作してみる - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ

VRAMを直接操作してみる

VRAMを直接弄って、HSPの画面を書き換えます。

HSPのVRAM

HSPのVRAMはmref命令を使用することで取得することができます。
これをpoke命令を使って操作することで、画面の状態を変える事が出来ます。

HSPのVRAMは正確には、現在の画面の状態が格納されているわけではなく、
裏画面(オフスクリーンバッファ)の状態が格納されています。
なので、VRAMを直接弄っただけでは画面は更新されません。
VRAMへ書き込んだ状態を画面へ反映させるためには"redraw 1"を実行する必要があります。

VRAMへの書き込みは"redraw 0"を実行した後の画面描画と同じと考えてもいいと思います。

VRAMの構造

ここでVRAMの構造のお話を簡単に。

今回はフルカラーモード(24bitカラー)でのVRAMについて説明します。
パレットモードのときは少し異なってきますが、今回は説明しません。

フルカラーモードの場合は1ピクセルに対して、
R(赤)要素が1Byte(8bit)、G(緑)要素が1Byte(8bit)、B(青)要素が1Byte(8bit)の計3Byte(24bit)で構成されています。
この3Byte(24bit)のセットが先頭(左上)から右方向へ画面の面積分だけ並んでいることになります。

画面が100 x 100(ピクセル単位)の場合は、
座標(0, 0)が1Byte目〜、(1, 0)が4Byte目〜、(2, 0)が7Byte目〜...(99, 0)が298Byte目、
(0, 1)が301Byte目〜...
となります。

座標(1, 0)のR要素を操作したいなら4Byte目を、B要素を操作したいなら6Byte目を
それぞれ書き換えればいいということです。

しかし、HSP上でVRAMを扱う点で注意点があります。
実際にメモリに格納されるとき、バイト配列が反転することです。
つまり、バイト配列の末端が画面の一番右上にあたり、
バイト配列の先頭が画面の一番左下になります。
RGBの並びも、BGRになるので注意が必要です。

例えば幅4px高さ4pxのウィンドウのVRAMは次の図のようになります。 数字が何バイト目か、背景色が何色の情報を示すかを表しています。

vram.png

以上は幅が4の整数倍のときの話。

正確にはVRAMの横幅アドレスは。
vwidth = ( ( ginfo_winx * 3 ) + 3 ) & 0xfffffffc 
で計算します。
詳しくはSDKマニアル参照↓
x = X座標;
y = Y座標;
width = ((sx*3)+3)&~3;
vram_adr = pBit + ( ( sy - 1 - y ) * width ) + ( x * 3 ) 

サンプルコード

+  サンプルコード

執筆中。

サンプル:RGBの要素を抜き出してみる

+  サンプルコード
  • シンプルで高速な色反転をしたくて作りました。お気に入りです。--りさ

サンプル:BMPファイルを直接VRAMに展開してみる

+  サンプルコード:変数経由
  • 24bitのBMPファイルの画像データ部分とフルカラーモード(24bitカラー)の時のVRAMのデータ構造がそっくりなので、試してみました。
    このサンプルは、24bitのWindows BMP、RLE非圧縮専用です--つくね?
  • このサンプルでは、一度、変数(cBMPData)にBMPファイルの画像データを読み込んでいますが、読込先を変数(mVRAM)にすれば
    直接VRAMにロードできそうな予感がします(試す場合は自己責任で。)
  • あ、memfileを使うなら、bloadの前に入れれば良かったかも。
    memfileは画像の枚数が多くてバッファーを使いまわす時に使えそうな気がします。
+  サンプルコード:VRAMに直接読み込む版
  • 前回のコードを改造して、VRAMに直接読み込む版も作ってみました。--つくね?
  • bufferも同じ原理でいけるかも?
    と思いましたが、前回の変数経由で使った変数(cBMPData)がバッファーと同じ役割に使えそうです。

コメント

  • 3Byteのセットが面積分よりも多く並んでいるものもあります。 -- dummy? 2007-01-09 (火) 18:16:52
    • 横幅が4の倍数でないとそうなります。
      URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル:
filebmp24_ldr2.hsp
233件 [詳細]
filebmp24_ldr.hsp
242件 [詳細]
filevram.png
262件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2008-10-21 (火) 05:08:13 (1874d)