/// <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();
 }
        /// <summary>
        /// スワップチェーンが変更された時に呼び出される
        /// </summary>
        /// <param name="device"></param>
        /// <param name="swapChain"></param>
        /// <param name="desc">変更後のスワップチェーン情報</param>
        public override void OnSwapChainResized(SharpDX.Direct3D11.Device device, SwapChain swapChain, SwapChainDescription desc)
        {
            if (!m_isCreated)
            {
                return;
            }
            int mx = (int)(System.Math.Max(desc.ModeDescription.Width, desc.ModeDescription.Height));
            int r  = 2;

            while ((r *= 2) < mx)
            {
                ;
            }
            if (r != m_mainTxLenght)
            {
                m_mainTxLenght = r;

                //=====================================
                // テクスチャー作成
                if (m_hPrintSTx == null)
                {
                    MCPrintScreenTexture.Create(App, "PrintScreen", m_mainTxLenght, m_mainTxLenght, out m_hPrintSTx);
                    if (m_hPrintSTx is null)
                    {
                        throw new Exception("DEDefaultSprite  PrintScreen 作成失敗");
                    }
                }
                else
                {
                    m_hPrintSTx.ReSize2D(m_mainTxLenght, m_mainTxLenght);
                }

                //=====================================
                // カメラの作成
                if (m_hTxCamera == null)
                {
                    if (m_isConstCoordinate)
                    {
                        CreateViewTextureCamera("FixedCameraSprite");
                    }
                    else
                    {
                        SetCurrentBaseCamera(App.CameraMgr.Get4VCameraNo(0));
                    }
                }
                else
                {
                    MCTextureCamera hTmp = (MCTextureCamera)m_hTxCamera;
                    hTmp.SetTextureSize(m_mainTxLenght, m_mainTxLenght);
                }
            }

            // ビューポートの設定
            GetCurrentViewPort(out m_aVP);
        }
        /// <summary>
        /// デバイスの作成
        /// </summary>
        protected override void OnCrateDevice()
        {
            m_drawSprites = new SimpleDrawSpriteRegister(App);

            // 背景スプライトの作成
            m_backSprite     = (MCSprite)m_drawSprites.CreateSpriteFromTextureName("UtilSharpDX.Resources.256x256_bg.bmp", 0, 0);
            m_backDrawSprite = m_drawSprites.CreateDrawSprite(m_backSprite);

            m_backDrawSprite.Technique = (int)EffectID.Default;
            m_backDrawSprite.Effect    = (int)DCRL.DEFAULT;

            m_backSprite.spl.EndU *= 128;
            m_backSprite.spl.EndV *= 128;
            m_backSprite.Width    *= 128;
            m_backSprite.Height   *= 128;

            m_defCamera = (MCTextureCamera)App.CameraMgr.Get4VCameraNo(0);
        }
        /// <summary>
        /// ビューポートサイズのテクスチャーカメラを作成する
        /// </summary>
        /// <param name="name">カメラ名</param>
        /// <returns>通常、エラーが発生しなかった場合は MC_S_OK を返す。</returns>
        protected int CreateViewTextureCamera(string name)
        {
            int hr = 0;

            if (App.CameraMgr.GetCamera(name, out m_hTxCamera))
            {
                // 名前をつけて”カメラタイプ1”を作成しハンドルを取得する。
                var v = App.SwapChainDesc.ModeDescription;
                if (!MCTextureCamera.Create(App, name, v.Width, v.Height, out m_hTxCamera))
                {
                    return(-1);
                }
                MCTextureCamera hTmp = (MCTextureCamera)m_hTxCamera;
                if (hTmp is null)
                {
                    return(-1);
                }

                hTmp.SetCameraPosition(new MCVector2((v.Width * 0.5f), -(v.Height * 0.5f)));
            }
            SetCurrentBaseCamera(m_hTxCamera);
            return(hr);
        }
        /// <summary>
        /// 指定した幅高さで、テクスチャーカメラを作成する
        /// </summary>
        /// <param name="name">カメラ名</param>
        /// <param name="w">幅、省略時1024</param>
        /// <param name="h">高さ、省略時1024</param>
        /// <returns>通常、エラーが発生しなかった場合は 0 を返す。</returns>
        protected int CreateTextureCamera(string name, int w = 1024, int h = 1024)
        {
            int hr = 0;

            if (!App.CameraMgr.GetCamera(name, out m_hTxCamera))
            {
                // 名前をつけて”カメラタイプ1”を作成しハンドルを取得する。
                if (!MCTextureCamera.Create(App, name, w, h, out m_hTxCamera))
                {
                    return(-1);
                }
                MCTextureCamera hTmp = (MCTextureCamera)m_hTxCamera;
                if (hTmp is null)
                {
                    return(-1);
                }

                var v = App.SwapChainDesc.ModeDescription;
                hTmp.SetCameraPosition(new MCVector2(v.Width / 2, -v.Height / 2));
            }
            SetCurrentBaseCamera(m_hTxCamera);
            return(hr);
        }
