np21w への CRT シェーダ追加実験でできたもの (2025/07/11)


内容物
ドキュメント
・readme.txt    ：このファイルです。
シェーダ
・np21w_2x.fx   ：2倍アパーチャグリル(もどき)シェーダです。
・np21w_3x.fx   ：3倍アパーチャグリルシェーダです。
・np21w_6x_ag.fx：6倍アパーチャグリルシェーダです。
・np21w_6x_sm.fx：6倍シャドーマスクシェーダです。
  シェーダのライセンスは NYSL Version 0.9982 とします。
np21w ソースコード
・scrnmng.cpp
・scrnmng_d3d.cpp
  今回の作業で編集したソースコードです。
  np21w rev94 をベースにしています。
  どちらも np21w のソースの win9x ディレクトリにあります。
シェーダ実行機能付き np21w バイナリ
・np21w.exe
・np2w.exe
  上記ソースコードを含めてビルドした np21w と np2w です。
  Visual Studio 2019 でビルドしました。


シェーダに描画させる方法
1. シェーダ実行機能付き np21w を起動します。
   レンダラで Direct3D を使うように設定を変更して終了します。
2. シェーダ実行機能付き np21w (以下 np2w も含むものとする)と同じ
   ディレクトリに以下の名前の .fx ファイルを置きます。
   ・np21w_6x.fx：6倍シェーダ
   ・np21w_3x.fx：3倍シェーダ
   ・np21w_2x.fx：2倍シェーダ
   シェーダは1回の起動でどれか1つしか読み込まれません。
   読み込みの優先度は6倍→3倍→2倍の順です。
　 (6倍シェーダが見つかれば、3倍シェーダと2倍シェーダは読み込まれない。)
3. シェーダ実行機能付き np21w を起動します。
   読み込むことができたシェーダで描画が行われます。
   恐らく、n倍で描画された画面の左上が見えるはずです。
   フルスクリーンにするかウィンドウサイズを調整して全体が映るようにします。


注意点や既知の問題
・DirectX9 を使っていますので、ランタイムがないと動かないと思います。
・シェーダが見つからなかった場合は一応拡大前の画面が描画されるように
  なってはいます。ただし、Direct3D 関係の実装を一部削っていますので、
  シェーダが見つからなかった場合の描画処理はオリジナルの np21w と
  完全に同じではありません。シェーダ無しで Direct3D 描画を利用したい
  場合はオリジナルの np21w をご使用ください。
・マルチスクリーンの環境で動かすと出力の倍率が変わる場合があります。
  接続されているディスプレイの解像度が全部同じなら上手く動くかもしれないです。
・フルスクリーンにした後にウィンドウモードに戻すとおかしくなります。
・他にも何か不具合がある可能性があります。


ビルド方法
1. DirectX9 SDK をインストールしておきます。
2. np21w rev94 の win9x にある scrnmng.cpp と scrnmng_d3d.cpp を
   本配布物中の同名ファイルで上書きします。
3. 「追加のインクルードディレクトリ」と「追加のライブラリディレクトリ」に
   DirectX9 のヘッダとライブラリのディレクトリを追加します。
4. ビルドします。


CRT シェーダ関連の実装について
・CRT シェーダは DirectX9 の効果(エフェクト)として実装されています。
・シェーダの入力は以下の通りです。
  ・tex0sz：最初のテクスチャサイズ
  ・outsz ：拡大後のテクスチャサイズ
  ・tex0, tex1, tex2：入力テクスチャ(それぞれ1～3パス目)
・効果から取得されるテクニックの名前は「TShader」です。
・一応内部的には3パスまでシェーダを走らせられるコードになっています。
  ・パスが3未満なら、最後に走ったパスの出力が描画されます。
　・1パス目は tex0、2パス目は tex1、3パス目は tex2 に入力テクスチャが来ます。
  ・パスを増やしたい場合は MAX_SHADER_PASSES と関連部分を書き換えます。


作者
Y. Shiokami
mail: r-srd@outlook.jp
