Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
Divide::ResourceCache Class Referencefinal

#include <ResourceCache.h>

+ Inheritance diagram for Divide::ResourceCache:

Static Public Member Functions

static void Init (RenderAPI renderAPI, PlatformContext &context)
 
static void Stop ()
 
static void OnFrameStart ()
 
static void OnFrameEnd ()
 
static void PrintLeakedResources ()
 
template<typename T >
requires std::is_base_of_v<CachedResource, T>
static T * Get (Handle< T > handle)
 
template<typename T >
requires std::is_base_of_v<CachedResource, T>
static void Destroy (Handle< T > &handle, const bool immediate)
 
template<typename T >
requires std::is_base_of_v<CachedResource, T>
static Handle< T > LoadResource (const ResourceDescriptor< T > &descriptor, bool &wasInCache, std::atomic_uint &taskCounter)
 
template<typename T >
requires std::is_base_of_v<CachedResource, T>
static Handle< T > RetrieveFromCache (Handle< T > handle)
 

Static Protected Member Functions

static void RegisterPool (ResourcePoolBase *pool)
 

Static Private Member Functions

template<typename T >
requires std::is_base_of_v<CachedResource, T>
static Handle< T > RetrieveOrAllocateHandle (size_t descriptorHash, bool &wasInCache)
 
template<typename T >
requires std::is_base_of_v<Resource, T>
static ResourcePtr< T > AllocateAndCommit (Handle< T > handle, const ResourceDescriptor< T > &descriptor)
 
template<typename T >
requires std::is_base_of_v<Resource, T>
static ResourcePtr< T > Allocate (Handle< T > handle, const ResourceDescriptor< T > &descriptor, size_t descriptorHash)
 
template<typename T >
requires std::is_base_of_v<Resource, T>
static ResourcePtr< T > AllocateInternal (const ResourceDescriptor< T > &descriptor)
 
template<typename T >
requires std::is_base_of_v<Resource, T>
static void Build (ResourcePtr< T > ptr, const ResourceDescriptor< T > &descriptor)
 
template<>
ResourcePtr< ShaderProgramAllocateInternal (const ResourceDescriptor< ShaderProgram > &descriptor)
 
template<>
ResourcePtr< TextureAllocateInternal (const ResourceDescriptor< Texture > &descriptor)
 

Static Private Attributes

static Mutex s_poolLock
 
static vector< ResourcePoolBase * > s_resourcePools
 
static PlatformContexts_context = nullptr
 
static RenderAPI s_renderAPI = RenderAPI::COUNT
 
static bool s_enabled = false
 

Friends

struct ResourcePoolBase
 

Additional Inherited Members

- Private Member Functions inherited from Divide::NonMovable
 NonMovable (NonMovable &&)=delete
 
NonMovableoperator= (NonMovable &&)=delete
 
 NonMovable (const NonMovable &)=default
 
NonMovableoperator= (const NonMovable &)=default
 
 NonMovable ()=default
 
 ~NonMovable ()=default
 
- Private Member Functions inherited from Divide::NonCopyable
 NonCopyable (const NonCopyable &)=delete
 
NonCopyableoperator= (const NonCopyable &)=delete
 
 NonCopyable (NonCopyable &&)=default
 
NonCopyableoperator= (NonCopyable &&)=default
 
 NonCopyable ()=default
 
 ~NonCopyable ()=default
 

Detailed Description

Definition at line 62 of file ResourceCache.h.

Member Function Documentation

◆ Allocate()

template<typename T >
requires std::is_base_of_v<Resource, T>
ResourcePtr< T > Divide::ResourceCache::Allocate ( Handle< T >  handle,
const ResourceDescriptor< T > &  descriptor,
size_t  descriptorHash 
)
staticprivate

Definition at line 529 of file ResourceCache.inl.

◆ AllocateAndCommit()

template<typename T >
requires std::is_base_of_v<Resource, T>
ResourcePtr< T > Divide::ResourceCache::AllocateAndCommit ( Handle< T >  handle,
const ResourceDescriptor< T > &  descriptor 
)
staticprivate

Definition at line 475 of file ResourceCache.inl.

◆ AllocateInternal() [1/3]

template<>
ResourcePtr< ShaderProgram > Divide::ResourceCache::AllocateInternal ( const ResourceDescriptor< ShaderProgram > &  descriptor)
inlinestaticprivate

