예제 #1
0
        /// <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;
        }
예제 #2
0
        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
        }