예제 #1
0
        /// <summary>
        /// レンダーターゲット&深度ステンシルテクスチャーを取得または作成
        /// </summary>
        /// <param name="name">テクスチャー名。</param>
        /// <param name="w">幅</param>
        /// <param name="h">高さ</param>
        /// <returns>失敗した場合はnullを返す。同じ名前かつレンダーターゲット属性が有り、同じ幅、高さの場合は、取得します。</returns>
        protected MCBaseTexture GetCreateRenderTargetTexture2D(string name, int w, int h)
        {
            //=====================================
            // テクスチャー作成
            MCBaseTexture spBTx;

            if (!App.ImageMgr.GetTexture(name, out spBTx))
            {
                Texture2DDescription desc;

                MCBaseTexture.SimpleD2DescInit(w, h, out desc);
                desc.BindFlags |= BindFlags.DepthStencil | BindFlags.RenderTarget | BindFlags.ShaderResource;

                desc.Format = App.BackBuffer.Description.Format;
                spBTx       = MCTexture.CreateTexture2D(App, name, desc);
                if (spBTx == null)
                {
                    throw new Exception(name + " 作成失敗");
                }
            }
            else
            {
                if (spBTx.GetID() != MCTexture.TextureID || !spBTx.IsRenderTarget ||
                    !spBTx.Is2DTexture || spBTx.GetWidth() != w || spBTx.GetHeight() != h)
                {
                    return(null);
                }
            }

            // テクスチャーの深度&レンダーターゲットをクリアする
            spBTx.ClearRenderTargetView();
            spBTx.ClearDepthStencilView();

            return(spBTx);
        }
        /// <summary>
        /// 対象イメージの読み込み
        /// </summary>
        /// <param name="filePath"></param>
        public void ReadImage(string filePath)
        {
            if (m_imageSprite != null)
            {
                m_drawSprites.DeleteDrawSprite(m_imageDrawSprite);
            }
            if (m_imageDrawSprite != null)
            {
                m_drawSprites.DeleteSprite(m_imageSprite);
            }
            m_imageTx         = null;
            m_imageSprite     = null;
            m_imageDrawSprite = null;

            m_filePath = filePath;
            // 対象 ファイルの読み込み
            m_imageSprite     = (MCSprite)m_drawSprites.CreateSpriteFromTextureName(filePath, 0, 0);
            m_imageDrawSprite = m_drawSprites.CreateDrawSprite(m_imageSprite);

            m_imageDrawSprite.Technique = (int)EffectID.Default;
            m_imageDrawSprite.Effect    = (int)DCRL.DEFAULT;
            m_imageDrawSprite.D2No      = 1;

            m_imageTx = (MCTexture)m_imageSprite.Texture00;
        }
