예제 #1
0
        void RequestUpdateBuffer(ChunkVertexBuilder vertexBuilder, ChunkMeshUpdatePriority priority)
        {
            for (int z = 0; z < MeshSegments.Z; z++)
            {
                for (int y = 0; y < MeshSegments.Y; y++)
                {
                    for (int x = 0; x < MeshSegments.X; x++)
                    {
                        var opaqueRequest = new UpdateBufferRequest
                        {
                            VertexBuilder = vertexBuilder,
                            Segment       = new IntVector3(x, y, z),
                            Translucece   = false,
                            Priority      = priority,
                            RequestTime   = TimeSpan.FromTicks(Environment.TickCount)
                        };
                        updateBufferRequests.Enqueue(opaqueRequest);

                        var translucentRequest = new UpdateBufferRequest
                        {
                            VertexBuilder = vertexBuilder,
                            Segment       = new IntVector3(x, y, z),
                            Translucece   = true,
                            Priority      = priority,
                            RequestTime   = TimeSpan.FromTicks(Environment.TickCount)
                        };
                        updateBufferRequests.Enqueue(translucentRequest);
                    }
                }
            }
        }
예제 #2
0
        // メッシュ更新は2フェーズ。
        // 1. 非同期な頂点構築
        // 2. 構築された頂点による同期バッファ更新。
        //
        // 恐らく、バッファ更新は GPU との同期が発生するため、
        // 非同期ではなくゲーム スレッドで実行すべきであろうと思われる。

        public void RequestUpdateMesh(Chunk chunk, ChunkMeshUpdatePriority priority)
        {
            if (chunk == null)
            {
                throw new ArgumentNullException("chunk");
            }

            var request = buildVertexRequestPool.Borrow();

            request.Initialize(chunk, priority);

            buildVertexRequests.Enqueue(request);
        }
예제 #3
0
 internal void Initialize(Chunk chunk, ChunkMeshUpdatePriority priority)
 {
     Chunk       = chunk;
     Priority    = priority;
     RequestTime = TimeSpan.FromTicks(Environment.TickCount);
 }
예제 #4
0
 public void RequestUpdateMesh(Chunk chunk, ChunkMeshUpdatePriority priority)
 {
     meshManager.RequestUpdateMesh(chunk, priority);
 }
예제 #5
0
 public void RequestUpdateMesh(Chunk chunk, ChunkMeshUpdatePriority priority)
 {
     meshManager.RequestUpdateMesh(chunk, priority);
 }