/// <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; }
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); }
/// <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); }
/// <summary> /// 解放処理 /// </summary> internal void OnDestroyDevice() { m_asciiTx = null; m_asciiSprite = null; m_Texts.Clear(); }