プログラミング一覧

NVIDIA Nsight Graphics を試す

NVIDIA Nsight といえば、 Visual Studio に統合されて、グラフィックス API 使用時のデバッグのお供として定番のものでした。これのスタンドアロン版、 Visual Studio に統合されないで単体で使用できるアプリケーションとして、「NVIDIA Nsight Graphics」が公開になりました。

今のところ、専用のドライバが必要になるみたいですが、ちょっと動作を確認してみたいと思います。

※ 少し前に Windows10 のドライバをダウンロードすると正常なものが取得できませんでしたが、現在は正常になっているようです

入手・セットアップ

現時点において NVIDIA の以下のページから入手が可能です。

このページからダウンロードページへのリンクがあります。ダウンロードには NVIDIA Developer のアカウントが必要になるようなので、持っていない場合には作成することが必要になります。そして、 Nshight Graphics 本体と、各自の環境に合わせたドライバをダウンロードします。

今のところ、 NVIDIA Geforce 600 番以降であれば対応しているようです。また 64 ビット Windows 7 or 10 の環境のみサポートしているようです。Windows 8系や 32 ビットあたりを打ち切っている辺り潔いです。デバッグ時にこれらの環境を使っていることは割と少ないと思いますが、ドライバのダウンロードの箇所には Win8 の文字があって対応していそうにも見えますが、注意が必要です。
続きを読む


DirectX Raytrace (DXR) の始め方

GDC で話題になっていた DirectX Raytracing (DXR) が触ってみることができるようになった模様です。

Microsoft が DirectX のサンプルプログラムを公開しているリポジトリで、先日の DXR のサンプルが追加されていました。
https://github.com/Microsoft/DirectX-Graphics-Samples

今回はこれを起動させるまでを説明します。

準備

まずはリポジトリからファイルをダウンロードするか、 git を使って clone して取得してきます。
以前にリポジトリを clone している人は、 pull で最新状態に更新しておきます。

この中の Samples/Desktop/D3D12Raytracing というフォルダの中がサンプルコードとなります。

VisualStudio 2017 と、最新の Windows SDK が必要になるので、Visual Studio インストーラーから Windows SDK 10.0.16299 を含むように設定します。

続きを読む


Vulkan, D3D11 InterOp

Vulkan 1.1 で クロスプロセス API の相互運用機能 が標準に含まれたようだったので、再び Vulkan と DirectX11 (D3D11) の相互運用にチャレンジしてみました。
使用した拡張名としては以下のものになります。

  • VK_KHR_external_memory_capabilities
  • VK_KHR_external_memory
  • VK_KHR_external_memory_win32

動作結果としては以下のようになり、一応は動作させることができました。

続きを読む


Vulkan 1.1 が発表された

Vulkan といえば 1.0 のバージョンのまま、マイナーバージョンアップを黙々と続けているものでしたが、今回 1.1 の発表となりました。実情としては 1.0.70 ≒ 1.1.70 みたいな感じで、 1.1.0 からの再スタートというナンバリングではないようです。
この記事を書いている時点においては、少々出遅れしたためか、既に Windows の Vulkan SDK では 1.1.70.1 なるバージョンが出ていたりします。

続きを読む


WPF の ListView で選択項目を中央にしたスクロール制御

ListView で選択された項目をコントロールの中央に表示したいと思うことがあります。今回はこれを実現するべく実装を考えてみました。考え方としては ListView が持っている ScrollViewer を制御して、スクロールを制御することにしました。

結果

実装した結果を示します。作成したアプリの動きとしては次のようになっています。

  • 選択状態にあるものを画面外にスクロールさせたとして、”アジャスト”ボタンを押すと、その項目が中央になるように表示
  • 項目の番号を指定して”選択”ボタンを押すと、対象の項目を選択状態にして、その項目が中央になるように表示

続きを読む


ListView での VerticalContentAlignment バインディングエラー

ListView(+ListViewItem) のスタイルをいじってバインディングのエラーが出るのは分かるのですが、予期しないところでエラーが出るので困っていました。今回、ひとまずどういったときにエラーメッセージが出るのかが掴めたのと、今後同じように悩まないためにもメモとして残しておこうと思います。

バインディングエラーと対策

