增加引擎修改补丁代码
This commit is contained in:
parent
96824b4629
commit
265f789774
9
README.md
Normal file
9
README.md
Normal file
@ -0,0 +1,9 @@
|
||||
|
||||
校验补丁
|
||||
git apply --check ue_can_runtime_build_df_meshcard.patch
|
||||
|
||||
打入补丁
|
||||
|
||||
git apply ue_can_runtime_build_df_meshcard.patch
|
||||
|
||||
参考
|
605
ue_can_runtime_build_df_meshcard.patch
Normal file
605
ue_can_runtime_build_df_meshcard.patch
Normal 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
|
||||
|
Loading…
Reference in New Issue
Block a user