public void TransformAttributePerParticle <T, U>(AttributeAccessor accessorFrom, AttributeAccessor accessorTo, IAttributeTransformer <T, U> transformMethod, ref U transformer) where T : struct where U : struct { for (var i = 0; i < vertexBuilder.VerticesPerParticle; i++) { var temp = Utilities.Read <T>(VertexBuffer + accessorFrom.Offset + i * VertexStride); transformMethod.Transform(ref temp, ref transformer); Utilities.Write(VertexBuffer + accessorTo.Offset + i * VertexStride, ref temp); } }
/// <summary> /// Transforms attribute data using already written data from another attribute /// </summary> /// <typeparam name="T">Type data</typeparam> /// <param name="accessorTo">Vertex attribute accessor to the destination attribute</param> /// <param name="accessorFrom">Vertex attribute accessor to the source attribute</param> /// <param name="transformMethod">Transform method for the type data</param> public void TransformAttributePerSegment <T>(AttributeAccessor accessorFrom, AttributeAccessor accessorTo, IAttributeTransformer <T> transformMethod) where T : struct { for (var i = 0; i < VerticesPerSegCurrent; i++) { var temp = Utilities.Read <T>(vertexBuffer + accessorFrom.Offset + i * VertexDeclaration.VertexStride); transformMethod.Transform(ref temp); Utilities.Write(vertexBuffer + accessorTo.Offset + i * VertexDeclaration.VertexStride, ref temp); } }