トップページ > 記事閲覧
描画対象のフォーマットについて
名前:Jukis 日時: 2016/12/05 09:46

いつもDXライブラリを利用させていただいております DirectXについて解説している他のサイトを見ると、よくR8G8B8A8だのR32だのといった、 レンダーターゲットのフォーマットを指定している様子が見られます これに相当するDXライブラリの機能はありますか? 回答よろしくお願いいたします
メンテ

Page: 1 |

Re: 描画対象のフォーマットについて ( No.1 )
名前:管理人 日時:2016/12/06 00:35

DXライブラリは一般的には R8G8B8A8 といった具体的な RGB やビット数の指定ではなく 合計のビット数やチャンネル数や整数型か浮動小数点型かを指定します // 整数型 RGBA 各8ビットの場合 SetCreateGraphColorBitDepth( 32 ) ; int Screen = MakeScreen( 512, 512, TRUE ) ; // 浮動小数点型 RGBA 各32ビットの場合 SetDrawValidFloatTypeGraphCreateFlag( TRUE ) ; SetCreateDrawValidGraphChannelNum( 4 ) ; SetCreateGraphChannelBitDepth( 32 ) ; int Screen = MakeScreen( 512, 512, TRUE ) ; // 整数型 RG 各16ビットの場合 SetDrawValidFloatTypeGraphCreateFlag( FALSE ) ; SetCreateDrawValidGraphChannelNum( 2 ) ; SetCreateGraphChannelBitDepth( 16 ) ; int Screen = MakeScreen( 512, 512, TRUE ) ; その他、Direct3D 9 を使う場合のみ以下の定義を SetUsePlatformTextureFormat に 渡して呼ぶことで、直接フォーマットを指定することもできます // Direct3D9 用テクスチャフォーマット #define DX_TEXTUREFORMAT_DIRECT3D9_R8G8B8 (1) #define DX_TEXTUREFORMAT_DIRECT3D9_A8R8G8B8 (2) #define DX_TEXTUREFORMAT_DIRECT3D9_X8R8G8B8 (3) #define DX_TEXTUREFORMAT_DIRECT3D9_R5G6B5 (4) #define DX_TEXTUREFORMAT_DIRECT3D9_X1R5G5B5 (5) #define DX_TEXTUREFORMAT_DIRECT3D9_A1R5G5B5 (6) #define DX_TEXTUREFORMAT_DIRECT3D9_A4R4G4B4 (7) #define DX_TEXTUREFORMAT_DIRECT3D9_R3G3B2 (8) #define DX_TEXTUREFORMAT_DIRECT3D9_A8R3G3B2 (9) #define DX_TEXTUREFORMAT_DIRECT3D9_X4R4G4B4 (10) #define DX_TEXTUREFORMAT_DIRECT3D9_A2B10G10R10 (11) #define DX_TEXTUREFORMAT_DIRECT3D9_G16R16 (12) #define DX_TEXTUREFORMAT_DIRECT3D9_A8B8G8R8 (13) #define DX_TEXTUREFORMAT_DIRECT3D9_X8B8G8R8 (14) #define DX_TEXTUREFORMAT_DIRECT3D9_A2R10G10B10 (15) #define DX_TEXTUREFORMAT_DIRECT3D9_A16B16G16R16 (16) #define DX_TEXTUREFORMAT_DIRECT3D9_R16F (17) #define DX_TEXTUREFORMAT_DIRECT3D9_G16R16F (18) #define DX_TEXTUREFORMAT_DIRECT3D9_A16B16G16R16F (19) #define DX_TEXTUREFORMAT_DIRECT3D9_R32F (20) #define DX_TEXTUREFORMAT_DIRECT3D9_G32R32F (21) #define DX_TEXTUREFORMAT_DIRECT3D9_A32B32G32R32F (22) // 1チャンネル32ビット浮動小数点型の場合 SetUsePlatformTextureFormat( DX_TEXTUREFORMAT_DIRECT3D9_R32F ) ; int Screen = MakeScreen( 512, 512, TRUE ) ; ただ、こちらを使用する場合は Direct3D 11 を使用できる環境でも Direct3D 9 を使用するために DxLib_Init を呼ぶ前の箇所に SetUseDirect3DVersion( DX_DIRECT3D_9EX ) ; を記述して 必ず Direct3D 9 を使用するようにする必要があります ( 尚、同じようなタイプの Direct3D 11 用の関数はありません )
メンテ
Re: 描画対象のフォーマットにつ ( No.2 )
名前:Jukis 日時:2016/12/06 17:42

