internal static void ScissorStackPush(Rectangle rect) { StackTop().m_scissorStack.Push(rect); FlushInternalBatch(); StackTop().m_internalBatch.ScissorRectangle = StackTop().m_scissorStack.Peek(); }
internal static void AddSingleSprite(string textureStr, Color color, Vector2 origin, Rectangle? sourceRect, RectangleF destinationRect) { Vector2 clipOffset; Vector2 clipScale; CalculateSpriteClipspace(destinationRect, MyRender.ViewportResolution, out clipOffset, out clipScale); var texture = MyTextureManager.GetTexture(textureStr); AddSingleSprite(texture, new MyVertexFormatSpritePositionTextureColor( new HalfVector4(clipOffset.X, clipOffset.Y, clipScale.X, clipScale.Y), new HalfVector4(0, 0, 1, 1), new Byte4(color.R, color.G, color.B, color.A))); }
internal static void AddSingleSprite(MyTexture2D texture, Vector2 position, Rectangle? sourceRectangle, float scale, Color color) { Vector2 clipOffset; Vector2 clipScale; RectangleF destination; if (sourceRectangle != null) { destination = new RectangleF(position.X, position.Y, scale * sourceRectangle.Value.Width, scale * sourceRectangle.Value.Height); } else { destination = new RectangleF(position.X, position.Y, scale, scale); } CalculateSpriteClipspace(destination, MyRender.ViewportResolution, out clipOffset, out clipScale); Vector2 texOffset = Vector2.Zero; Vector2 texScale = Vector2.One; if (sourceRectangle != null) { Vector2 textureSize = texture != null ? texture.Size : Vector2.Zero; Vector2 leftTop = new Vector2(sourceRectangle.Value.Left, sourceRectangle.Value.Top); Vector2 size = new Vector2(sourceRectangle.Value.Width, sourceRectangle.Value.Height); texOffset = leftTop / textureSize; texScale = size / textureSize; } AddSingleSprite(texture, new MyVertexFormatSpritePositionTextureColor( new HalfVector4(clipOffset.X, clipOffset.Y, clipScale.X, clipScale.Y), new HalfVector4(texOffset.X, texOffset.Y, texScale.X, texScale.Y), new Byte4(color.R, color.G, color.B, color.A))); }
internal static void AddSingleSprite(ShaderResourceView view, Vector2 textureSize, Color color, Vector2 origin, Vector2 tangent, Rectangle? sourceRect, RectangleF destinationRect) { if (StackTop().m_internalBatch.ScissorRectangle.HasValue) { RectangleF intersection; var scissor = StackTop().m_internalBatch.ScissorRectangle.Value; RectangleF.Intersect(ref scissor, ref destinationRect, out intersection); if (intersection.Size.X * intersection.Size.Y == 0) { return; } } Vector2 clipOffset; Vector2 targetResolution = StackTop().m_resolution ?? MyRender11.ResolutionF; clipOffset = destinationRect.Position / targetResolution * 2 - 1; clipOffset.Y = -clipOffset.Y; Vector2 texOffset = Vector2.Zero; Vector2 texScale = Vector2.One; Vector2 originOffset; if (sourceRect != null) { Vector2 leftTop = new Vector2(sourceRect.Value.Left, sourceRect.Value.Top); Vector2 size = new Vector2(sourceRect.Value.Width, sourceRect.Value.Height); texOffset = leftTop / textureSize; texScale = size / textureSize; originOffset = origin / new Vector2(sourceRect.Value.Width, sourceRect.Value.Height) - 0.5f; originOffset.Y *= -1; } else { originOffset = origin / textureSize - 0.5f; originOffset.Y *= -1; } AddSingleSprite(view, new MyVertexFormatSpritePositionTextureRotationColor( new HalfVector4(clipOffset.X, clipOffset.Y, destinationRect.Width, destinationRect.Height), new HalfVector4(texOffset.X, texOffset.Y, texScale.X, texScale.Y), new HalfVector4(originOffset.X, originOffset.Y, tangent.X, tangent.Y), new Byte4(color.R, color.G, color.B, color.A))); }
internal static void AddSingleSprite(TexId texId, Color color, Vector2 origin, Vector2 tangent, Rectangle? sourceRect, RectangleF destinationRect) { AddSingleSprite(MyTextures.Views[texId.Index], MyTextures.GetSize(texId), color, origin, tangent, sourceRect, destinationRect); }
internal static void AddSingleSprite(ISrvBindable tex, Color color, Vector2 origin, Vector2 tangent, Rectangle? sourceRect, RectangleF destinationRect) { AddSingleSprite(tex, tex.Size, color, origin, tangent, sourceRect, destinationRect); }