コード例 #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);
        }
コード例 #2
0
        /// <summary>
        /// fills a positionStream with a quad given by position and size
        /// </summary>
        /// <param name="positionCache">The cache to fill with the data.</param>
        /// <param name="quad">quad to use</param>
        public static void FillPosition(Vector2[] positionCache, Quad quad)
        {
            float pX = quad.Position.X;
            float pY = quad.Position.Y;

            float width  = quad.Texture.ImageDescription.Width / QuadManager.Instance.TargetSize.X;
            float height = quad.Texture.ImageDescription.Height / QuadManager.Instance.TargetSize.Y;

            QuadUtil.FillPosition(positionCache, new Vector2(pX, pY), new Vector2(pX + width, pY),
                                  new Vector2(pX + width, pY + height), new Vector2(pX, pY + height));
        }