/// <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); }
/// <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); }
/// <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, } }; } }
/// <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); } } }
/// <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); }