Пример #1
0
        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);
            }
        }
Пример #2
0
    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");
    }