Foundation
Loading...
Searching...
No Matches
Classes | Macros | Functions | Variables
Scene.cpp File Reference
#include "Scene.hpp"
#include <Core/JobSystem.hpp>
#include <Math/Decompose.hpp>
#include <Math/Quantize.hpp>
#include <algorithm>
#include <cctype>
#include <cgltf.h>
#include <climits>
#include <cstring>
#include <lz4.h>
#include <numeric>
#include <type_traits>
#include <RHICore/Application.hpp>
#include <RHICore/Device.hpp>
#include <Renderer/Postprocess.hpp>
#include <Renderer/GPUScene.hpp>
#include <Renderer/Mesh.hpp>
#include "Curve.hpp"
#include "../PathUtil.hpp"

Classes

struct  FBlobJob
 
struct  FPreparedBlob
 
struct  FResourceBlobJobs
 

Macros

#define CGLTF_IMPLEMENTATION
 
#define CGLTF_VALIDATE_ENABLE_ASSERTS   1
 

Functions

FImportedMesh LoadGLTFSubmesh (const cgltf_primitive *submesh, Allocator *scratchAlloc, Vector< uint16_t > const *jointRemap=nullptr)
 
Optional< FTextureLoadTexture (RHIApplication const &app, StringView path, Allocator *scratchAlloc, bool gamma=false)
 
Optional< FTextureLoadGLTFTexture (RHIApplication const &app, cgltf_texture *texture, StringView scenePath, Allocator *scratchAlloc, bool gamma=false)
 
void LoadGLTFLineCurve (const cgltf_primitive *prim, FImportedCurve &curve, Allocator *scratchAlloc)
 
size_t GetSceneJobGrain (JobSystem const &jobs, size_t count)
 
void AppendBytesBlobJob (Vector< FBlobJob > &jobs, Vector< unsigned char > &&bytes, uint32_t count, uint32_t stride, FBlobCodec codec, FBlobRef &outRef, uint64_t alignment=16)
 
template<typename T >
void AppendArrayBlobJob (Vector< FBlobJob > &jobs, Vector< T > const &values, FBlobCodec codec, FBlobRef &outRef, uint64_t alignment=16)
 
void PrepareBlobJob (FBlobJob const &job, FPreparedBlob &prepared)
 
FBlobRef CommitPreparedBlob (FBlobSerializer &blobSerializer, FPreparedBlob const &blob)
 
void CommitPreparedBlobJobs (FBlobSerializer &blobSerializer, Vector< FPreparedBlob > const &preparedBlobs)
 
void AppendResourceBlobJobs (Vector< FBlobJob > &blobJobs, FResourceBlobJobs &resourceBlobJobs)
 
void BuildTextureBlobJobs (FSerializedTexture &desc, Vector< FBlobJob > &blobJobs, FTexture &&texture)
 
void BuildMeshBlobJobs (FSerializedMesh &desc, Vector< FBlobJob > &blobJobs, FImportedMesh const &mesh, FUUID skeleton=kNilUUID)
 
void BuildCurveBlobJobs (FSerializedCurve &desc, Vector< FBlobJob > &blobJobs, FImportedCurve const &curve)
 
FSkeleton BuildSkeletonFromSkin (cgltf_data *data, cgltf_skin const *skin, Vector< uint16_t > &outRemap, Allocator *alloc)
 
FAnimInterp MapAnimInterp (cgltf_interpolation_type interp)
 
bool MapAnimPath (cgltf_animation_path_type path, FAnimPath &out)
 
bool BuildAnimChannel (cgltf_animation_channel const *ch, uint32_t joint, FAnimChannel &out, float &duration)
 
void BuildGLTFSerializedScene (RHIApplication const &app, JobSystem *jobs, StringView path, FImportedScene &scene, Allocator *scratchAlloc, FSceneBuildOptions const &buildOptions)
 
uint32_t CountGPUSceneBudget (size_t count)
 
uint32_t RingGPUSceneBudget (size_t count)
 