回答ありがとうございます これらの方法で作成したスクリーンにシェーダーで描画を行ったり、 テクスチャとしてピクセルシェーダーから参照したりしたいのですが、 デフォルトのフォーマットと比べて気を付けるべきことはありますか?
メンテ
Re: 描画対象のフォーマットについて ( No.3 )
名前:管理人 日時:2016/12/07 01:03

SetDrawValidFloatTypeGraphCreateFlag や SetCreateGraphChannelBitDepth で 変更した設定は MakeScreen の実行後も継続されますので MakeScreen を実行した後は設定を戻しておくと問題が起きにくいです // 整数型 RGBA 各8ビットの場合 SetCreateGraphColorBitDepth( 32 ) ; int Screen = MakeScreen( 512, 512, TRUE ) ; SetCreateGraphColorBitDepth( 0 ) ; // 浮動小数点型 RGBA 各32ビットの場合 SetDrawValidFloatTypeGraphCreateFlag( TRUE ) ; SetCreateDrawValidGraphChannelNum( 4 ) ; SetCreateGraphChannelBitDepth( 32 ) ; int Screen = MakeScreen( 512, 512, TRUE ) ; SetDrawValidFloatTypeGraphCreateFlag( FALSE ) ; SetCreateDrawValidGraphChannelNum( 0 ) ; SetCreateGraphChannelBitDepth( 0 ) ; // 整数型 RG 各16ビットの場合 SetDrawValidFloatTypeGraphCreateFlag( FALSE ) ; SetCreateDrawValidGraphChannelNum( 2 ) ; SetCreateGraphChannelBitDepth( 16 ) ; int Screen = MakeScreen( 512, 512, TRUE ) ; SetDrawValidFloatTypeGraphCreateFlag( FALSE ) ; SetCreateGraphChannelBitDepth( 0 ) ; SetCreateDrawValidGraphChannelNum( 0 ) ; // 1チャンネル32ビット浮動小数点型の場合 SetUsePlatformTextureFormat( DX_TEXTUREFORMAT_DIRECT3D9_R32F ) ; int Screen = MakeScreen( 512, 512, TRUE ) ; SetUsePlatformTextureFormat( 0 ) ; 後は GPU によっては対応していないフォーマットもあるので、デフォルトの フォーマットよりは正常に動作する環境が少なくなるということを前提に使用して いただければと思います
メンテ
Re: 描画対象のフォーマットについて ( No.4 )
名前:Jukis 日時:2016/12/09 00:39

なるほど、複数のスクリーンを作るときにまとめてフォーマットを設定できるわけですね これらを対象に使用するシェーダープログラムの方ではどのように対応すればよいでしょうか? tex2Dの使い方やmain関数の戻り値などに変更はありますか?
メンテ
Re: 描画対象のフォーマットについて ( No.5 )
名前:管理人 日時:2016/12/10 01:02

> tex2Dの使い方やmain関数の戻り値などに変更はありますか? 特に変更はありません、例えば RG しかないテクスチャでも、普通に float4 のテクスチャと同じように戻り値が float4 として tex2D で 読み込めます( ただし、その場合 BA の値は 1.0f になります ) main関数の戻り値も普通に float4 で良いので特に変更はありませんが、 浮動小数点型のレンダーターゲットの場合は 1.0f 以上の値やマイナスの 値を返してもそのまま保存されます( 整数型のレンダーターゲットの場合は 0.0f 以下や 1.0f 以上の値を返しても 0.0f や 1.0f にクランプされます )
メンテ
Re: 描画対象のフォーマットについて ( No.6 )
名前:Jukis(解決) 日時:2016/12/10 16:31

返信ありがとうございます おかげさまで理解することができました。 丁寧な解説をありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存