Пример #1
0
        protected void ConvertLitMeshRenderDataToDynamicMeshData(EntityCommandBuffer ecb, Entity smrEntity, SkinnedMeshRenderer smr)
        {
            if (smr.dynamicMesh != Entity.Null)
            {
                return;
            }

            Entity            meshEntity        = smr.sharedMesh;
            LitMeshRenderData litMeshRenderData = EntityManager.GetComponentData <LitMeshRenderData>(meshEntity);
            ref LitMeshData   litMeshData       = ref litMeshRenderData.Mesh.Value;
Пример #2
0
        public static unsafe MeshBGFX CreateStaticSkinnedMeshFromBlobAsset(RendererBGFXInstance *inst,
                                                                           LitMeshRenderData meshData, SkinnedMeshRenderData skinnedData)
        {
            ushort *           indices      = (ushort *)meshData.Mesh.Value.Indices.GetUnsafePtr();
            int                nindices     = meshData.Mesh.Value.Indices.Length;
            LitVertex *        vertices     = (LitVertex *)meshData.Mesh.Value.Vertices.GetUnsafePtr();
            int                nvertices    = meshData.Mesh.Value.Vertices.Length;
            SkinnedMeshVertex *skinningdata = (SkinnedMeshVertex *)skinnedData.SkinnedMeshDataRef.Value.Vertices.GetUnsafePtr();

            return(CreateStaticMesh(inst, indices, nindices, vertices, nvertices, skinningdata));
        }
Пример #3
0
        protected void ConvertMeshRenderDataToDynamicMeshData(EntityCommandBuffer ecb, Entity smrEntity, SkinnedMeshRenderer smr,
                                                              bool needSkinningData)
        {
            if (smr.dynamicMesh != Entity.Null)
            {
                return;
            }

            Entity meshEntity        = smr.sharedMesh;
            Entity dynamicMeshEntity = ecb.CreateEntity();

            smr.dynamicMesh = dynamicMeshEntity;
            ecb.SetComponent(smrEntity, smr);

            if (EntityManager.HasComponent <LitMeshRenderData>(meshEntity))
            {
                LitMeshRenderData litMeshRenderData = EntityManager.GetComponentData <LitMeshRenderData>(meshEntity);
                ref LitMeshData   litMeshData       = ref litMeshRenderData.Mesh.Value;
                int indicesCount  = litMeshData.Indices.Length;
                int verticesCount = litMeshData.Vertices.Length;

                DynamicMeshData dmd = new DynamicMeshData
                {
                    Dirty               = true,
                    IndexCapacity       = indicesCount,
                    VertexCapacity      = verticesCount,
                    NumIndices          = indicesCount,
                    NumVertices         = verticesCount,
                    UseDynamicGPUBuffer = true,
                    CopyFrom            = needSkinningData ? meshEntity : Entity.Null
                };
                ecb.AddComponent(dynamicMeshEntity, dmd);

                DynamicBuffer <DynamicLitVertex> dlvBuffer = ecb.AddBuffer <DynamicLitVertex>(dynamicMeshEntity);
                dlvBuffer.ResizeUninitialized(verticesCount);
                void *verticesPtr  = litMeshData.Vertices.GetUnsafePtr();
                byte *dlvBufferPtr = (byte *)dlvBuffer.GetUnsafePtr();
                int   vertexSize   = UnsafeUtility.SizeOf <LitVertex>();
                UnsafeUtility.MemCpy(dlvBufferPtr, verticesPtr, verticesCount * vertexSize);

                DynamicBuffer <DynamicIndex> diBuffer = ecb.AddBuffer <DynamicIndex>(dynamicMeshEntity);
                diBuffer.ResizeUninitialized(indicesCount);
                void *indicesPtr  = litMeshData.Indices.GetUnsafePtr();
                void *dlBufferPtr = diBuffer.GetUnsafePtr();
                int   indexSize   = UnsafeUtility.SizeOf <DynamicIndex>();
                UnsafeUtility.MemCpy(dlBufferPtr, indicesPtr, indicesCount * indexSize);
            }
        public static unsafe void EncodeDebugTangents(RendererBGFXInstance *sys, bgfx.Encoder *encoder, ushort viewId, float2 width, float length, ref LitMeshRenderData mesh, ref float4x4 objTx, ref float4x4 viewTx, ref float4x4 projTx)
        {
            int        nv       = (int)mesh.Mesh.Value.Vertices.Length;
            LitVertex *vertices = (LitVertex *)mesh.Mesh.Value.Vertices.GetUnsafePtr();

            for (int i = 0; i < nv; i++)
            {
                EncodeLine(sys, encoder, viewId, vertices[i].Position, vertices[i].Position + vertices[i].Normal * length, new float4(0, 0, 1, 1), width, ref objTx, ref viewTx, ref projTx);
                EncodeLine(sys, encoder, viewId, vertices[i].Position, vertices[i].Position + vertices[i].Tangent * length, new float4(1, 0, 0, 1), width, ref objTx, ref viewTx, ref projTx);
            }
        }
Пример #5
0
        public static unsafe MeshBGFX CreateStaticMeshFromBlobAsset(RendererBGFXInstance *inst, LitMeshRenderData mesh)
        {
            ushort *   indices   = (ushort *)mesh.Mesh.Value.Indices.GetUnsafePtr();
            int        nindices  = mesh.Mesh.Value.Indices.Length;
            LitVertex *vertices  = (LitVertex *)mesh.Mesh.Value.Vertices.GetUnsafePtr();
            int        nvertices = mesh.Mesh.Value.Vertices.Length;

            return(CreateStaticMesh(inst, indices, nindices, vertices, nvertices));
        }