示例#1
0
        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 ScissorStackPush(Rectangle rect)
        {
            StackTop().m_scissorStack.Push(rect);

            FlushInternalBatch();
            StackTop().m_internalBatch.ScissorRectangle = StackTop().m_scissorStack.Peek();
        }
        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);
 }
示例#7
0
 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);
 }