この章ではポリゴンにテクスチャを張り付けて描画する方法について解説します。 このページの内容は、3D座標変換描画まで終わっていることが前提です。 実行結果 Shader設定 頂点シェーダーとピクセルシェーダーの2つを設定します。 // 頂点シェーダーを設定する var vertexShaderByteCode = ShaderBytecode.CompileFromFile("MiniCubeTex.fx", "VS", "vs_4_0", ShaderFlags.None, EffectFlags.None); var vertexShader = new VertexShader(_device, vertexShaderByteCode); // ピクセルシェーダーを設定する var pixelShaderByteCode = ShaderBytecode.CompileFromFi
MiniEngineをグラフィックス診断をしていてDescriptorHeapを見ていて気づいたのですが、Direct3D12ではID3D12Resouce(テクスチャ、バッファ、コンスタントバッファ、UAV)などのリソースに任意の名前が付けられるんですね(下図の赤枠)。名前がついてると、DescriptorHeapに大量にリソースがセットされていても内容がチェックしやすくて便利ですね。 クリックすると大きなサイズになります ちょっと気になったので、確認のためグラフィックスオブジェクトテーブルを見てみます。 クリックすると大きなサイズになります なるほど、Direct3D11時代のときのように従来の「オブジェクト:〇〇」(〇〇は数字)のような表記もあるんですね。 では、名前がついてるものと「オブジェクト:〇〇」表記は何が違うんでしょうか? ・・・ということで、調べてみたところID3D12O
ディファードコンテキスト 今パートではID3D11DeviceContextの1種であるディファードコンテキスト(英訳:Deferred Context)について見ていきます。 今までシェーダやリソースの設定などでID3D11DeviceContextを使ってきましたが、それらはイミディエイトコンテキスト(英訳:Immediate Context)と呼ばれています。 イミディエイトを訳すと「即時」といった意味になり、イミディエイトコンテキストを通じて行う設定など(以後、コマンドと呼びます)は直ちにコマンドバッファという一時的なストレージ空間へ積まれGPUの都合がいい時に実行されます。 またイミディエイトコンテキストはメインスレッド上からでしか使うことができません。 なので、マルチスレッドを利用している場合は何かしらの方法でGPUを実行するために必要な情報をメインスレッドに移す必要があります
Mobile系、Direct3DやShaderなどについて書いています。3D Lib + Framework 開発中。 DirectX10 で大きく仕様が変わったのは、より汎用化を進めるためでした。 つまり専用の機能が無くなったということ。 ライティングのための機能、マテリアルの設定などといった目的別の API は 完全に姿を消しています。 では CPU のように完全に何にでも使える、単純でフラットな空間が得られたのかと言えば必ずしも そうではなく、特にリソースとバッファの扱いはかえって複雑になった印象を受けます。 汎用化や何にでも使えることが、そのまま単純化に繋がるとは限らないためです。 複数の機能の要素をマージしたこと、目的別の機能の代わりにより抽象的な用語や仕様が 増えたことがその要因といえるかもしれません。 DirectX11 はさらに CompteShader が使えるようになり
このブラウザーはサポートされなくなりました。 Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。 この記事では、BitmapDecoder と BitmapEncoder を使って画像ファイルを読み込んだり保存したりする方法のほか、SoftwareBitmap オブジェクトを使ってビットマップ画像を表現する方法について説明します。 SoftwareBitmap クラスは、さまざまなソースから作成できる多用途の API です。画像ファイルや WriteableBitmap オブジェクト、Direct3D サーフェスから作成できるほか、コードから作成することもできます。 SoftwareBitmap を使うと、異なるピクセル形式間やアルファ モード間の変換、ピクセル データへの低レベル アクセスを簡単に行うこ
:::::::::::056話 WPF で SharpDX::::::::::: SharpDX のサンプルは基本的にC#の Windows.Form を使います。 では WPF で SharpDX を使いたい場合はどうすれば良いのでしょうか? WPF で SharpDX を利用するには 実はサンプルをよく見ると WPF での使い方が示されています。 サンプルの使い方は 053話 SharpDX 使い方 で示しました。 プロジェクト名は WPFHost です。 ビルドして実行すると次の結果が得られます。 1秒間隔で固定された三角形の色が変化する様子が確認できます。 WPF についてはもう大丈夫かな? ソースを読んだところ、CompositionTarget.Rendering イベントにハンドラを引っ掛けて メッセージループを完成させています。(約16ms間隔の更新) 実装の詳細を見てみま
デバイスの作成で使用するパラメーターを記述します。 typedef enum D3D11_CREATE_DEVICE_FLAG { D3D11_CREATE_DEVICE_SINGLETHREADED = 0x1, D3D11_CREATE_DEVICE_DEBUG = 0x2, D3D11_CREATE_DEVICE_SWITCH_TO_REF = 0x4, D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x8, D3D11_CREATE_DEVICE_BGRA_SUPPORT = 0x20, } D3D11_CREATE_DEVICE_FLAG; 定数 D3D11_CREATE_DEVICE_SINGLETHREADED このフラグは、アプリケーションが D3D11 を単一のスレッドからのみ呼び出す場合に使
//DefferdContextの作成(必要なスレッド数作るとよい pDevice->CreateDeferredContext(0, &pDfContext); DefferdContextの作成方法は単純でDeviceからCreateDeferredContext()を呼んであげたら作れます。 この時注意が必要なのがDefferdContext単体でスレッドセーフな訳ではないということです。 //DefferdContextの作成(必要なスレッド数作るとよい pDevice->CreateDeferredContext(0, &pDfContext); thread t1([](){ pDfContext->VSSetShader(nullptr, nullptr, 0); //スレッドセーフになっていないため動作不定 }) thread t2([](){ pDfContext->VS
記念すべき初投稿は、DirectX11のデバッグレイヤーの話です。 DirectXでは、COMオブジェクトを使った設計がされています。 COMオブジェクトについては詳しく知らないので、ここでは割愛します。 ようは、Release()忘れを絶対にするなよということです。 とはいっても結構やってしまったりします。 そこで、Release忘れが発生しているかを調べる方法があります。それがデバッグレイヤーです。 デバッグレイヤーというのはD3Dデバイスの話です。 CreateDeviceをする時に、D3D11_CREATE_DEVICE_DEBUGを第4引数に渡すことで作成できます。 デバッグレイヤーはRelease忘れのチェックなどの処理をするため、普通よりも重たいです。 デバッグビルド時のみ有効にするとかしておくと便利ですね。 さて、Release忘れはこんなふうに、VisualStudioの
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く