예제 #3
0
        public MCBaseSprite CreateSpriteFromTextureName(string name, float anchorX = float.MinValue, float anchorY = float.MinValue)
        {
            string spriteName;
            //---------------------------------------------
            //! テクスチャースの読み込み
            //---------------------------------------------
            MCBaseTexture baseTx;

            if (!App.ImageMgr.GetTexture(name, out baseTx))
            {
                baseTx = MCTexture.CreateTextureFromFile(
                    App,
                    name,
                    name
                    );
                if (baseTx == null)
                {
                    throw new Exception("スプライト作成で、テキストテクスチャ[" + name + "]からテクスチャ作成失敗しました。");
                }
            }
            int w = baseTx.GetDesc().D2.Width;
            int h = baseTx.GetDesc().D2.Height;

            spriteName = CreateName(name, 0, 0, w, h, anchorX, anchorY);

            MCTexture tx = (MCTexture)baseTx;
            //---------------------------------------------
            //! スプライト登録
            //---------------------------------------------
            MCBaseSprite spriteData;

            if (!App.SpriteMgr.GetSpriteData(spriteName, out spriteData))
            {
                MCSprite sp;
                MCRect   rc = new MCRect();

                bool ret;
                rc.SetXYWH(0, 0, w, h);

                if (anchorX == float.MinValue && anchorY == float.MinValue)
                {
                    sp = MCSprite.CreateSprite(App, spriteName, baseTx, rc, MC_SPRITE_ANCHOR.CENTER);
                }
                else
                {
                    sp = MCSprite.CreateSprite(App, spriteName, baseTx, rc, MC_SPRITE_ANCHOR.CUSTOM, anchorX, anchorY);
                }

                if (sp == null)
                {
                    throw new Exception("スプライト作成失敗[" + spriteName + "]既に登録されている名前か、それ以外です。");
                }
                spriteData = sp;
            }

            m_spriteMgr.Add(spriteData, true);
            return(spriteData);
        }
        public MCBaseSprite CreateAlphanumericSprite(string name, int w, int h, MC_ANC useFlgsANC)
        {
            string spriteName;

            //---------------------------------------------
            //! テクスチャースの読み込み
            //---------------------------------------------
            MCBaseTexture txISP;
            string        str = "";

            if (!App.ImageMgr.GetTexture(name, out txISP))
            {
                txISP = MCTexture.CreateTextureFromFile(
                    App,
                    name,
                    name
                    );

                if (txISP == null)
                {
                    str = "スプライト作成で、テキストテクスチャ[" + name + "]からテクスチャ作成失敗しました。";
                    throw new Exception(str);
                }
            }

            MCTexture txSP = (MCTexture)txISP;

            str = "Alphanumericプライト作成で、2Dテクスチャでないテクスチャーを取得した。";
            Trace.WriteLine(str);
            return(null);

            //
            {
                str        = name + "_" + w + "_" + h + "_" + useFlgsANC;
                spriteName = str;
            }

            //---------------------------------------------
            //! スプライト登録
            //---------------------------------------------
            MCBaseSprite spriteData;

            if (!App.SpriteMgr.GetSpriteData(spriteName, out spriteData))
            {
                MCAlphanumericSprite sp;

                if ((sp = MCAlphanumericSprite.CreateSprite(App, spriteName, txISP, w, h, useFlgsANC)) == null)
                {
                    throw new Exception("固定英数字プライト作成失敗[" + spriteName + "]。");
                }

                spriteData = sp;
            }

            m_spriteMgr.Add(spriteData, true);
            return(spriteData);
        }
 /// <summary>
 /// 解放処理
 /// </summary>
 protected override void OnDestroyDevice()
 {
     m_imageTx         = null;
     m_backSprite      = null;
     m_backDrawSprite  = null;
     m_imageSprite     = null;
     m_imageDrawSprite = null;
     m_defCamera       = null;
     m_drawSprites.RegisterSpriteClear();
 }
        public MCBaseSprite CreatePrintScreenSprite(int x, int y, int w, int h, float anchorX = float.MinValue, float anchorY = float.MinValue)
        {
            //---------------------------------------------
            //! テクスチャースの読み込み
            //---------------------------------------------
            MCBaseTexture txISP;
            string        str;

            if (!App.ImageMgr.GetTexture("PrintScreen", out txISP))
            {
                str = "PrintScreenプライト取得に失敗しました。";
                throw new Exception(str);
            }

            string spriteName = CreateName("PrintScreen", x, y, w, h, anchorX, anchorY);


            MCTexture txSP = (MCTexture)txISP;
            //---------------------------------------------
            //! スプライト登録
            //---------------------------------------------
            MCBaseSprite spriteData;

            if (!App.SpriteMgr.GetSpriteData(spriteName, out spriteData))
            {
                MCRect   rc = new MCRect();
                MCSprite sp;
                rc.SetXYWH(x, y, w, h);

                if (anchorX == float.MinValue && anchorY == float.MinValue)
                {
                    sp = MCSprite.CreateSprite(App, spriteName, txISP, rc, MC_SPRITE_ANCHOR.CENTER);
                }
                else
                {
                    sp = MCSprite.CreateSprite(App, spriteName, txISP, rc, MC_SPRITE_ANCHOR.CUSTOM, anchorX, anchorY);
                }


                if (sp == null)
                {
                    throw new Exception("スプライト作成失敗[" + spriteName + "]既に登録されている名前か、それ以外です。");
                }

                spriteData = sp;
            }
            else
            {
                throw new Exception("PrintScreenスプライト[" + spriteName + "]は既に存在します。");
            }

            m_spriteMgr.Add(spriteData, true);
            return(spriteData);
        }
예제 #7
0
        /// <summary>
        /// デバイス作成時の処理
        /// </summary>
        /// <returns></returns>
        internal int OnCreateDevice(SharpDX.Direct3D11.Device device)
        {
            MCBaseTexture tmpTx;

            //---- イメージの読み込み
            if (!App.ImageMgr.GetTexture("AsciiStringDraw", out tmpTx))
            {
                m_asciiTx = (MCTexture)MCTexture.CreateTextureFromFile(
                    App,
                    "AsciiStringDraw",
                    "UtilSharpDX.Resources.ascii.png"
                    );
                if (m_asciiTx == null)
                {
                    throw new Exception();
                }
            }
            else
            {
                throw new Exception();
            }
            //----
            MCBaseSprite tmpSprite;

            if (!App.SpriteMgr.GetSpriteData("AsciiStringDraw", out tmpSprite))
            {
                m_asciiSprite = MCAlphanumericSprite.CreateSprite(
                    App,
                    "AsciiStringDraw",
                    m_asciiTx,
                    12, 12,
                    MC_ANC.STR_ALL
                    );
                if (m_asciiSprite == null)
                {
                    throw new Exception();
                }
            }
            else
            {
                throw new Exception();
            }
            return(0);
        }
예제 #8
0
 /// <summary>
 /// 解放処理
 /// </summary>
 internal void OnDestroyDevice()
 {
     m_asciiTx     = null;
     m_asciiSprite = null;
     m_Texts.Clear();
 }