uint32_t ByteGPUSceneBudget (size_t bytes, size_t minBytes, size_t alignment, size_t maxBytes=UINT32_MAX)
 
void BuildDOTSGeometry (FImportedCurve const &curve, Vector< FCurveDOTSVertex > &vertices, Vector< uint32_t > &indices, Vector< FCurveLeaf > &leaves)
 
void FinalizeSceneWriter (FImportedScene &scene)
 
void LoadGLTF (RHIApplication const &app, JobSystem *jobs, StringView path, FImportedScene &scene, Allocator *scratchAlloc, FSceneBuildOptions const &buildOptions)
 
void LoadFSCN (FImportedScene &scene)
 
String LoadScene (RHIApplication const &app, JobSystem *jobs, StringView path, FImportedScene &scene, Allocator *scratchAlloc, FSceneBuildOptions const &buildOptions)
 

Variables

static constexpr uint32_t kGPUSceneRingFrameSlack = 4u
 
static constexpr uint32_t kGPUScenePersistentTexture2DBindings = 2u
 
static constexpr uint32_t kGPUScenePersistentTexture3DBindings = 2u
 
static constexpr uint32_t kGPUSceneDefaultTextureBindings = 2u
 
static constexpr uint32_t kGPUSceneEnvMapBindings = 3u
 
static constexpr uint32_t kGPUSceneTextureBindingSlack = 8u
 
static constexpr size_t kGPUSceneByteBudgetSlack = 64u << 10u
 

Macro Definition Documentation

◆ CGLTF_IMPLEMENTATION

#define CGLTF_IMPLEMENTATION

◆ CGLTF_VALIDATE_ENABLE_ASSERTS

#define CGLTF_VALIDATE_ENABLE_ASSERTS   1

Function Documentation

◆ AppendArrayBlobJob()

template<typename T >
void AppendArrayBlobJob ( Vector< FBlobJob > &  jobs,
Vector< T > const &  values,
FBlobCodec  codec,
FBlobRef outRef,
uint64_t  alignment = 16 
)

◆ AppendBytesBlobJob()

void AppendBytesBlobJob ( Vector< FBlobJob > &  jobs,
Vector< unsigned char > &&  bytes,
uint32_t  count,
uint32_t  stride,
FBlobCodec  codec,
FBlobRef outRef,
uint64_t  alignment = 16 
)

◆ AppendResourceBlobJobs()

void AppendResourceBlobJobs ( Vector< FBlobJob > &  blobJobs,
FResourceBlobJobs resourceBlobJobs 
)

◆ BuildAnimChannel()

bool BuildAnimChannel ( cgltf_animation_channel const *  ch,
uint32_t  joint,
FAnimChannel out,
float &  duration 
)

◆ BuildCurveBlobJobs()

void BuildCurveBlobJobs ( FSerializedCurve desc,
Vector< FBlobJob > &  blobJobs,
FImportedCurve const &  curve 
)

◆ BuildDOTSGeometry()

void BuildDOTSGeometry ( FImportedCurve const &  curve,
Vector< FCurveDOTSVertex > &  vertices,
Vector< uint32_t > &  indices,
Vector< FCurveLeaf > &  leaves 
)

◆ BuildGLTFSerializedScene()

void BuildGLTFSerializedScene ( RHIApplication const &  app,
JobSystem jobs,
StringView  path,
FImportedScene scene,
Allocator scratchAlloc,
FSceneBuildOptions const &  buildOptions 
)

◆ BuildMeshBlobJobs()

void BuildMeshBlobJobs ( FSerializedMesh desc,
Vector< FBlobJob > &  blobJobs,
FImportedMesh const &  mesh,
FUUID  skeleton = kNilUUID 
)

◆ BuildSkeletonFromSkin()

FSkeleton BuildSkeletonFromSkin ( cgltf_data data,
cgltf_skin const *  skin,
Vector< uint16_t > &  outRemap,
Allocator alloc 
)

◆ BuildTextureBlobJobs()

void BuildTextureBlobJobs ( FSerializedTexture desc,
Vector< FBlobJob > &  blobJobs,
FTexture &&  texture 
)

