Netcode Bootstrap
This commit is contained in:
+57
@@ -0,0 +1,57 @@
|
||||
#ifndef COPY_INITIAL_MESH_DATA_HLSL_
|
||||
#define COPY_INITIAL_MESH_DATA_HLSL_
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ByteAddressBuffer meshVertexData;
|
||||
ByteAddressBuffer meshBonesPerVertexData;
|
||||
RWByteAddressBuffer outInitialDeformedMeshData;
|
||||
|
||||
int inputVertexSizeInBytes;
|
||||
int outDataVertexOffset;
|
||||
uint totalMeshVertices;
|
||||
int outBonesWeightsDataOffset;
|
||||
int inputBonesWeightsDataOffset;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
SourceSkinnedMeshVertex ReadSourceVertex(int vertexIndex)
|
||||
{
|
||||
int vertexByteOffset = vertexIndex * inputVertexSizeInBytes;
|
||||
SourceSkinnedMeshVertex rv = (SourceSkinnedMeshVertex)0;
|
||||
#ifndef RUKHANKA_INPLACE_SKINNING
|
||||
CHECK_RAW_BUFFER_OUT_OF_BOUNDS(RUKHANKADEBUGMARKERS_DEFORMATION_COPY_MESH_DATA, vertexByteOffset, 40, meshVertexData);
|
||||
|
||||
float4 v0 = asfloat(meshVertexData.Load4(vertexByteOffset + 0));
|
||||
float4 v1 = asfloat(meshVertexData.Load4(vertexByteOffset + 16));
|
||||
float1 v2 = asfloat(meshVertexData.Load(vertexByteOffset + 32));
|
||||
rv.position = v0.xyz;
|
||||
rv.normal = float3(v0.w, v1.xy);
|
||||
rv.tangent = float3(v1.zw, v2.x);
|
||||
#endif
|
||||
|
||||
int baseBoneWeightIndex = inputBonesWeightsDataOffset + vertexIndex;
|
||||
|
||||
CHECK_RAW_BUFFER_OUT_OF_BOUNDS(RUKHANKADEBUGMARKERS_DEFORMATION_COPY_MESH_DATA, baseBoneWeightIndex * 4, 4, meshBonesPerVertexData);
|
||||
uint boneWeightsOffsetAndCountPacked = meshBonesPerVertexData.Load(baseBoneWeightIndex * 4);
|
||||
rv.boneWeightsOffset = SourceSkinnedMeshVertex::GetBoneWeightsOffsetFromPackedUINT(boneWeightsOffsetAndCountPacked) + outBonesWeightsDataOffset;
|
||||
rv.boneWeightsCount = SourceSkinnedMeshVertex::GetBoneWeightsCountFromPackedUINT(boneWeightsOffsetAndCountPacked);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
[numthreads(128, 1, 1)]
|
||||
void CopyInitialMeshData(uint tid: SV_DispatchThreadID)
|
||||
{
|
||||
if (tid >= totalMeshVertices)
|
||||
return;
|
||||
|
||||
SourceSkinnedMeshVertex v = ReadSourceVertex(tid);
|
||||
|
||||
int outVertexOffset = tid + outDataVertexOffset;
|
||||
v.WriteIntoRawBuffer(outInitialDeformedMeshData, outVertexOffset);
|
||||
}
|
||||
|
||||
#endif // COPY_INITIAL_MESH_DATA_HLSL_
|
||||
Reference in New Issue
Block a user