/// <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); }
/// <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)); }