◆ ByteGPUSceneBudget()

uint32_t ByteGPUSceneBudget ( size_t  bytes,
size_t  minBytes,
size_t  alignment,
size_t  maxBytes = UINT32_MAX 
)

◆ CommitPreparedBlob()

FBlobRef CommitPreparedBlob ( FBlobSerializer blobSerializer,
FPreparedBlob const &  blob 
)

◆ CommitPreparedBlobJobs()

void CommitPreparedBlobJobs ( FBlobSerializer blobSerializer,
Vector< FPreparedBlob > const &  preparedBlobs 
)

◆ CountGPUSceneBudget()

uint32_t CountGPUSceneBudget ( size_t  count)

◆ FinalizeSceneWriter()

void FinalizeSceneWriter ( FImportedScene scene)

◆ GetSceneJobGrain()

size_t GetSceneJobGrain ( JobSystem const &  jobs,
size_t  count 
)

◆ LoadFSCN()

void LoadFSCN ( FImportedScene scene)

◆ LoadGLTF()

void LoadGLTF ( RHIApplication const &  app,
JobSystem jobs,
StringView  path,
FImportedScene scene,
Allocator scratchAlloc,
FSceneBuildOptions const &  buildOptions 
)

◆ LoadGLTFLineCurve()

void LoadGLTFLineCurve ( const cgltf_primitive prim,
FImportedCurve curve,
Allocator scratchAlloc 
)

◆ LoadGLTFSubmesh()

FImportedMesh LoadGLTFSubmesh ( const cgltf_primitive submesh,
Allocator scratchAlloc,
Vector< uint16_t > const *  jointRemap = nullptr 
)

◆ LoadGLTFTexture()

Optional< FTexture > LoadGLTFTexture ( RHIApplication const &  app,
cgltf_texture texture,
StringView  scenePath,
Allocator scratchAlloc,
bool  gamma = false 
)

◆ LoadScene()

String LoadScene ( Foundation::RHI::RHIApplication const &  app,
JobSystem jobs,
StringView  path,
FImportedScene scene,
Allocator scratchAlloc = GLOBAL_ALLOC,
FSceneBuildOptions const &  buildOptions = FSceneBuildOptions{} 
)

Loads a scene from a path, inferring format from extension. Returns the FSCN path that backs payload blob reads.

◆ LoadTexture()

Optional< FTexture > LoadTexture ( RHIApplication const &  app,
StringView  path,
Allocator scratchAlloc,
bool  gamma = false 
)

◆ MapAnimInterp()

FAnimInterp MapAnimInterp ( cgltf_interpolation_type  interp)

◆ MapAnimPath()

bool MapAnimPath ( cgltf_animation_path_type  path,
FAnimPath out 
)

◆ PrepareBlobJob()

void PrepareBlobJob ( FBlobJob const &  job,
FPreparedBlob prepared 
)

◆ RingGPUSceneBudget()

uint32_t RingGPUSceneBudget ( size_t  count)

Variable Documentation

◆ kGPUSceneByteBudgetSlack

constexpr size_t kGPUSceneByteBudgetSlack = 64u << 10u
staticconstexpr

◆ kGPUSceneDefaultTextureBindings

constexpr uint32_t kGPUSceneDefaultTextureBindings = 2u
staticconstexpr

◆ kGPUSceneEnvMapBindings

constexpr uint32_t kGPUSceneEnvMapBindings = 3u
staticconstexpr

◆ kGPUScenePersistentTexture2DBindings

constexpr uint32_t kGPUScenePersistentTexture2DBindings = 2u
staticconstexpr

◆ kGPUScenePersistentTexture3DBindings

constexpr uint32_t kGPUScenePersistentTexture3DBindings = 2u
staticconstexpr

◆ kGPUSceneRingFrameSlack

constexpr uint32_t kGPUSceneRingFrameSlack = 4u
staticconstexpr

◆ kGPUSceneTextureBindingSlack

constexpr uint32_t kGPUSceneTextureBindingSlack = 8u
staticconstexpr