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