Exemple #1
0
        /// <summary>
        /// Fills the vertexUnit with the quad data.
        /// </summary>
        /// <param name="vertexUnit">The vertexUnit to fill with the quad data.</param>
        /// <param name="index">The start index in the index buffer.</param>
        public virtual void FillVertexUnit(Purple.Graphics.VertexUnit vertexUnit, int index)
        {
            if (dirty)
            {
                Vector2 right = QuadManager.Instance.RotateUnit(new Vector2(size.X * this.scale.X, 0), this.rotationZ);
                Vector2 down  = QuadManager.Instance.RotateUnit(new Vector2(0, size.Y * this.scale.Y), this.rotationZ);

                Vector2 a = this.position;
                Vector2 b = this.position + right;
                Vector2 c = this.position + down;
                Vector2 d = this.position + down + right;

                RectangleF texCoords = new RectangleF(
                    texture.TextureCoordinates.Left + texture.TextureCoordinates.Width * textureRectangle.Left,
                    texture.TextureCoordinates.Top + texture.TextureCoordinates.Height * textureRectangle.Top,
                    texture.TextureCoordinates.Width * textureRectangle.Width,
                    texture.TextureCoordinates.Height * textureRectangle.Height);

                QuadUtil.FillPosition(positionCache, a, b, c, d);
                QuadUtil.FillColor(colorCache, Color.From((int)(alpha * 255 + 0.5f), 0xff, 0xff, 0xff));
                QuadUtil.FillTexture(textureCache, texCoords);
                dirty = false;
            }

            positionCache.CopyTo(vertexUnit[typeof(PositionStream2)].Data, index);
            colorCache.CopyTo(vertexUnit[typeof(ColorStream)].Data, index);
            textureCache.CopyTo(vertexUnit[typeof(TextureStream)].Data, index);
        }
Exemple #2
0
        /// <summary>
        /// Fills the vertexUnit with the quad data.
        /// </summary>
        /// <param name="vertexUnit">The vertexUnit to fill with the quad data.</param>
        /// <param name="index">The start index in the index buffer.</param>
        public override void FillVertexUnit(Purple.Graphics.VertexUnit vertexUnit, int index)
        {
            Vector2 a     = this.Position;
            Vector2 right = QuadManager.Instance.RotateUnit(new Vector2(Size.X * this.Scale.X, 0), this.RotationZ);
            Vector2 down  = QuadManager.Instance.RotateUnit(new Vector2(0, Size.Y * this.Scale.Y), this.RotationZ);

            if (dirty)
            {
                PositionStream2 ps = PositionStream2.From(QuadFactory.VertexUnit);
                ColorStream     cs = ColorStream.From(QuadFactory.VertexUnit);
                TextureStream   ts = TextureStream.From(QuadFactory.VertexUnit);
                RectangleF      tc = Texture.TextureCoordinates;

                for (int y = 0; y < vertices.GetLength(1); y++)
                {
                    for (int x = 0; x < vertices.GetLength(0); x++)
                    {
                        MeshVertex vertex = vertices[x, y];
                        Vector2    pos    = a + right * vertex.Position.X + down * vertex.Position.Y;
                        ps[index] = new Vector2((pos.X - 0.5f) * 2, -(pos.Y - 0.5f) * 2);
                        cs[index] = Color.SetAlpha(vertex.Color, (int)(Color.GetAlpha(vertex.Color) * Alpha));
                        Vector2 texture = new Vector2(
                            tc.Left + tc.Width * (TextureRectangle.Left + TextureRectangle.Width * vertex.Texture.X),
                            tc.Top + tc.Height * (TextureRectangle.Top + TextureRectangle.Height * vertex.Texture.Y));
                        ts[index] = texture;
                        index++;
                    }
                }
                dirty = false;
            }
            positionCache.CopyTo(vertexUnit[typeof(PositionStream2)].Data, index);
            colorCache.CopyTo(vertexUnit[typeof(ColorStream)].Data, index);
            textureCache.CopyTo(vertexUnit[typeof(TextureStream)].Data, index);
        }