Beispiel #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);
        }