public void Render(CommandList cl) { if (areQuadsDirty) { float hw = data.width * curScale * 0.5f; float fX = data.width * curScale * 0.35350001f; // original magic values float fY = data.width * curScale * 0.353553f; var vertices = quadMeshBuffer[quadRange]; SetPlane(vertices, 0, 0f, hw); if (data.complexity != BeamStarComplexity.OnePlane) { SetPlane(vertices, 1, hw, 0f); } if (data.complexity == BeamStarComplexity.FourPlanes) { SetPlane(vertices, 2, fX, fY); SetPlane(vertices, 3, -fX, fY); } var rotation = Quaternion.CreateFromAxisAngle(Vector3.UnitZ, curRotation * MathF.PI / 180f); for (int i = 0; i < vertices.Length; i++) { vertices[i].pos = Vector3.Transform(vertices[i].pos, rotation); } } (material as IMaterial).Apply(cl); quadMeshBuffer.Render(cl, quadRange); }
public void Render(CommandList cl) { if (areQuadsDirty) { areQuadsDirty = false; var count = 0; foreach (var plane in planes.Where(p => p.life > 0f)) { UpdateQuad(in plane, quadRange.Start.Offset(count++)); } aliveRange = quadRange.Start..quadRange.Start.Offset(count); } (material as IMaterial).Apply(cl); quadMeshBuffer.Render(cl, aliveRange); }
public void Render(CommandList cl) { (material as IMaterial).Apply(cl); quadMeshBuffer.Render(cl, quadRange); }