Beispiel #6
0
        /// <summary>
        /// ビューポートサイズのテクスチャーカメラを作成する
        /// </summary>
        /// <param name="name">カメラ名</param>
        /// <returns>通常、エラーが発生しなかった場合は MC_S_OK を返す。</returns>
        protected int CreateViewTextureCamera(string name)
        {
            int          hr = 0;
            MCBaseCamera tmpCamera;

            if (App.CameraMgr.GetCamera(name, out tmpCamera))
            {
                // 名前をつけて”カメラタイプ1”を作成しハンドルを取得する。
                var v = App.SwapChainDesc.ModeDescription;
                if (!MCTextureCamera.Create(App, name, v.Width, v.Height, out tmpCamera))
                {
                    return(-1);
                }
                m_cameraTx = (MCTextureCamera)tmpCamera;
                if (m_cameraTx is null)
                {
                    return(-1);
                }

                m_cameraTx.SetTextureCameraPosition(new MCVector2(0, 0));
            }
            SetCurrentBaseCamera(m_cameraTx);
            return(hr);
        }
Beispiel #7
0
        /// <summary>
        /// スワップチェーンが変更された時に呼び出される
        /// </summary>
        /// <param name="device"></param>
        /// <param name="swapChain"></param>
        /// <param name="desc">変更後のスワップチェーン情報</param>
        public override void OnSwapChainResized(SharpDX.Direct3D11.Device device, SwapChain swapChain, SwapChainDescription desc)
        {
            if (!m_isCreated)
            {
                return;
            }
            int mx = (int)(System.Math.Max(desc.ModeDescription.Width, desc.ModeDescription.Height));
            int r  = 2;

            while ((r *= 2) < mx)
            {
                ;
            }
            if (r != m_mainTxLenght)
            {
                m_mainTxLenght = r;

                //=====================================
                // テクスチャー作成
                if (m_hMainRT == null)
                {
                    App.ImageMgr.GetTexture("2D_main_screen", out m_hMainRT);
                }
                if (m_hTx == null)
                {
                    m_hTx = GetCreateRenderTargetTexture2D("2D_Technique", m_mainTxLenght, m_mainTxLenght);
                }
                else
                {
                    m_hTx.ReSize2D(m_mainTxLenght, m_mainTxLenght);
                }
                if (m_hPrintSTx == null)
                {
                    App.ImageMgr.GetTexture("PrintScreen", out m_hPrintSTx);
                }

                //=====================================
                // 通常スプライト作成
                if (m_drawSprite == null)
                {
                    MCRect rc = new MCRect();
                    rc.SetXYWH(0, 0, m_mainTxLenght, m_mainTxLenght);
                    m_sprite     = (MCSprite)m_spriteRegister.CreateSpriteFromTextureName("2D_Technique", rc.X, rc.Y, rc.Width, rc.Heith);
                    m_drawSprite = m_spriteRegister.CreateDrawSprite(m_sprite);
                    //=====================================
                    // マップチップ用のスプライト作成
                    m_drawSprite.D2RenderType = (int)SPRITE_TYPE.DEFAULT;
                    m_drawSprite.Position     = new MCVector3(
                        (float)System.Math.Ceiling(m_mainTxLenght * 0.5f),
                        (float)System.Math.Ceiling(m_mainTxLenght * 0.5f), 0
                        );
                }
                else
                {
                    MCRect rc = new MCRect();
                    rc.SetXYWH(0, 0, m_mainTxLenght, m_mainTxLenght);
                    m_sprite.ResetRect(rc);

                    m_drawSprite.Position = new MCVector3(
                        (float)System.Math.Ceiling(m_mainTxLenght * 0.5f),
                        (float)System.Math.Ceiling(m_mainTxLenght * 0.5f), 0
                        );
                }


                //=====================================
                // カメラの作成
                if (m_isConstCoordinate)
                {
                    if (m_hTxCamera == null)
                    {
                        CreateViewTextureCamera("FixedCameraSpriteD2Screen");
                    }
                }
                else
                {
                    if (m_hTxCamera == null)
                    {
                        CreateViewTextureCamera("MCTexture");
                    }
                }
                if (m_hTxCamera != null)
                {
                    MCTextureCamera hTmp = (MCTextureCamera)m_hTxCamera;
                    hTmp.SetTextureSize(m_mainTxLenght, m_mainTxLenght);
                }

                // ビューポートの設定
                m_aVP = new RawViewportF[] { new RawViewportF()
                                             {
                                                 X        = 0,
                                                 Y        = 0,
                                                 Width    = m_mainTxLenght,
                                                 Height   = m_mainTxLenght,
                                                 MinDepth = 0,
                                                 MaxDepth = 1.0f,
                                             } };
            }
        }