ListView あたりのスタイルをいじっていて以下のようなワーニングメッセージを見ることがありました。特にこの辺りのバインディングいじっていないのに出てしまうので疑問に思っていましたが、起因しているものが分かりました。

このエラーメッセージは、内容が動的に変化するコントロールにおいてよく出るようです。自分の場合には ListView などで仮想化して使っている場合に、このような症状が出るようです。

そこで ListViewItem のプロパティセッターに以下のようにしてパラメータをセットするようにして解決できました。

仮想化ありの場合

仮想化ありの場合においては上記の設定でうまく出来ませんでした。 ListViewItem の中身をカスタムする時に、 Blend を用いて既存のものをコピーして、編集する方法で行いましたが、当初のようなエラーメッセージを見ることになりました。

対策としては以下のように編集しました。

ListViewItem のテンプレートを Blend を用いて既存のものをコピーして作った場合、上記の(※)の部分についてもバインディングが設定されています。しかしそれにより今回のようなバインディングエラーが通知されてしまうため、項目そのものを削除しました。

まとめ

この手のものは、他にも動的な右クリックのメニュー(コンテキストメニュー)を作っているときにも、出遭いそうな気がします。参考情報を見ると、 WPF での既知の問題といえる内容にも見えます。

参考情報


WPF と OpenGL の空域問題への対処

WPF を使っていて厄介な問題の1つに空域の問題があります。特に DirectX や OpenGL, Vulkan といった HWND を使うものを扱って WPF の世界に持ち込むと遭遇します。他にも HWND を必要とする(従来型の)コントロールを配置すると出遭います。ブラウザのコントロールなどが該当するようです。

具体的には HWND を使用したコントロールを配置、ホストすると、その上には WPF のコントロールを配置できません。配置してエラーになるというわけで無く、 HWND のコントロールが最前面に来てしまうため見えない状態となってしまいます。

今までは、描画結果を D3DImage や Image など画像にしてしまって配置する方法を考えていましたが、もっと別の手段があるようだったので試してみることにしました。

続きを読む


WPF TreeView with SelectedPath binding

Windows エクスプローラーが備えているフォルダツリーのようなものを、 WPF を利用している自作アプリケーションで使用したいことがあります。
調べてみるといくつかの実装が見つかりますが、フォルダツリーの実現のためにビューモデルとビューが分離されている本気度の高いものが多く、もう少し手軽なものがないかなと思った次第です。

以前に以下のアドレスで公開されていた方式が割と気に入っていたのですが、現時点においてアクセスが出来なくなってしまいました。
http://khmylov.com/blog/2010/11/wpf-explorer-treeview-with-selectedpath-binding/

ちょっとしたときにはこれで十分だったりしてお気に入り実装だったので、元の記事を自分なりに再解釈してみたいと思います。

続きを読む


Microsoft Store と Thumbnail Handler

Microsoft ストアでデスクトップアプリも配布できるようになったおかげで、一部のシェル拡張も配布出来るようになりました。
現時点においては、サムネイルハンドラやプレビューハンドラ、プロパティハンドラが対応しているようです。 Paint.Net もストアでの配布が始まり、そのタイミングで tga と dds ファイルのサムネイルハンドラが機能するようになったみたいです。
サムネイルハンドラと聞いて、これはちょっと調べておかないとと思ったので、記録として残しておきます。

情報について

元は Desktop Bridge: Creators Update のブログで書かれた内容が最初でした。
従来のデスクトップアプリをストアで配布出来るように、 Desktop Bridge の機能が用意されました。ここでファイルの関連付けや各ハンドラのようなレジストリの変更が必要なものも対応出来るように機能拡張されて使えるようになりました。

続きを読む


DirectX11 でマルチフルスクリーン その3

DirectX11 でマルチディスプレイ環境で全てのディスプレイでフルスクリーンモードとしたいのに SetFullscreenState が失敗してしまう件の続報です。
この症状は、 Windows10 Creators Update 適用環境でも発生します。おそらく RTM 版から挙動は変わっていないのでは、と思います。詳しくは、前回までの記事を参照してもらうとして、今回は「どうしてもフルスクリーンモードを使いたいんだ」ということで、1つの提案を出してみたいと思います。

続きを読む