/// <summary> /// スプライトを描画する /// </summary> /// <param name="immediateContext">DeviceContextポインタ。</param> /// <param name="pass">EffectPassポインタ。</param> /// <param name="drawSprite">基本描画スプライト</param> /// <return>通常、エラーが発生しなかった場合は MC_S_OK を返す。</return> public int Render(DeviceContext immediateContext, EffectPass pass, MCDrawSpriteBase drawSprite) { int[] strides = new int[] { System.Runtime.InteropServices.Marshal.SizeOf(new MC_VERTEX_PCTx()) }; int[] offsets = new int[] { 0 }; SharpDX.Direct3D11.Buffer[] vertexBuffers = new SharpDX.Direct3D11.Buffer[] { m_vertexBuffer }; immediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; immediateContext.InputAssembler.SetVertexBuffers(0, vertexBuffers, strides, offsets); immediateContext.InputAssembler.SetIndexBuffer(m_indexBuffer, SharpDX.DXGI.Format.R16_UInt, 0); immediateContext.DrawIndexed(m_drawTriangleNum * 3, 0, 0); return(0); }
/// <summary> /// 値を複製セットする /// </summary> /// <param name="r"></param> public void Set(MCDrawSpriteBase r) { IsBillbord = r.IsBillbord; IsBillbordConstX = r.IsBillbordConstX; IsBillbordConstY = r.IsBillbordConstY; BlendState = r.BlendState; Flip = r.Flip; m_anchor = r.m_anchor; m_angle = r.m_angle; m_scale = r.m_scale; m_position = r.m_position; m_BVSphere = r.m_BVSphere; m_visible = r.m_visible; }
/// <summary> /// スプライトを描画する /// </summary> /// <param name="immediateContext">DeviceContextポインタ。</param> /// <param name="pass">EffectPassポインタ。</param> /// <param name="drawSprite">基本描画スプライト</param> /// <return>通常、エラーが発生しなかった場合は MC_S_OK を返す。</return> public int Render(DeviceContext immediateContext, EffectPass pass, MCDrawSpriteBase drawSprite) { #if DEBUG if (drawSprite.GetID() != MCDrawSquareTilesSprite.DrawSpriteID) { Debug.Assert(false); throw new Exception("描画スプライトが MCDrawSquareTilesSprite でない。"); } #endif var ds = (MCDrawSquareTilesSprite)drawSprite; #if DEBUG if (m_vertexBuffers.ContainsKey(ds.TileLength)) { Debug.Assert(false); throw new Exception("存在しない長さ。"); } #endif var v = m_vertexBuffers[ds.TileLength]; int[] strides = new int[] { System.Runtime.InteropServices.Marshal.SizeOf(new MC_VERTEX_P()), System.Runtime.InteropServices.Marshal.SizeOf(new MC_VERTEX_Tx()), }; int[] offsets = new int[] { 0, 1 }; SharpDX.Direct3D11.Buffer[] vertexBuffers = new SharpDX.Direct3D11.Buffer[] { v.vertexBuffer, v.uvBuffer }; immediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; immediateContext.InputAssembler.SetIndexBuffer(v.indexBuffer, SharpDX.DXGI.Format.R16_UInt, 0); immediateContext.InputAssembler.SetVertexBuffers(0, vertexBuffers, strides, offsets); immediateContext.DrawIndexed(v.allTriangle * 3, 0, 0); return(0); }