Beispiel #8
0
        /// <summary>
        /// スワップチェーンが変更された時に呼び出される
        /// </summary>
        /// <param name="device"></param>
        /// <param name="swapChain"></param>
        /// <param name="desc">変更後のスワップチェーン情報</param>
        public override void OnSwapChainResized(SharpDX.Direct3D11.Device device, SwapChain swapChain, SwapChainDescription desc)
        {
            if (!m_isCreated)
            {
                return;
            }
            int mx = (int)(System.Math.Max(desc.ModeDescription.Width, desc.ModeDescription.Height));
            int r  = 2;

            while ((r *= 2) < mx)
            {
                ;
            }

            if (r != m_mainTxLenght)
            {
                m_mainTxLenght = r;
                //=====================================
                // テクスチャー作成
                if (m_mainScreenTx == null)
                {
                    m_mainScreenTx = GetCreateRenderTargetTexture2D("2D_main_screen", m_mainTxLenght, m_mainTxLenght);
                }
                else
                {
                    m_mainScreenTx.ReSize2D(m_mainTxLenght, m_mainTxLenght);
                }

                //---------------------------------------
                // メインスクリーン用常駐描画スプライト作成
                //---------------------------------------
                if (m_backSprite == null)
                {
                    m_backSprite = (MCSprite)m_spriteRegister.CreateSpriteFromTextureName("2D_main_screen", 0, 0, m_mainTxLenght, m_mainTxLenght, 0, 0);
                }
                else
                {
                    MCRect rc = new MCRect();
                    rc.SetXYWH(0, 0, m_mainTxLenght, m_mainTxLenght);
                    m_backSprite.ResetRect(rc);
                }

                RawViewportF[] v;
                GetCurrentViewPort(out v);
                if (m_backDrawSprite == null)
                {
                    m_backDrawSprite          = m_spriteRegister.CreateDrawSprite(m_backSprite);
                    m_backDrawSprite.Effect   = (int)DCRL.DEF_SPRITE;
                    m_backDrawSprite.Position = new MCVector3(
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Width) * -0.5f),
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Height) * 0.5f), 0
                        );
                }
                else
                {
                    m_backDrawSprite.Position = new MCVector3(
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Width) * -0.5f),
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Height) * 0.5f), 0
                        );
                }


                //=====================================
                // カメラの作成
                if (m_hTxCamera == null)
                {
                    CreateTextureCamera("MCTexture", m_mainTxLenght, m_mainTxLenght);
                }
                else
                {
                    MCTextureCamera hTmp = (MCTextureCamera)m_hTxCamera;
                    hTmp.SetTextureSize(m_mainTxLenght, m_mainTxLenght);
                }
            }
        }
Beispiel #9
0
        /// <summary>
        /// スワップチェーンが変更された時に呼び出される
        /// </summary>
        /// <param name="device"></param>
        /// <param name="swapChain"></param>
        /// <param name="desc">変更後のスワップチェーン情報</param>
        public override void OnSwapChainResized(SharpDX.Direct3D11.Device device, SwapChain swapChain, SwapChainDescription desc)
        {
            if (!m_isCreated)
            {
                return;
            }
            int mx = (int)(System.Math.Max(desc.ModeDescription.Width, desc.ModeDescription.Height));
            int r  = 2;

            while ((r *= 2) < mx)
            {
                ;
            }
            if (r != m_mainTxLenght)
            {
                m_mainTxLenght = r;

                //=====================================
                // テクスチャー作成
                if (m_hTx == null)
                {
                    MCPrintScreenTexture.Create(App, "2d_mapchip", m_mainTxLenght, m_mainTxLenght, out m_hTx);
                }
                else
                {
                    m_hTx.ReSize2D(m_mainTxLenght, m_mainTxLenght);
                }
                RawViewportF[] v;
                GetCurrentViewPort(out v);
                if (m_drawSprite == null)
                {
                    m_sprite              = (MCSprite)m_spriteRegister.CreateSpriteFromTextureName("mapchip", 0, 0, m_mainTxLenght, m_mainTxLenght, 0, 0);
                    m_drawSprite          = m_spriteRegister.CreateDrawSprite(m_sprite);
                    m_drawSprite.Effect   = (int)DCRL.DEF_SPRITE;
                    m_drawSprite.Position = new MCVector3(
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Width) * -0.5f),
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Height) * 0.5f), 0
                        );
                }
                else
                {
                    MCRect rc = new MCRect();
                    rc.SetXYWH(0, 0, m_mainTxLenght, m_mainTxLenght);
                    m_sprite.ResetRect(rc);

                    m_drawSprite.Position = new MCVector3(
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Width) * -0.5f),
                        (float)System.Math.Ceiling((m_mainTxLenght - v[0].Height) * 0.5f), 0
                        );
                }

                //=====================================
                // カメラの作成
                if (m_hTxCamera == null)
                {
                    CreateViewTextureCamera("MpachipCamera");
                }
                else
                {
                    MCTextureCamera hTmp = (MCTextureCamera)m_hTxCamera;
                    hTmp.SetTextureSize(m_mainTxLenght, m_mainTxLenght);
                }
            }

            // ビューポートの設定
            GetCurrentViewPort(out m_aVP);
        }