public static void TryDrawingChunk(Vector3 chunkPos) { AssignedWorkContainer awc = GetWorkContainer(chunkPos); //Check if the chunk is already drawn or if it requires redrawing. if (!awc.ContainsWork(JobType.Draw)) { ThreadedPendingDrawingWork tpdw = new ThreadedPendingDrawingWork(chunkPos); awc.AddAssignedJob(JobType.Draw, new AssignedJob(chunkPos, JobType.Draw, tpdw)); ThreadHandler.EnqueuWork(tpdw); } }
void TestEverything() { for (int x = -1; x < 2; x++) { for (int y = -1; y < 2; y++) { for (int z = -1; z < 2; z++) { TestChunkGeneration(new Vector3(x, y, z)); } } } Chunk c; ChunkHandler.TryGetChunk(0, 0, 0, out c); System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); ThreadedPendingDrawingWork tpdw = new ThreadedPendingDrawingWork(new Vector3(0, 0, 0)); watch.Start(); tpdw.Work(); watch.Stop(); Debug.Log("Completed chunk Drawing check in " + ((double)watch.Elapsed.Ticks / (double)System.TimeSpan.TicksPerMillisecond).ToString() + "ms"); MeshData md; watch.Reset(); watch.Start(); new ThreadedSubChunkDrawingWork(c.GetSubChunk(0, 0, 0), c.ChunkPos).Work(); new ThreadedSubChunkDrawingWork(c.GetSubChunk(0, 0, 1), c.ChunkPos).Work(); new ThreadedSubChunkDrawingWork(c.GetSubChunk(0, 1, 0), c.ChunkPos).Work(); new ThreadedSubChunkDrawingWork(c.GetSubChunk(1, 0, 0), c.ChunkPos).Work(); new ThreadedSubChunkDrawingWork(c.GetSubChunk(1, 1, 0), c.ChunkPos).Work(); new ThreadedSubChunkDrawingWork(c.GetSubChunk(0, 1, 1), c.ChunkPos).Work(); new ThreadedSubChunkDrawingWork(c.GetSubChunk(1, 0, 1), c.ChunkPos).Work(); new ThreadedSubChunkDrawingWork(c.GetSubChunk(1, 1, 1), c.ChunkPos).Work(); watch.Stop(); Debug.Log("Completed 1st chunk Drawing in " + ((double)watch.Elapsed.Ticks / (double)System.TimeSpan.TicksPerMillisecond).ToString() + "ms"); GameObject go = new GameObject(); MeshFilter mf = go.AddComponent <MeshFilter>(); MeshRenderer mr = go.AddComponent <MeshRenderer>(); mr.material = Resources.Load <Material>("TestMat"); Mesh m = new Mesh(); md = c.GetMesh(); m.vertices = md.Vertices; m.triangles = md.Triangles; m.uv = md.UVs; m.RecalculateNormals(); mf.mesh = m; watch.Reset(); watch.Start(); new ThreadedChunkDrawing(c).Work(); watch.Stop(); Debug.Log("Completed 2nd chunk Drawing in " + ((double)watch.Elapsed.Ticks / (double)System.TimeSpan.TicksPerMillisecond).ToString() + "ms"); }