Definition at line 440 of file ResourceCache.inl.

◆ AllocateInternal() [2/3]

template<typename T >
requires std::is_base_of_v<Resource, T>
ResourcePtr< T > Divide::ResourceCache::AllocateInternal ( const ResourceDescriptor< T > &  descriptor)
staticprivate

Definition at line 440 of file ResourceCache.inl.

◆ AllocateInternal() [3/3]

template<>
ResourcePtr< Texture > Divide::ResourceCache::AllocateInternal ( const ResourceDescriptor< Texture > &  descriptor)
inlinestaticprivate

Definition at line 440 of file ResourceCache.inl.

◆ Build()

template<typename T >
requires std::is_base_of_v<Resource, T>
void Divide::ResourceCache::Build ( ResourcePtr< T >  ptr,
const ResourceDescriptor< T > &  descriptor 
)
staticprivate

Definition at line 490 of file ResourceCache.inl.

◆ Destroy()

template<typename T >
requires std::is_base_of_v<CachedResource, T>
void Divide::ResourceCache::Destroy ( Handle< T > &  handle,
const bool  immediate 
)
static

Definition at line 419 of file ResourceCache.inl.

◆ Get()

template<typename T >
requires std::is_base_of_v<CachedResource, T>
T * Divide::ResourceCache::Get ( Handle< T >  handle)
static

Definition at line 403 of file ResourceCache.inl.

◆ Init()

void Divide::ResourceCache::Init ( RenderAPI  renderAPI,
PlatformContext context 
)
static

Definition at line 88 of file ResourceCache.cpp.

◆ LoadResource()

template<typename T >
requires std::is_base_of_v<CachedResource, T>
Handle< T > Divide::ResourceCache::LoadResource ( const ResourceDescriptor< T > &  descriptor,
bool &  wasInCache,
std::atomic_uint &  taskCounter 
)
static

Check cache first to avoid loading the same resource twice (or if we have stale, expired pointers in there)

Definition at line 557 of file ResourceCache.inl.

◆ OnFrameEnd()

void Divide::ResourceCache::OnFrameEnd ( )
static

Definition at line 124 of file ResourceCache.cpp.

◆ OnFrameStart()

void Divide::ResourceCache::OnFrameStart ( )
static

Definition at line 116 of file ResourceCache.cpp.

◆ PrintLeakedResources()

void Divide::ResourceCache::PrintLeakedResources ( )
static

Definition at line 106 of file ResourceCache.cpp.

◆ RegisterPool()

void Divide::ResourceCache::RegisterPool ( ResourcePoolBase pool)
staticprotected

Definition at line 82 of file ResourceCache.cpp.

◆ RetrieveFromCache()

template<typename T >
requires std::is_base_of_v<CachedResource, T>
Handle< T > Divide::ResourceCache::RetrieveFromCache ( Handle< T >  handle)
static

Definition at line 357 of file ResourceCache.inl.

◆ RetrieveOrAllocateHandle()

template<typename T >
requires std::is_base_of_v<CachedResource, T>
Handle< T > Divide::ResourceCache::RetrieveOrAllocateHandle ( size_t  descriptorHash,
bool &  wasInCache 
)
staticprivate

Definition at line 375 of file ResourceCache.inl.

◆ Stop()

void Divide::ResourceCache::Stop ( )
static

Definition at line 95 of file ResourceCache.cpp.

Friends And Related Function Documentation

◆ ResourcePoolBase

friend struct ResourcePoolBase
friend

Definition at line 85 of file ResourceCache.h.

Member Data Documentation

◆ s_context

PlatformContext * Divide::ResourceCache::s_context = nullptr
staticprivate

Definition at line 107 of file ResourceCache.h.

◆ s_enabled

bool Divide::ResourceCache::s_enabled = false
staticprivate

Definition at line 109 of file ResourceCache.h.

◆ s_poolLock

Mutex Divide::ResourceCache::s_poolLock
staticprivate

Definition at line 104 of file ResourceCache.h.

◆ s_renderAPI

RenderAPI Divide::ResourceCache::s_renderAPI = RenderAPI::COUNT
staticprivate

Definition at line 108 of file ResourceCache.h.

◆ s_resourcePools

vector< ResourcePoolBase * > Divide::ResourceCache::s_resourcePools
staticprivate

Definition at line 105 of file ResourceCache.h.


The documentation for this class was generated from the following files: