トップページ > 記事閲覧
A2R10G10B10などのレンダリング可能テクスチャ
名前:gufo 日時: 2015/10/04 06:54

現在DXライブラリ上でディファードシェーダの実装を試しているのですが、バッファ用に現在のDXライブラリの仕様では作れない(ですよね?)A2R10G10B10フォーマットを使用したいです。 もしよろしければA2R10G10B10フォーマットを実装して欲しいです。 また、現在の仕様ではバッファのフォーマットを指定する際に浮動小数フラグ、ビット数、チャンネル数などを1つずつ関数で指定していますが、例えばDX_FORMAT_A2R10G10B10のような定数一つでフォーマットを指定するほうがシンプルでわかりやすいと思います。 余裕があればで結構ですが、このような実装を検討してくれると嬉しいです。
メンテ

Page: 1 |

Re: A2R10G10B10などのレンダリング可能テクスチャ ( No.1 )
名前:管理人 日時:2015/10/05 00:10

A2R10G10B10 が使用できるように、MakeScreen などで作成する画像に使用するテクスチャのフォーマットを 直接指定するための関数 SetUsePlatformTextureFormat を追加しました // 作成するグラフィックハンドルで使用する環境依存のテクスチャフォーマットを指定する // ( Direct3D9環境なら DX_TEXTUREFORMAT_DIRECT3D9_R8G8B8 など、0 を渡すと解除 ) int SetUsePlatformTextureFormat( int PlatformTextureFormat ) ; この関数は Direct3D9 なら Direct3D9 に依存したテクスチャフォーマット、Direct3D11 なら Direct3D11 に 依存したテクスチャフォーマットを直接指定するための関数で( とはいえ現時点では Direct3D9 にしか対応して いませんが・・・ )、Direct3D9 用には以下のフォーマットを指定できるようにしました DX_TEXTUREFORMAT_DIRECT3D9_R8G8B8 DX_TEXTUREFORMAT_DIRECT3D9_A8R8G8B8 DX_TEXTUREFORMAT_DIRECT3D9_X8R8G8B8 DX_TEXTUREFORMAT_DIRECT3D9_R5G6B5 DX_TEXTUREFORMAT_DIRECT3D9_X1R5G5B5 DX_TEXTUREFORMAT_DIRECT3D9_A1R5G5B5 DX_TEXTUREFORMAT_DIRECT3D9_A4R4G4B4 DX_TEXTUREFORMAT_DIRECT3D9_R3G3B2 DX_TEXTUREFORMAT_DIRECT3D9_A8R3G3B2 DX_TEXTUREFORMAT_DIRECT3D9_X4R4G4B4 DX_TEXTUREFORMAT_DIRECT3D9_A2B10G10R10 DX_TEXTUREFORMAT_DIRECT3D9_G16R16 DX_TEXTUREFORMAT_DIRECT3D9_A8B8G8R8 DX_TEXTUREFORMAT_DIRECT3D9_X8B8G8R8 DX_TEXTUREFORMAT_DIRECT3D9_A2R10G10B10 DX_TEXTUREFORMAT_DIRECT3D9_A16B16G16R16 DX_TEXTUREFORMAT_DIRECT3D9_R16F DX_TEXTUREFORMAT_DIRECT3D9_G16R16F DX_TEXTUREFORMAT_DIRECT3D9_A16B16G16R16F DX_TEXTUREFORMAT_DIRECT3D9_R32F DX_TEXTUREFORMAT_DIRECT3D9_G32R32F DX_TEXTUREFORMAT_DIRECT3D9_A32B32G32R32F MakeScreen を使用して描画先にできる画像を作成する前に SetUsePlatformTextureFormat( DX_TEXTUREFORMAT_DIRECT3D9_A2R10G10B10 ) ; などと実行しておくと、SetUsePlatformTextureFormat で指定しておいたフォーマットの画像が作成されます SetUsePlatformTextureFormat( 0 ) ; を実行すると設定が解除されますので、MakeScreen の後は設定を解除 するようにしてください 因みに、実行する環境が指定のフォーマットに対応していない場合は MakeScreen が失敗しますので、 あまりマイナーなフォーマットは使用しない方が良いです 関数 SetUsePlatformTextureFormat を追加したバージョンはこちらにアップしましたので、よろしければお使いください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) > また、現在の仕様ではバッファのフォーマットを指定する際に浮動小数フラグ、ビット数、 > チャンネル数などを1つずつ関数で指定していますが、例えばDX_FORMAT_A2R10G10B10のような > 定数一つでフォーマットを指定するほうがシンプルでわかりやすいと思います。 A2R10G10B10 のような直接的なフォーマット指定は使用する描画APIが変化すると表現も変わるので、 永遠に Direct3D9 を使用する場合は分かりやすくてよいのですが、今後も時代の流れに応じて 使用APIも変更しようと思うと適合するフォーマットが無くなったりして困ることになるので、 きっちりとフォーマットを指定できるようにするのは避けていました ( 因みに Direct3D 10 以降には A2R10G10B10 は存在せず、似たものとして R10G10B10A2_UNORM と R10G10B10A2_UINT があります )
メンテ
Re: A2R10G10B10などのレンダリング可能テクスチャ ( No.2 )
名前:gufo(解決) 日時:2015/10/05 02:38

いつも迅速な対応ありがとうございます。 確かにAPIでフォーマットが変わった時に困りますね。そこは考慮不足でした。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存