增加引擎修改补丁代码

This commit is contained in:
FishOrBear 2021-07-01 11:12:38 +08:00
parent 96824b4629
commit 265f789774
3 changed files with 614 additions and 12 deletions

9
README.md Normal file
View File

@ -0,0 +1,9 @@
校验补丁
git apply --check ue_can_runtime_build_df_meshcard.patch
打入补丁
git apply ue_can_runtime_build_df_meshcard.patch
参考

View File

@ -0,0 +1,605 @@
From 86a2067b4936b1abfbf87ced4de8e83c4578900b Mon Sep 17 00:00:00 2001
From: FishOrBear <cay776@gmail.com>
Date: Thu, 1 Jul 2021 11:03:50 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BC=95=E6=93=8E=E4=BB=A5?=
=?UTF-8?q?=E4=BE=BF=E6=94=AF=E6=8C=81=E8=BF=90=E8=A1=8C=E6=97=B6=E6=9E=84?=
=?UTF-8?q?=E5=BB=BA=E8=B7=9D=E7=A6=BB=E5=9C=BA=E9=98=B4=E5=BD=B1=E5=92=8C?=
=?UTF-8?q?MeshCard?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Engine/Classes/Engine/StaticMesh.h | 4 +-
.../Runtime/Engine/Private/StaticMesh.cpp | 11 +-
.../Engine/Public/DerivedMeshDataTaskUtils.h | 4 +-
.../Engine/Public/MeshCardRepresentation.h | 18 ++--
.../Engine/Public/ObjectCacheContext.h | 12 +--
.../Engine/Public/StaticMeshResources.h | 100 +++++++++---------
.../Private/DistanceFieldStreaming.cpp | 11 ++
7 files changed, 86 insertions(+), 74 deletions(-)
diff --git a/Engine/Source/Runtime/Engine/Classes/Engine/StaticMesh.h b/Engine/Source/Runtime/Engine/Classes/Engine/StaticMesh.h
index 54259bf..769277b 100644
--- a/Engine/Source/Runtime/Engine/Classes/Engine/StaticMesh.h
+++ b/Engine/Source/Runtime/Engine/Classes/Engine/StaticMesh.h
@@ -1377,7 +1377,7 @@ public:
/**
* Builds static mesh render buffers from a list of MeshDescriptions, one per LOD.
*/
- ENGINE_API bool BuildFromMeshDescriptions(const TArray<const FMeshDescription*>& MeshDescriptions, const FBuildMeshDescriptionsParams& Params = FBuildMeshDescriptionsParams());
+ ENGINE_API bool BuildFromMeshDescriptions(const TArray<const FMeshDescription*>& MeshDescriptions, const FBuildMeshDescriptionsParams& Params = FBuildMeshDescriptionsParams(), bool InNeedsCPUAccess = false);
/** Builds a LOD resource from a MeshDescription */
ENGINE_API void BuildFromMeshDescription(const FMeshDescription& MeshDescription, FStaticMeshLODResources& LODResources);
@@ -1861,4 +1861,4 @@ class FStaticMeshBuildContext : public FStaticMeshCompilationContext
{
public:
bool bHasRenderDataChanged = false;
-};
\ No newline at end of file
+};
diff --git a/Engine/Source/Runtime/Engine/Private/StaticMesh.cpp b/Engine/Source/Runtime/Engine/Private/StaticMesh.cpp
index 8d00c60..330c7f5 100644
--- a/Engine/Source/Runtime/Engine/Private/StaticMesh.cpp
+++ b/Engine/Source/Runtime/Engine/Private/StaticMesh.cpp
@@ -1154,7 +1154,7 @@ void FStaticMeshVertexBuffers::InitFromDynamicVertex(FLocalVertexFactory* Vertex
});
};
-FStaticMeshLODResources::FStaticMeshLODResources(bool bAddRef)
+FStaticMeshLODResources::FStaticMeshLODResources(bool bAddRef, bool InNeedsCPUAccess)
: CardRepresentationData(nullptr)
, MaxDeviation(0.0f)
, bHasDepthOnlyIndices(false)
@@ -1170,6 +1170,7 @@ FStaticMeshLODResources::FStaticMeshLODResources(bool bAddRef)
#if STATS
, StaticMeshIndexMemory(0)
#endif
+ , IndexBuffer(InNeedsCPUAccess)
{
if (bAddRef)
{
@@ -1744,14 +1745,14 @@ void FStaticMeshRenderData::ReleaseResources()
NaniteResources.ReleaseResources();
}
-void FStaticMeshRenderData::AllocateLODResources(int32 NumLODs)
+void FStaticMeshRenderData::AllocateLODResources(int32 NumLODs, bool InNeedsCPUAccess)
{
check(LODResources.Num() == 0);
LODResources.Reserve(NumLODs);
LODVertexFactories.Reserve(NumLODs);
while (LODResources.Num() < NumLODs)
{
- LODResources.Add(new FStaticMeshLODResources);
+ LODResources.Add(new FStaticMeshLODResources(true, InNeedsCPUAccess));
new (LODVertexFactories) FStaticMeshVertexFactories(GMaxRHIFeatureLevel);
}
}
@@ -5729,7 +5730,7 @@ void UStaticMesh::BuildFromStaticMeshDescriptions(const TArray<UStaticMeshDescri
}
-bool UStaticMesh::BuildFromMeshDescriptions(const TArray<const FMeshDescription*>& MeshDescriptions, const FBuildMeshDescriptionsParams& Params)
+bool UStaticMesh::BuildFromMeshDescriptions(const TArray<const FMeshDescription*>& MeshDescriptions, const FBuildMeshDescriptionsParams& Params, bool InNeedsCPUAccess)
{
// Set up
NeverStream = true;
@@ -5775,7 +5776,7 @@ bool UStaticMesh::BuildFromMeshDescriptions(const TArray<const FMeshDescription*
#endif
SetRenderData(MakeUnique<FStaticMeshRenderData>());
- GetRenderData()->AllocateLODResources(MeshDescriptions.Num());
+ GetRenderData()->AllocateLODResources(MeshDescriptions.Num(), InNeedsCPUAccess);
// Build render data from each mesh description
diff --git a/Engine/Source/Runtime/Engine/Public/DerivedMeshDataTaskUtils.h b/Engine/Source/Runtime/Engine/Public/DerivedMeshDataTaskUtils.h
index c10353b..1145a58 100644
--- a/Engine/Source/Runtime/Engine/Public/DerivedMeshDataTaskUtils.h
+++ b/Engine/Source/Runtime/Engine/Public/DerivedMeshDataTaskUtils.h
@@ -10,7 +10,7 @@
#include "StaticMeshResources.h"
/** Source mesh data. Valid only in specific cases, when StaticMesh doesn't contain original data anymore (e.g. it's replaced by the Nanite coarse mesh representation) */
-class FSourceMeshDataForDerivedDataTask
+class ENGINE_API FSourceMeshDataForDerivedDataTask
{
public:
TArray<uint32> TriangleIndices;
@@ -30,4 +30,4 @@ public:
{
return TriangleIndices.Num() > 0;
}
-};
\ No newline at end of file
+};
diff --git a/Engine/Source/Runtime/Engine/Public/MeshCardRepresentation.h b/Engine/Source/Runtime/Engine/Public/MeshCardRepresentation.h
index 1e1ec80..074373e 100644
--- a/Engine/Source/Runtime/Engine/Public/MeshCardRepresentation.h
+++ b/Engine/Source/Runtime/Engine/Public/MeshCardRepresentation.h
@@ -9,9 +9,9 @@
#include "CoreMinimal.h"
#include "Containers/LockFreeList.h"
#include "ProfilingDebugging/ResourceSize.h"
-#include "Engine/EngineTypes.h"
+// #include "Engine/EngineTypes.h"
#include "UObject/GCObject.h"
-#include "RenderResource.h"
+// #include "RenderResource.h"
#include "RenderingThread.h"
#include "Templates/UniquePtr.h"
#include "DerivedMeshDataTaskUtils.h"
@@ -20,7 +20,7 @@
template <class T> class TLockFreePointerListLIFO;
class FSignedDistanceFieldBuildMaterialData;
-class FLumenCardBuildData
+class ENGINE_API FLumenCardBuildData
{
public:
FVector Center;
@@ -57,7 +57,7 @@ public:
}
};
-class FLumenCardBuildDebugPoint
+class ENGINE_API FLumenCardBuildDebugPoint
{
public:
FVector Origin;
@@ -65,7 +65,7 @@ public:
bool bValid;
};
-class FLumenCardBuildDebugLine
+class ENGINE_API FLumenCardBuildDebugLine
{
public:
FVector Origin;
@@ -73,7 +73,7 @@ public:
int32 Orientation;
};
-class FMeshCardsBuildData
+class ENGINE_API FMeshCardsBuildData
{
public:
FBox Bounds;
@@ -95,7 +95,7 @@ public:
};
// Unique id per card representation data instance.
-class FCardRepresentationDataId
+class ENGINE_API FCardRepresentationDataId
{
public:
uint32 Value = 0;
@@ -117,7 +117,7 @@ public:
};
/** Card representation payload and output of the mesh build process. */
-class FCardRepresentationData : public FDeferredCleanupInterface
+class ENGINE_API FCardRepresentationData : public FDeferredCleanupInterface
{
public:
@@ -276,4 +276,4 @@ extern ENGINE_API FCardRepresentationAsyncQueue* GCardRepresentationAsyncQueue;
extern ENGINE_API FString BuildCardRepresentationDerivedDataKey(const FString& InMeshKey);
-extern ENGINE_API void BeginCacheMeshCardRepresentation(const ITargetPlatform* TargetPlatform, UStaticMesh* StaticMeshAsset, class FStaticMeshRenderData& RenderData, const FString& DistanceFieldKey, FSourceMeshDataForDerivedDataTask* OptionalSourceMeshData);
\ No newline at end of file
+extern ENGINE_API void BeginCacheMeshCardRepresentation(const ITargetPlatform* TargetPlatform, UStaticMesh* StaticMeshAsset, class FStaticMeshRenderData& RenderData, const FString& DistanceFieldKey, FSourceMeshDataForDerivedDataTask* OptionalSourceMeshData);
diff --git a/Engine/Source/Runtime/Engine/Public/ObjectCacheContext.h b/Engine/Source/Runtime/Engine/Public/ObjectCacheContext.h
index 16e2ef1..0963fb9 100644
--- a/Engine/Source/Runtime/Engine/Public/ObjectCacheContext.h
+++ b/Engine/Source/Runtime/Engine/Public/ObjectCacheContext.h
@@ -21,7 +21,7 @@ class USkeletalMesh;
* Class to abstract implementation details of the containers used inside the
* object cache so they can be changed later if needed without API changes.
*/
-template< class T > class TObjectCacheIterator
+template< class T > class ENGINE_API TObjectCacheIterator
{
public:
/**
@@ -62,7 +62,7 @@ protected:
* reverse lookup tables that can be used during heavy scene updates
* of async asset compilation.
*/
-class FObjectCacheContext
+class ENGINE_API FObjectCacheContext
{
public:
TObjectCacheIterator<UPrimitiveComponent> GetPrimitiveComponents();
@@ -95,12 +95,12 @@ private:
* is destroyed. Should only be used during short periods when there is no new
* objects created and no object dependency changes. (i.e. Scene update after asset compilation).
*/
-class FObjectCacheContextScope
+class ENGINE_API FObjectCacheContextScope
{
public:
- ENGINE_API FObjectCacheContextScope();
- ENGINE_API ~FObjectCacheContextScope();
- ENGINE_API FObjectCacheContext& GetContext();
+ FObjectCacheContextScope();
+ ~FObjectCacheContextScope();
+ FObjectCacheContext& GetContext();
private:
// Scopes can be stacked over one another, but only the outermost will
// own the actual context and destroy it at the end, all inner scopes
diff --git a/Engine/Source/Runtime/Engine/Public/StaticMeshResources.h b/Engine/Source/Runtime/Engine/Public/StaticMeshResources.h
index 29c41f6..040e72d 100644
--- a/Engine/Source/Runtime/Engine/Public/StaticMeshResources.h
+++ b/Engine/Source/Runtime/Engine/Public/StaticMeshResources.h
@@ -349,12 +349,12 @@ struct TIsContiguousContainer<FStaticMeshSectionArray> : TIsContiguousContainer<
};
//using FStaticMeshSectionArray = TArray<FStaticMeshSection, TInlineAllocator<1>>;
-/**
+/**
* Rendering resources needed to render an individual static mesh LOD.
* This structure is ref counted to allow the LOD streamer to evaluate the number of readers to it (readers that could access the CPU data).
* Because the stream out clears the CPU readable data, CPU code that samples it must ensure to only reference LODs above CurrentFirstLODIdx.
*/
-struct FStaticMeshLODResources : public FRefCountBase
+struct ENGINE_API FStaticMeshLODResources : public FRefCountBase
{
public:
@@ -362,7 +362,7 @@ public:
FStaticMeshSectionArray Sections;
/** Distance field data associated with this mesh, null if not present. */
- class FDistanceFieldVolumeData* DistanceFieldData = nullptr;
+ class FDistanceFieldVolumeData* DistanceFieldData = nullptr;
/** Card Representation data associated with this mesh, null if not present. */
class FCardRepresentationData* CardRepresentationData;
@@ -431,11 +431,11 @@ public:
FStaticMeshSectionAreaWeightedTriangleSamplerArray AreaWeightedSectionSamplers;
/** Allows uniform random selection of triangles on GPU. It is not cooked and serialised but created at runtime from AreaWeightedSectionSamplers when it is available and static mesh bSupportGpuUniformlyDistributedSampling=true*/
FStaticMeshSectionAreaWeightedTriangleSamplerBuffer AreaWeightedSectionSamplersBuffer;
-
+
/** Default constructor. Add a reference if not stored with a TRefCountPtr */
- ENGINE_API FStaticMeshLODResources(bool bAddRef = true);
+ FStaticMeshLODResources(bool bAddRef = true, bool InNeedsCPUAccess = false);
- ENGINE_API ~FStaticMeshLODResources();
+ ~FStaticMeshLODResources();
template <typename TBatcher>
void ReleaseRHIForStreaming(TBatcher& Batcher)
@@ -467,12 +467,12 @@ public:
void GetResourceSizeEx(FResourceSizeEx& CumulativeResourceSize) const;
/** Return the triangle count of this LOD. */
- ENGINE_API int32 GetNumTriangles() const;
+ int32 GetNumTriangles() const;
/** Return the number of vertices in this LOD. */
- ENGINE_API int32 GetNumVertices() const;
+ int32 GetNumVertices() const;
- ENGINE_API int32 GetNumTexCoords() const;
+ int32 GetNumTexCoords() const;
private:
enum EClassDataStripFlag : uint8
@@ -610,13 +610,13 @@ using FStaticMeshVertexFactoriesArray = TArray<FStaticMeshVertexFactories>;
/**
* FStaticMeshRenderData - All data needed to render a static mesh.
*/
-class FStaticMeshRenderData
+class ENGINE_API FStaticMeshRenderData
{
public:
/** Default constructor. */
- ENGINE_API FStaticMeshRenderData();
- ENGINE_API ~FStaticMeshRenderData();
+ FStaticMeshRenderData();
+ ~FStaticMeshRenderData();
/**
* Per-LOD resources. For compatibility reasons, the FStaticMeshLODResources array are not referenced through TRefCountPtr.
@@ -672,7 +672,7 @@ public:
* Cache derived renderable data for the static mesh with the provided
* level of detail settings.
*/
- ENGINE_API void Cache(const ITargetPlatform* TargetPlatform, UStaticMesh* Owner, const FStaticMeshLODSettings& LODSettings);
+ void Cache(const ITargetPlatform* TargetPlatform, UStaticMesh* Owner, const FStaticMeshLODSettings& LODSettings);
#endif // #if WITH_EDITORONLY_DATA
/** Count the number of LODs that are inlined and not streamable. Starting from the last LOD and stopping at the first non inlined LOD. */
@@ -690,13 +690,13 @@ public:
void InitResources(ERHIFeatureLevel::Type InFeatureLevel, UStaticMesh* Owner);
/** Releases the render resources. */
- ENGINE_API void ReleaseResources();
+ void ReleaseResources();
/** Compute the size of this resource. */
void GetResourceSizeEx(FResourceSizeEx& CumulativeResourceSize) const;
/** Allocate LOD resources. */
- ENGINE_API void AllocateLODResources(int32 NumLODs);
+ void AllocateLODResources(int32 NumLODs, bool InNeedsCPUAccess = false);
/** Update LOD-SECTION uv densities. */
void ComputeUVDensities();
@@ -705,11 +705,11 @@ public:
#if WITH_EDITOR
/** Resolve all per-section settings. */
- ENGINE_API void ResolveSectionInfo(UStaticMesh* Owner);
+ void ResolveSectionInfo(UStaticMesh* Owner);
#endif // #if WITH_EDITORONLY_DATA
/** Return first valid LOD index starting at MinLODIdx. */
- ENGINE_API int32 GetFirstValidLODIdx(int32 MinLODIdx) const;
+ int32 GetFirstValidLODIdx(int32 MinLODIdx) const;
/** Return the current first LODIdx that can be used. */
FORCEINLINE int32 GetCurrentFirstLODIdx(int32 MinLODIdx) const
@@ -717,9 +717,9 @@ public:
return GetFirstValidLODIdx(FMath::Max<int32>(CurrentFirstLODIdx, MinLODIdx));
}
- /**
+ /**
* Return the current first LOD that can be used for rendering starting at MinLODIdx.
- * This takes into account the streaming status from CurrentFirstLODIdx,
+ * This takes into account the streaming status from CurrentFirstLODIdx,
* and MinLODIdx is expected to be UStaticMesh::MinLOD, which is platform specific.
*/
FORCEINLINE const FStaticMeshLODResources* GetCurrentFirstLOD(int32 MinLODIdx) const
@@ -755,7 +755,7 @@ public:
};
/**
- * FStaticMeshComponentRecreateRenderStateContext - Destroys render state for all StaticMeshComponents using a given StaticMesh and
+ * FStaticMeshComponentRecreateRenderStateContext - Destroys render state for all StaticMeshComponents using a given StaticMesh and
* recreates them when it goes out of scope. Used to ensure stale rendering data isn't kept around in the components when importing
* over or rebuilding an existing static mesh.
*/
@@ -895,10 +895,10 @@ public:
/** Sets up a FMeshBatch for a specific LOD and element. */
virtual bool GetMeshElement(
- int32 LODIndex,
- int32 BatchIndex,
- int32 ElementIndex,
- uint8 InDepthPriorityGroup,
+ int32 LODIndex,
+ int32 BatchIndex,
+ int32 ElementIndex,
+ uint8 InDepthPriorityGroup,
bool bUseSelectionOutline,
bool bAllowPreCulledIndices,
FMeshBatch& OutMeshBatch) const;
@@ -982,8 +982,8 @@ public:
#if RHI_RAYTRACING
virtual void GetDynamicRayTracingInstances(FRayTracingMaterialGatheringContext& Context, TArray<FRayTracingInstance>& OutRayTracingInstances) override;
virtual bool IsRayTracingRelevant() const override { return true; }
- virtual bool IsRayTracingStaticRelevant() const override
- {
+ virtual bool IsRayTracingStaticRelevant() const override
+ {
const bool bAllowStaticLighting = FReadOnlyCVARCache::Get().bAllowStaticLighting;
const bool bIsStaticInstance = !bDynamicRayTracingGeometry;
return bIsStaticInstance && !HasViewDependentDPG() && !(bAllowStaticLighting && HasStaticLighting() && !HasValidSettingsForStaticLighting());
@@ -1073,8 +1073,8 @@ protected:
TArray<FLODInfo> LODs;
- const FDistanceFieldVolumeData* DistanceFieldData;
- const FCardRepresentationData* CardRepresentationData;
+ const FDistanceFieldVolumeData* DistanceFieldData;
+ const FCardRepresentationData* CardRepresentationData;
#if RHI_RAYTRACING
bool bSupportRayTracing;
@@ -1233,7 +1233,7 @@ public:
}
void Serialize(FArchive& Ar);
-
+
void AllocateInstances(int32 InNumInstances, int32 InNumCustomDataFloats, EResizeBufferFlags BufferFlags, bool DestroyExistingInstances)
{
NumInstances = InNumInstances;
@@ -1300,7 +1300,7 @@ public:
Transform.M[3][0] = Origin.X;
Transform.M[3][1] = Origin.Y;
Transform.M[3][2] = Origin.Z;
-#if 1
+#if 1
// GPUCULL_TODO: This causes problems when using this as a normal real proper matrix and concatenating!
Transform.M[3][3] = 0.f;
#else
@@ -1354,7 +1354,7 @@ public:
SetInstanceCustomDataInternal(InstanceIndex, i, 0);
}
}
-
+
FORCEINLINE_DEBUGGABLE void SetInstance(int32 InstanceIndex, const FMatrix& Transform, float RandomInstanceID, const FVector2D& LightmapUVBias, const FVector2D& ShadowmapUVBias)
{
FVector4 Origin(Transform.M[3][0], Transform.M[3][1], Transform.M[3][2], RandomInstanceID);
@@ -1416,12 +1416,12 @@ public:
{
SetInstanceLightMapDataInternal(InstanceIndex, FVector4(LightmapUVBias.X, LightmapUVBias.Y, ShadowmapUVBias.X, ShadowmapUVBias.Y));
}
-
+
FORCEINLINE void SetInstanceCustomData(int32 InstanceIndex, int32 Index, float CustomData)
{
SetInstanceCustomDataInternal(InstanceIndex, Index, CustomData);
}
-
+
FORCEINLINE_DEBUGGABLE void NullifyInstance(int32 InstanceIndex)
{
SetInstanceOriginInternal(InstanceIndex, FVector4(0, 0, 0, 0));
@@ -1513,7 +1513,7 @@ public:
check((void*)((&ElementData[Index1]) + 0) >= (void*)(InstanceTransformDataPtr));
check((void*)((&ElementData[Index2]) + 1) <= (void*)(InstanceTransformDataPtr + CurrentSize));
check((void*)((&ElementData[Index2]) + 0) >= (void*)(InstanceTransformDataPtr));
-
+
FInstanceTransformMatrix<float> TempStore = ElementData[Index1];
ElementData[Index1] = ElementData[Index2];
ElementData[Index2] = TempStore;
@@ -1538,7 +1538,7 @@ public:
check((void*)((&ElementData[Index1]) + 0) >= (void*)(InstanceLightmapDataPtr));
check((void*)((&ElementData[Index2]) + 1) <= (void*)(InstanceLightmapDataPtr + CurrentSize));
check((void*)((&ElementData[Index2]) + 0) >= (void*)(InstanceLightmapDataPtr));
-
+
FInstanceLightMapVector TempStore = ElementData[Index1];
ElementData[Index1] = ElementData[Index2];
ElementData[Index2] = TempStore;
@@ -1641,8 +1641,8 @@ public:
FORCEINLINE_DEBUGGABLE SIZE_T GetResourceSize() const
{
- return InstanceOriginData->GetResourceSize() +
- InstanceTransformData->GetResourceSize() +
+ return InstanceOriginData->GetResourceSize() +
+ InstanceTransformData->GetResourceSize() +
InstanceLightmapData->GetResourceSize() +
InstanceCustomData->GetResourceSize();
}
@@ -1655,17 +1655,17 @@ private:
uint32 CurrentSize = InstanceTransformData->Num() * InstanceTransformData->GetStride();
check((void*)((&ElementData[InstanceIndex]) + 1) <= (void*)(InstanceTransformDataPtr + CurrentSize));
check((void*)((&ElementData[InstanceIndex]) + 0) >= (void*)(InstanceTransformDataPtr));
-
+
Transform[0][0] = ElementData[InstanceIndex].InstanceTransform1[0];
Transform[0][1] = ElementData[InstanceIndex].InstanceTransform1[1];
Transform[0][2] = ElementData[InstanceIndex].InstanceTransform1[2];
Transform[0][3] = ElementData[InstanceIndex].InstanceTransform1[3];
-
+
Transform[1][0] = ElementData[InstanceIndex].InstanceTransform2[0];
Transform[1][1] = ElementData[InstanceIndex].InstanceTransform2[1];
Transform[1][2] = ElementData[InstanceIndex].InstanceTransform2[2];
Transform[1][3] = ElementData[InstanceIndex].InstanceTransform2[3];
-
+
Transform[2][0] = ElementData[InstanceIndex].InstanceTransform3[0];
Transform[2][1] = ElementData[InstanceIndex].InstanceTransform3[1];
Transform[2][2] = ElementData[InstanceIndex].InstanceTransform3[2];
@@ -1691,7 +1691,7 @@ private:
LightmapData = FVector4
(
- float(ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[0]) / 32767.0f,
+ float(ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[0]) / 32767.0f,
float(ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[1]) / 32767.0f,
float(ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[2]) / 32767.0f,
float(ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[3]) / 32767.0f
@@ -1708,7 +1708,7 @@ private:
for (int32 i = 0; i < NumCustomDataFloats; ++i)
{
int32 CustomDataIndex = NumCustomDataFloats * InstanceIndex + i;
-
+
check((void*)((&ElementData[CustomDataIndex]) + 1) <= (void*)(InstanceCustomDataPtr + CurrentSize));
check((void*)((&ElementData[CustomDataIndex]) + 0) >= (void*)(InstanceCustomDataPtr));
@@ -1785,16 +1785,16 @@ private:
{
delete InstanceOriginData;
InstanceOriginDataPtr = nullptr;
-
+
delete InstanceTransformData;
InstanceTransformDataPtr = nullptr;
-
+
delete InstanceLightmapData;
InstanceLightmapDataPtr = nullptr;
-
+
delete InstanceCustomData;
InstanceCustomData = nullptr;
-
+
InstanceOriginData = new TStaticMeshVertexData<FVector4>();
InstanceOriginData->ResizeBuffer(InNumInstances, BufferFlags);
InstanceLightmapData = new TStaticMeshVertexData<FInstanceLightMapVector>();
@@ -1808,7 +1808,7 @@ private:
InstanceTransformData = new TStaticMeshVertexData<FInstanceTransformMatrix<float>>();
}
InstanceTransformData->ResizeBuffer(InNumInstances, BufferFlags);
-
+
InstanceCustomData = new TStaticMeshVertexData<float>();
InstanceCustomData->ResizeBuffer(NumCustomDataFloats * InNumInstances, BufferFlags);
}
@@ -1820,7 +1820,7 @@ private:
uint8* InstanceTransformDataPtr = nullptr;
FStaticMeshVertexDataInterface* InstanceLightmapData = nullptr;
- uint8* InstanceLightmapDataPtr = nullptr;
+ uint8* InstanceLightmapDataPtr = nullptr;
FStaticMeshVertexDataInterface* InstanceCustomData = nullptr;
uint8* InstanceCustomDataPtr = nullptr;
@@ -1829,7 +1829,7 @@ private:
int32 NumCustomDataFloats = 0;
bool bUseHalfFloat = false;
};
-
+
#if WITH_EDITOR
/**
* Remaps painted vertex colors when the renderable mesh has changed.
@@ -1844,7 +1844,7 @@ ENGINE_API void RemapPaintedVertexColors(
const FColorVertexBuffer* InOverrideColors,
const FPositionVertexBuffer& OldPositions,
const FStaticMeshVertexBuffer& OldVertexBuffer,
- const FPositionVertexBuffer& NewPositions,
+ const FPositionVertexBuffer& NewPositions,
const FStaticMeshVertexBuffer* OptionalVertexBuffer,
TArray<FColor>& OutOverrideColors
);
diff --git a/Engine/Source/Runtime/Renderer/Private/DistanceFieldStreaming.cpp b/Engine/Source/Runtime/Renderer/Private/DistanceFieldStreaming.cpp
index 384e77c..2b92ff9 100644
--- a/Engine/Source/Runtime/Renderer/Private/DistanceFieldStreaming.cpp
+++ b/Engine/Source/Runtime/Renderer/Private/DistanceFieldStreaming.cpp
@@ -334,6 +334,12 @@ void FDistanceFieldSceneData::AsyncUpdate(FDistanceFieldAsyncUpdateParameters Up
check(ReadRequest.BulkData->IsBulkDataLoaded() && ReadRequest.BulkData->GetBulkDataSize() > 0);
BulkDataReadPtr = (const uint8*)ReadRequest.BulkData->LockReadOnly() + ReadRequest.BulkOffset;
}
+#else
+ if (ReadRequest.BulkData && ReadRequest.BulkData->GetBulkDataFlags() == 1024)
+ {
+ check(ReadRequest.BulkData->IsBulkDataLoaded() && ReadRequest.BulkData->GetBulkDataSize() > 0);
+ BulkDataReadPtr = (const uint8*)ReadRequest.BulkData->LockReadOnly() + ReadRequest.BulkOffset;
+ }
#endif
const int32 NumIndirectionEntries = MipBuiltData.IndirectionDimensions.X * MipBuiltData.IndirectionDimensions.Y * MipBuiltData.IndirectionDimensions.Z;
const uint32 ExpectedBulkSize = NumIndirectionEntries * sizeof(uint32) + ReadRequest.NumDistanceFieldBricks * BrickSizeBytes;
@@ -386,6 +392,11 @@ void FDistanceFieldSceneData::AsyncUpdate(FDistanceFieldAsyncUpdateParameters Up
{
ReadRequest.BulkData->Unlock();
}
+#else
+ if (ReadRequest.BulkData && ReadRequest.BulkData->GetBulkDataFlags() == 1024)
+ {
+ ReadRequest.BulkData->Unlock();
+ }
#endif
BrickUploadIndex += MipState.NumBricks;
--
2.32.0.windows.1

View File

@ -1,12 +0,0 @@
class ENGINE_API FStaticMeshRenderData
struct ENGINE_API FStaticMeshLODResources : public FRefCountBase
FStaticMeshLODResources(bool bAddRef = true);
~FStaticMeshLODResources();
class ENGINE_API FObjectCacheContext
暴露这两个类后,对他们的方法都要取消暴露
索引类改成cpu可访问