Hey guys, I'm quite new to C++ programming (I much prefer C#) but I have a bit of experience with the engine itself (material creation etc.) and I've run into a bit of a problem. I'm trying to manipulate the vertex positions of a skeletal mesh at runtime without the editor. At first the engine crashed but I was able to fix that due to an array index being out of bounds. The real question I'm having is how can I update the mesh after the positions have been updated and to also fix a memory leak I'm having as well?
The code in question is here (no need for the header file as there's not much other than the void function).
//DOESN'T UPDATE MESH AND CAUSES HUGE MEMORY LEAK OF OVER 200MB
void UUpdateVertex::Update(USkeletalMeshComponent* SkeletalMeshComp, int32 LodIndex)
//Avoid running if no skeletal mesh was found
UE_LOG(LogTemp, Warning, TEXT("No skeletal mesh found!"));
USkeletalMesh* SkelMesh = SkeletalMeshComp->SkeletalMesh;
FSkeletalMeshRenderData* RenderData = SkelMesh->GetResourceForRendering();
//Avoid crashing if index is higher than meshes LOD count
if (LodIndex > SkelMesh->GetLODNum())
UE_LOG(LogTemp, Warning, TEXT("LOD greater than index!"));
FSkeletalMeshLODRenderData& LodRender = RenderData->LODRenderData[LodIndex];
//Update every vertex position in every render section
for (int32 j = 0; j < LodRender.RenderSections.Num(); j++)
for (int32 i = 0; i < LodRender.RenderSections[j].GetNumVertices(); i++)
LodRender.StaticVertexBuffers.PositionVertexBuffer.VertexPosition(i) += FVector(0.0f, 0.0f, 10.0f);
UE_LOG(LogTemp, Warning, TEXT("Vertex position: %s"), *LodRender.StaticVertexBuffers.PositionVertexBuffer.VertexPosition(i).ToString());
//FSkeletalMeshLODRenderData* LodRender = RenderData->LODRenderData;
I'm planning on separating the variables into an init function if that helps with the memory leak.
Oct 30 '18 at 07:17 AM