SharpDXは、C#で、Direct Xを使用するためのラッパーの1つです。SharpDXについて調べてみることにしました。
- SharpDX Home
- GitHub: sharpdx/SharpDX
- 作者のサイト http://code4k.blogspot.com/
Direct Xが使いたいわけではなく、「Windows API CodePack」のReadMeに「これからは、SharpDXを使ってね。」とあったので、フォルダ選択ダイアログなどの便利なコントールを求めて、SharpDXにたどり着きました。
確認した結果、現時点(2019-02-13)では、ドキュメントとサンプルコードが不完全なので、ソースコードから、使い方を類推できる人しか使えないと思います。
SharpDX ドキュメントの和訳
Direct XのC#向け、ラッパーのSharpDXのドキュメントは、現在のところ(2019.02.13)一部しか存在しません。存在する部分だけを和訳してみました。
翻訳したドキュメントは、GitHubで提供されているファイル内のドキュメントフォルダーのものです。
SharpDXの使用法についての内容は、存在しませんでした。
00-index
断り書き:このドキュメント・リポジトリーは、作業中です。そして、次のリリースで、改善されるでしょう。
このドキュメントの主な目的は、DirectXのAPIを取り扱うSharpDXを、どのように、使用するかを説明することです。SharpDXは、ほぼ、1人の開発者の貢献の結果です。そのため、このドキュメントは、DirectX SDKのドキュメント全体を置き換えること、あるいは、DirectX APIの詳細な使用方法を提供することを目的としていません。
したがって、既存のDirectX MSDN C ++ドキュメントや人気のあるDirectXの書籍を利用することを強くお勧めします。SharpDXは、低レベルAPI、そして、DirectX APIの上にある単なる薄い層なので、開発者は、適切にSharpDXを使うために、根底にあるC++ APIを理解する必要があります。C ++ APIを理解しても、経験豊富なC ++開発者になる必要はありませんが、あなたは、少なくともポインター、参照カウント、COMオブジェクトなどのような、単純なC++/Win32コンセプトを理解する必要があります。
このバージョンでは、きれいで使いやすいクラス・ライブラリ・リファレンスを提供することを、主な目的としています。あなたは、ドキュメントが、元のMSDNのドキュメントに対応し、便利なリンクの多くを提供していることを見るでしょう。あなたは、簡単に、SharpDXを管理したAPIとネイティブC++ APIを行き来できます。一部のリンクは、まだ完全に設定されていませんが、それらは、すぐに修正されます。
ドキュメントは、次第に構築されていくので、あなたは、既に、予想される目次を見ることができます。あなたが、貢献したい場合、あるいは、あなたが、この文書に関して提案がある場合、フォーラムに、メッセージを残してください。
01-news
Release Notes (2012-11-20)
概要
General Information
SharpDXの新しいバージョン2.4.1が、本日、ダウンロードできます。
このバージョンは、主にいくつかの問題を修正し、SharpDXツールキットを改善する、メンテナンス・バージョンです。
DirectXTkからPrimitiveBatchは、すでに、Toolkitに移植されています。また、GraphicsDevice.DrawQuadを使用して、フルスクリーンのクワッドを描画するための新しい便利な方法があります。Toolkitの変更の詳細については、以下を参照してください。
Toolkitのエフェクト・コンパイラ(tkfx.exe)の使用については、注意して下さい:あなたは、どちらのバージョンでも使用することができます:
- DirectXエンドユーザー・ランタイム2010年6月が、インストールされている場合は、ディレクトリBin\Net40Release。
- あるいは、あなたは、直接、D3DCompiler_46.dllに同梱されている、Bin\Win8Desktop-net40を使用することができます。
- どちらのバージョンでも、(あなたが、d3dcompiler_46.dllを使用する場合にだけ、利用できる、最新のD3D11.1機能を使用している場合を除いて、デスクトップ、Windows RTとWindows Phone 8から)すべてのWindows用のシェーダをコンパイルできます。
前回の記事で説明したように、SharpDXは、現在、コミュニティからコードの貢献を受け入れています。このリリースでは、github上のSharpDXへの初期の貢献者からの貢献を統合しています!
サポートに関して、私は、私の主なサポートを、次のAPIの中核機能に焦点を合わせています。:
- (Effect11フレームワークでない)Direct3D11、DXGI、D3DCompiler、XAudio2とMediaFoundationの音声部分。
- (デスクトップ以外のプラットフォームの場合)ツールキット、Toolkit.Graphicsとコンパイラ、Toolkit.Gameアセンブリは、優先順位が低くなります。
他のAPIの場合、SharpDXでは、現在、優先度の低いサポートがあるので、私は、バグ修正や改良を加えるために、コミュニティが、参加することを強く推奨します。
フォーラムに関して、「サポートとコミュニティの変更」の記事で説明されているように、APIの使用に対応するための私の個人的な投資は、現在、はるかに優先度が低くなっています。
また、お問い合わせフォームに記載されているとおり、私は、SharpDXのバグ通知やAPIの使用についての私的な問い合わせには一切応じていません。
変更とバグの修正
Changes and bugfixes
下記の、以前の2.3バージョンのすべての変更と修正の自動的に生成されたリストから、見つけて下さい。
コードは、SharpDXコミュニティによって貢献されました。
- WP8のための欠落したXAudio相互運用メソッドを追加しました。(変更、変更)
- 誤ったSetPixelおよびSetVertexShaderConstant(FおよびI配列)の数が誤っていた場合の修正* 4(変更)
- 問題#305を修正しました。[DX11] Direct3D11.EffectPassで関数が欠落していました(変更、変更)
- 入力/出力変数としてdesiredRenderTargetSizeを正しくサポートするように、IDrawingSurfaceBackgroundContentProviderNative.PrepareResourcesを修正しました。(変更)
- ブランチ 'master'をwp8にマージしました(変更)
- jbriguet/masterからのpullリクエスト#1をマージ(変更)
- リモート・トラッキング・ブランチ 'origin / master'をマージします(変更)
- SetVertexShaderConstantのための修正を更新(変更)
- ColorConverterとColor4Converterを追加(変更)
- SharpDX.MediaFoundation.CaptureDeviceAttributeKeysに、SourceType VideoCaptureGuidとAudioCaptureGuidを追加しました(変更)
- mf.dllを使用して、さまざまな機能のMediaFoundationのマッピングを修正しました(変更)
ビルド
Build
SharpDoc
- 異なるアセンブリで宣言された同じ名前空間をサポートするために、アセンブリのドキュメントを削除してください。次に、名前空間は、クラス・ライブラリ参照の最上位のレベルのトピック項目です。(変更)
SharpDX
SharpGitLog
- リンクを修正しました(変更)
Toolkit
- 登録された分解器がないとき、ContentManager.Loadに、例外を追加します。(変更)
Toolkit.Compiler
- FXファイルに括弧、大括弧、中括弧がない場合にチェックを追加し、構文解析エラーを生成します。(変更)
Toolkit.Game
- GraphicsDeviceManagerのPreferredGraphicsProfileに、より優れたサポートを追加しました(変更)
- ゲームクラスのように、GameSystemが、コンテンツをロードおよびアンロードできるように、IContentableを追加します。GameSystemにアクセス可能にするために、ContentとGraphicsDeviceプロパティを直接追加します。(変更)
- Desktopプラットホームのために、Activated、DeactivatedとExitingイベント・サポートを追加、(Windows RTとWP8には、まだ実装されていません)(変更)
- 問題#281を修正しました。Game.IsMouseVisibleは、現在、Desktop (bis)で動作しています(変更)
- 問題#281を修正しました。Game.IsMouseVisibleは、現在、Desktopで動作しています。(変更)
- 問題#291を修正しました。PreferredBackBufferWidth/PreferredBackBufferHeightは、全画面表示以外のシナリオで、効果的に使用できます。(変更)
- デバイスに接続されているアダプターが無効であるため、アダプタが、nullの場合、電話HWデバイス上でクラッシュする問題#309を修正しました。(変更)
- 問題#309を修正しました。GraphicsDeviceInformation.Adapterに、null値を許可します。(変更)
- 問題#310を修正しました。ゲーム内のプライベート変数が、初期化されませんでした。(変更)
Toolkit.Graphics
- texture2Dの代わりに、ShaderResourceViewを許可するために、BasicEffect.TextureViewを追加します。Texture2DBaseを受け入れるように、BasicEffect.Textureを変更します(変更)。
- PrimitiveBatchに、コメントを追加します。既知のVertexElementsを持つ頂点に、自動的にVertexInputLayoutを追加します。(変更)
- PrimitiveQuad/GraphicsDevice.DrawQuadに、コメントを追加しました(変更)
- ジェネリックTexture.Newメソッドを追加します。TextureDescriptionに、equals/hashcodeを追加しました(変更)
- XNAに、類似しているGraphicsDevice.Clearメソッドを追加しました(変更)
- フルスクリーン・クワッド・プリミティブに、PrimitiveQuadとGraphicsDevice.DrawQuadを追加します。新しいDrawQuadメソッドを使うために、CustomEFfectContentサンプルを変更します。(変更)
- SpriteBatchに、テストとTextureInfoコメントを追加する。(変更)
- テクスチャの無秩序アクセス・ビューへのアクセスを修正しました。(変更)
- GraphicsDevice.SetVertexBuffersのバグを修正します。PrimitiveBatchが、正常に動作していることをテストします。(変更)
- SpriteBatchのコンパイル・エラーのタイプミスを修正しました(変更)
- GameWindow.AllowUserResizingを修正しました(変更)
- 問題#284を修正しました。並べ替えモードが、特定のSpriteBatch.Drawメソッドで機能していませんでした。(変更)
- 問題#286を修正しました。SpriteBatchは、複数のインスタンスで動作していませんでした。(変更)
- 問題#289を修正しました。パスが、シェーダ・ステージをnullに設定できます(変更)
- 問題#296を修正しました。Effectが、リソースで適切に動作する妨げていた効果の深刻なバグ。(変更)
- 問題#301を修正しました。SpriteEffects.FlipXXXモードは、現在、適切に動作しています(変更)
- 問題#304を修正しました。GameSystem.Initializeにvirtualを追加し、イベント・メソッドを起動する(変更)
- SpriteBatchのstatic/readonlyメンバーの順序を修正しました。使っていないメンバーを削除します。(変更)
- SpriteBatchのx64下でのパフォーマンスの奇妙な問題を修正しました。現在、x86と同等になるはずです(変更)
- デバイスをデバッグするとき、無効なエラーメッセージを回避するために、BasicEffectで、デフォルトのSamplerSateを使用するようにTexture Samplerを初期化します。(変更)
- はるかに用途が広いので、Texture2Dの代わりに、ShaderResourceViewを許可するようにSpriteBatchを変更します。(変更)
- CustomEffect.CurrentTechniqueのテストをSpriteBatchの上位レベルに移動します(変更)
- DirectXTkから、PrimitiveBatchを移植します。まだ、検証されていません。(変更)
- CustomEffectGameサンプルから、DeviceCreationFlags.Debugを削除します(変更)
- DirectXTkと同じ動作を使用して、SpriteBatchの即時モードを単純化します(変更)。
- GraphicsDevice.GetOrCreateSharedData
を更新して、 "string key"ではなく "object key"を受け入れるようにします。(変更)
Toolkit.tkfxc
XAudio2
20-tools-sharpdoc
SharpDocは、このドキュメントの背後にある本物のツールです。SharpDX用に特別に開発された完全なドキュメンテーション・システムであり、すぐに、一般のツールとして利用できるようになるでしょう。
このドキュメンテーション・システムは、高品質のドキュメンテーションと完全に生成されたクラスAPIリファレンスを提供しています。現在の機能は、以下の通りです:
- シンプルで強力なRazorテンプレートエンジンを使用した、完全にテンプレートに基づいたシステム。cshtml、css、Javascript、およびC#を使用して、ページを開発してください。
- 簡単にカスタマイズ可能、上書き可能。
- より優れたユーザー体験のためのJavaScriptとCSSを使用して、アセンブリから作成される、きれいなクラス・ライブラリ・リファレンス。
- 名前空間とアセンブリ・ドキュメントのサポート
- カスタム・ユーザー・トピックと目次のサポート。
- MSDN .NETドキュメントへのリンク。
- Sandcastleより保守が簡単で高速
未定:ドキュメンテーション・システムが、どのように動作しているかについて説明します。ドキュメントの作成方法、設定ファイル、cshtml、cssなどのカスタマイズ方法。
20-tools-sharpgen
SharpGemは、SDK C ++ヘッダーから、直接マネージDirectX APIを生成するために、特別に開発されたC ++ヘッダーから、C#コードを生成するためのツールです。あなた自身のプロジェクトに、SharpGenを使用することができます。そして、あなたのC ++ / COM互換ヘッダから、C#レイヤを生成します。
未定:ツールを使用する方法を説明します。あなたが、このツールの内部構造に関するより多くの情報を望む場合、作成者のブログからアクセス可能な以前の記事があります。
40-issues
Direct3D11.1 Video Processingクラスは、まだ完全に使えません。
Direct3D9には、メッシュとアニメーションのD3DXメソッドがありません。