public void Update() { var oceanJob = new OceanJob() { vertices = m_Vertices, time = Time.time * m_TimeMult, scale = m_Scale, perlinStrength = m_PerlinStrength, rippleStrength = m_RippleStrength, }; if (multiThreaded) { m_JobHandle = oceanJob.Schedule(m_Vertices.Length, 64); //jobs wont be scheduled unless explicitly invoked or something starts waiting for them JobHandle.ScheduleBatchedJobs(); } else { Profiler.BeginSample("RUN"); oceanJob.Run(m_Vertices.Length); Profiler.EndSample(); } }
//1. COMPUTE OVER FRAME //2. NORMAL CALCULATIONS //3. SIMD STUFF ComputeTrisNormalsJob //4. https://forum.unity.com/threads/burst-simd-and-float3-float4-best-practices.527504/ public void Update() { //DO CALCULATION OVER THE FRAME LENGTH and RENDERING Profiler.BeginSample("__WAIT_FOR_JOB_COMPLETE__"); m_OceanJobHandle.Complete(); Swap <NativeArray <Vector3> >(m_Vertices); Profiler.EndSample(); Profiler.BeginSample("__SCHEDULE_JOBS_ASYNC__"); var oceanJob = new OceanJob() { verticesIn = m_Vertices[READ], verticesOut = m_Vertices[WRITE], time = Time.time * m_TimeMult, scale = m_Scale, perlinStrength = m_PerlinStrength, rippleStrength = m_RippleStrength, }; m_OceanJobHandle = oceanJob.Schedule(m_Mesh.vertexCount, 64); //limit number of threads to two //m_OceanJobHandle = oceanJob.Schedule(m_Mesh.vertexCount, m_Mesh.vertexCount / 2); //var recalculateNormalsJob = new RecalculateNormalsJob //{ // vertices = m_Vertices[READ], // normals = m_Normals, // indices = m_Indices //}; //m_NormalsJobHndl = recalculateNormalsJob.Schedule(); var triNormalsJob = new ComputeTrisNormalsJobSimd { vertices = m_Vertices[READ], triNormals = m_TriNormals, indices = m_Indices, }; m_NormalsJobHndl = triNormalsJob.Schedule(m_Indices.Length / 3, 64); var normalsJob = new ComputeNormalsJobSimd { verticesToTrianglesMapping = m_VerticesToTrianglesMapping, verticesToTrianglesMappingCount = m_VerticesToTrianglesMappingCount, triNormals = m_TriNormals, normals = m_Normals }; m_NormalsJobHndl = normalsJob.Schedule(m_Mesh.vertexCount, 64, m_NormalsJobHndl); //m_NormalsJobHndl.Complete(); //jobs wont be scheduled until below function is called or something starts waiting for them JobHandle.ScheduleBatchedJobs(); Profiler.EndSample(); }