「 プログラミング 」一覧



C# でアンマネージ領域のメモリコピー


単なる memcpy のようなことを、アンマネージ領域で行いたいときの話です。
Marshal.Copy が一見できるかなと期待してしまうのですが、これはマネージド配列からアンマネージドのメモリへコピーするための関数です。(オーバーライドにより逆方向も可能になってます)。

しかしコピー元もコピー先もアンマネージドのオーバーライドはありません。
これをどうするかですが、 memcpy を使用するとちょっと大変なので Win32 API の力を借ります。

CopyMemory という関数が、 kernel32 に含まれているので、これを使います。

memcpy を使おうとすると、 VCランタイムがインストール必須になってしまうのでこちらで。


Vulkan と WPF


年末年始のタイミングで Vulkan を少し勉強してみました。個人的な印象では DirectX12 よりも難しい感触がありました。
しかしながら、発表からある程度の時間が経っており、情報も比較的多くあったため三角形を1枚出せるところまで到達できました。
既に先陣を切ってくれた人が情報を公開してくれていたのが大変参考になりました。

続きを読む


コンテキストメニューについて苦戦した話


Windows エクスプローラーが表示するようなコンテキストメニューを自分のアプリケーションでも表示したいことがあります。
このときに難しいと感じた部分や罠があったので記録として残しておこうと思います。
意外にもまとめてあるページはなかったようなので、誰かの役に立ってくれれば幸いです。

現在のシステムにおいて登録済みのコンテキストメニューを表示するまでの話で、コンテキストメニューの拡張の話では無いのでご注意ください。

続きを読む


Nexus5X を Android 7.1.1


Nexus5X の端末に Android 7.1.1 の OS が配信されてきたので更新してみました。
Android 6.0.1 からの更新となり、 7.0 を飛ばしてしまった感じになりました。

更新結果

動作そのものが重くなるかなと思いましたが、逆にレスポンス良く動くようになった気がします。
そして OpenGL ES 3.2 のコンテキストで初期化できるようになったようです!今までに ES 3.2 のコンテキストで動く端末を見てなかったので感動です。

続きを読む


ドッキングウィンドウ on WPF での OpenGLView


前回の延長戦で、ドッキングウィンドウとの組み合わせを試してみました。
ドッキングウィンドウには AvalonDock (WPF Extended Toolkit 付属) を用いています。

はじめに

AvalonDock でドッキング可能なドキュメントとして、前回の カスタム版 D3D11Image を貼り付けています。
ここに OpenGL の描画をはめ込む形です。

今までのものと大きく異なるのは以下の点だと思います。

  • 独立したウィンドウになることがある(フローティングウィンドウ)
  • 表示/非表示のタイミング
  • Window に貼り付けられているわけでなく UserControl 以下

これらの条件変化によって、動きが変わるかを確認してみました。

wpf_avalondock_ogl
続きを読む


WPF で OpenGL の描画はめ込み


WPF アプリで OpenGL の描画結果をはめ込めたらいいなと思ってトライしてみることにしました。
WPF は DirectX9 で動いているため、またアプリ全体で1つのウィンドウハンドルとなっているため、従来の C# フォームアプリのように特定の部分だけ描画を任せるというようなことが難しくなっています。

続きを読む


OpenGL で SPIR-V のシェーダー


OpenGL にも SPIR-V のシェーダーコードを使えるようにする GL_ARB_gl_spirv という拡張が存在します。ベンダー拡張ではなくいきなり ARB として定義されているので標準的に使える日もそう遠くないと思っています。

自分が使っているのが NVIDIA Geforce 650 Ti ですが、比較的最近のドライバ (375.57) でこの GL_ARB_gl_spirv が出現していました。この環境で簡単ではありますが、動作の確認やコードの書き方などやってみたいと思います。

ogl_spirv_test
続きを読む