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;
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)); }
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); } }
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)); }