/// <summary> /// 指定したサイズの、空のテクスチャを作成する。 /// </summary> public テクスチャ(Size2F サイズ, BindFlags bindFlags = BindFlags.ShaderResource) { this._画像ファイルパス = null; this.ユーザ指定サイズ = サイズ; this._bindFlags = bindFlags; this._定数バッファ = this._定数バッファを作成する(); // テクスチャとシェーダーリソースビューを生成する。 if ((0f >= this.ユーザ指定サイズ.Width) && (0f >= this.ユーザ指定サイズ.Height)) { Log.ERROR($"テクスチャサイズが不正です。[{this.ユーザ指定サイズ}]"); return; } var テクスチャリソース = FDKUtilities.CreateShaderResourceView( DXResources.Instance.D3D11Device1, this._bindFlags, new Size2((int)this.ユーザ指定サイズ.Width, (int)this.ユーザ指定サイズ.Height)); this._ShaderResourceView = テクスチャリソース.srv; this.サイズ = this.ユーザ指定サイズ; this.Texture = テクスチャリソース.texture; }
protected override void On活性化() { var d3dDevice = グラフィックデバイス.Instance.D3DDevice; Debug.Assert(null != d3dDevice, "D3DDevice が取得されていません。"); #region " 定数バッファを生成する。" //---------------- var cBufferDesc = new BufferDescription() { Usage = ResourceUsage.Dynamic, // 動的使用法 BindFlags = BindFlags.ConstantBuffer, // 定数バッファ CpuAccessFlags = CpuAccessFlags.Write, // CPUから書き込む OptionFlags = ResourceOptionFlags.None, SizeInBytes = SharpDX.Utilities.SizeOf <ST定数バッファの転送元データ>(), // バッファサイズ StructureByteStride = 0, }; this._ConstantBuffer = new SharpDX.Direct3D11.Buffer(d3dDevice, cBufferDesc); //---------------- #endregion #region " テクスチャとシェーダーリソースビューを生成する。" //---------------- if (this._画像ファイルパス?.数なしパス.Nullでも空でもない() ?? false) { // (A) 画像ファイルから生成する場合。 if (false == System.IO.File.Exists(this._画像ファイルパス.数なしパス)) { Log.ERROR($"画像ファイルが存在しません。[{this._画像ファイルパス.変数付きパス}]"); return; } var 戻り値 = FDKUtilities.CreateShaderResourceViewFromFile( d3dDevice, this._bindFlags, this._画像ファイルパス); this._ShaderResourceView = 戻り値.srv; this.サイズ = 戻り値.viewSize; this.Texture = 戻り値.texture; } else if ((0f < this.ユーザ指定サイズ.Width) && (0f < this.ユーザ指定サイズ.Height)) { // (B) サイズを指定して空のテクスチャを生成する場合。 var 戻り値 = FDKUtilities.CreateShaderResourceView( d3dDevice, this._bindFlags, new Size2((int)this.ユーザ指定サイズ.Width, (int)this.ユーザ指定サイズ.Height)); this._ShaderResourceView = 戻り値.srv; this.Texture = 戻り値.texture; this.サイズ = this.ユーザ指定サイズ; } else { throw new InvalidOperationException(); } //---------------- #endregion }