2023/11/09(木) [n年前の日記]
#1 [hsp] HGIMG3で仮想画面を作れるのかどうか調べてる
Windows10 x64 22H2 + HSP 3.7 beta7 で、HGIMG3 を使った際に、仮想画面が作れるのかどうかを調べているところ。小さい仮想画面に HGIMG3 で描画して、それをデスクトップサイズの大きな表示ウインドウに拡大描画する、といったことをしたい。
ただ、調べた範囲では、そういうことは無理っぽい気配がしてきた…。
一応、 _sample\hgimg3\settex.hsp が、少し似ているサンプルに見えなくもない。以下のような処理をしているっぽい。
ただ、この settex.hsp というサンプルは、テクスチャ部分をHSPの標準機能で描画しているようで…。HGIMG3 で描画してるのは、テクスチャをメイン表示ウインドウに拡大描画するところだけ…。
テクスチャ部分も HGIMG3 で描画できないかと、settex.hsp を改造しながら動作確認してみたけれど、どうもダメっぽい。イメージバッファに描画してほしいのに、表示ウインドウのほうに描画されているように見える…。
このあたり、おそらく、HGIMG3 を使って描画できるウインドウは1つだけで、複数のウインドウ、もしくは複数のイメージバッファに HGIMG3 で描画するのは無理。ということじゃないのかなと。
そもそも、HSP が buffer命令で確保したイメージバッファは、メインメモリ上に置かれるイメージバッファであって…。HGIMG3 が使っている DirectX は GPUが管理してるVRAM上に描画処理をしているのだろうから、buffer で確保したイメージバッファに対して描画せよと HGIMG3 に指示を出してみても無視されて、その時たまたま描画先になっている表示ウインドウ(VRAM上)に描画されてしまうような気もする。
ただ、調べた範囲では、そういうことは無理っぽい気配がしてきた…。
一応、 _sample\hgimg3\settex.hsp が、少し似ているサンプルに見えなくもない。以下のような処理をしているっぽい。
- メイン表示ウインドウ(ID=0)とは異なるサブ表示ウインドウ(ID=1)を新規作成
- そのサブ表示ウインドウ(ID=1)に文字列を描画
- そのサブ表示ウインドウをテクスチャとして登録
- そのテクスチャを HGIMG3 でメイン表示ウインドウ(ID=0)に拡大描画
ただ、この settex.hsp というサンプルは、テクスチャ部分をHSPの標準機能で描画しているようで…。HGIMG3 で描画してるのは、テクスチャをメイン表示ウインドウに拡大描画するところだけ…。
テクスチャ部分も HGIMG3 で描画できないかと、settex.hsp を改造しながら動作確認してみたけれど、どうもダメっぽい。イメージバッファに描画してほしいのに、表示ウインドウのほうに描画されているように見える…。
このあたり、おそらく、HGIMG3 を使って描画できるウインドウは1つだけで、複数のウインドウ、もしくは複数のイメージバッファに HGIMG3 で描画するのは無理。ということじゃないのかなと。
そもそも、HSP が buffer命令で確保したイメージバッファは、メインメモリ上に置かれるイメージバッファであって…。HGIMG3 が使っている DirectX は GPUが管理してるVRAM上に描画処理をしているのだろうから、buffer で確保したイメージバッファに対して描画せよと HGIMG3 に指示を出してみても無視されて、その時たまたま描画先になっている表示ウインドウ(VRAM上)に描画されてしまうような気もする。
◎ HGIMG4なら一部実現できる :
これが HGIMG4 なら仮想画面を作って描画して、といったことができるっぽい。
_sample\hgimg4\buffer.hsp
というサンプルで、以下の処理をしている。
しかし、HGIMG4 (hsp3dish) は表示ウインドウを1つしか持てないわけで…。
- 小さいイメージバッファ(ID=1)を新規作成
- その小さいイメージバッファ(ID=1)に HGIMG4 (hsp3dish) を使って描画
- そのイメージバッファの内容をメインの表示ウインドウ(ID=0)に拡大描画
しかし、HGIMG4 (hsp3dish) は表示ウインドウを1つしか持てないわけで…。
- 複数の表示ウインドウを持てるけど、描画先は1つのウインドウに限られてしまう HGIMG3。
- 複数のイメージバッファに描画できるけど、表示ウインドウは1つに限定されてしまう HGIMG4 (hsp3dish)。
[ ツッコむ ]
以上です。