83 Resources::ResourceId
CreateResource(
const IO::URI& res,
const void* loadInfo,
SizeT loadInfoSize,
const Util::StringAtom& tag, std::function<
void(
const Resources::ResourceId)> success, std::function<
void(
const Resources::ResourceId)> failed,
bool immediate,
bool stream);
85 Resources::ResourceId
CreateResource(
const IO::URN& res,
const void* loadInfo,
SizeT loadInfoSize,
const Util::StringAtom& tag, std::function<
void(
const Resources::ResourceId)> success, std::function<
void(
const Resources::ResourceId)> failed,
bool immediate,
bool stream);
91 void CreateListener(
const Resources::ResourceId res, std::function<
void(
const Resources::ResourceId)> success, std::function<
void(
const Resources::ResourceId)> failed);
96 const uint32_t
GetUsage(
const Resources::ResourceId
id)
const;
106 const bool HasResource(
const Resources::ResourceId
id)
const;
114 void ReloadResource(
const Resources::ResourceId&
id, std::function<
void(
const Resources::ResourceId)> success, std::function<
void(
const Resources::ResourceId)> failed);
117 void SetMinLod(
const Resources::ResourceId&
id,
const float lod,
bool immediate);
162 :
id(InvalidResourceUnknownId)
222 loader->
streamDatas[
id.loaderInstanceId] = this->streamData;
223 loader->
loadStates[
id.loaderInstanceId] = this->loadState;
224 loader->
states[
id.loaderInstanceId] = this->state;
225 loader->
resources[
id.loaderInstanceId] = this->id;
243 Resources::ResourceId
id;
258 std::function<void(
const Resources::ResourceId)>
success;
259 std::function<void(
const Resources::ResourceId)>
failed;
278 virtual void Unload(
const Resources::ResourceId
id) = 0;
289 void EnqueueJob(
const std::function<
void()>& func);
353 return this->
names[
id.loaderInstanceId];
362 return this->
usage[
id.loaderInstanceId];
371 return this->
tags[
id.loaderInstanceId];
380 return this->
states[
id.loaderInstanceId];
386inline const Resources::ResourceId
390 if (i ==
InvalidIndex)
return Resources::ResourceId::Invalid();
409 return this->
names.Size() > (
SizeT)
id.loaderInstanceId;
The common base class of Nebula.
Definition refcounted.h:38
An URI object can split a Uniform Resource Identifier string into its components or build a string fr...
Definition uri.h:67
A URN (Uniform Resource Name) is a URI (Uniform Resource Identifier) that uses the "urn" scheme.
Definition urn.h:24
Nebula's smart pointer class which manages the life time of RefCounted objects.
Definition ptr.h:38
State
Definition resource.h:26
Ptr< ResourceLoaderThread > streamerThread
Definition resourceloader.h:310
Util::FixedArray< ResourceId > resources
Definition resourceloader.h:331
Util::FixedArray< Resources::ResourceName > names
Definition resourceloader.h:326
void EnqueueJob(const std::function< void()> &func)
Issue async job.
Definition resourceloader.cc:337
Util::Array< _PendingResourceUnload > pendingUnloads
Definition resourceloader.h:316
Util::Dictionary< Resources::ResourceName, uint32_t > ids
Definition resourceloader.h:323
__DeclareAbstractClass(ResourceLoader)
Util::FixedArray< Util::StringAtom > tags
Definition resourceloader.h:328
IO::URI placeholderResourceName
these types need to be properly initiated in a subclass Setup function
Definition resourceloader.h:302
friend ResourceLoadOutput _LoadInternal(ResourceLoader *loader, ResourceLoadJob res)
Definition resourceloader.cc:356
std::function< void()> postJobFunc
Definition resourceloader.h:312
virtual void Setup()
setup resource loader, initiates the placeholder and error resources if valid, so don't forget to run...
Definition resourceloader.cc:43
Resources::ResourceId placeholderResourceId
Definition resourceloader.h:305
Util::StringAtom streamerThreadName
Definition resourceloader.h:313
void DiscardByTag(const Util::StringAtom &tag)
discard all resources associated with a tag
Definition resourceloader.cc:698
void DiscardResource(const Resources::ResourceId id)
discard container
Definition resourceloader.cc:662
Util::FixedArray< _StreamData > streamDatas
Definition resourceloader.h:335
void RunCallbacks(Resource::State status, const Resources::ResourceId id)
run callbacks
Definition resourceloader.cc:318
Util::Array< ResourceLoadJob > dependentJobs
Definition resourceloader.h:321
uint32_t uniqueResourceId
Definition resourceloader.h:336
Threading::SafeQueue< _PendingStreamLod > pendingStreamQueue
Definition resourceloader.h:318
Resources::ResourceId CreateResource(const IO::URI &res, const void *loadInfo, SizeT loadInfoSize, const Util::StringAtom &tag, std::function< void(const Resources::ResourceId)> success, std::function< void(const Resources::ResourceId)> failed, bool immediate, bool stream)
create a container with a tag associated with it, if no tag is provided, the resource will be untagge...
Definition resourceloader.cc:456
const Util::StringAtom GetTag(const Resources::ResourceId id) const
get resource tag was first registered with
Definition resourceloader.h:369
bool async
Definition resourceloader.h:308
int32_t uniqueId
id in resource manager
Definition resourceloader.h:339
ResourceLoader()
constructor
Definition resourceloader.cc:20
Util::FixedArray< Resource::State > states
Definition resourceloader.h:329
static const uint32_t ResourceIndexGrow
Definition resourceloader.h:263
const Util::Dictionary< Resources::ResourceName, Ids::Id32 > & GetResources() const
get the dictionary of all resource-id pairs
Definition resourceloader.h:398
virtual void RequestLOD(const Ids::Id32 entry, float lod) const
Set lod factor for resource.
Definition resourceloader.cc:141
Threading::SafeQueue< ResourceLoadOutput > loadOutputs
Definition resourceloader.h:320
Resources::ResourceId GetPlaceholder(const Resources::ResourceName &name)
get placeholder based on resource name
Definition resourceloader.cc:346
void CreateListener(const Resources::ResourceId res, std::function< void(const Resources::ResourceId)> success, std::function< void(const Resources::ResourceId)> failed)
Create new listener on resource.
Definition resourceloader.cc:723
Util::Array< IndexT > pendingLoads
Definition resourceloader.h:315
Util::FixedArray< LoadState > loadStates
Definition resourceloader.h:330
const int32_t & GetUniqueId() const
get the global identifier for this pool
Definition resourceloader.h:416
Threading::ThreadId creatorThread
Definition resourceloader.h:343
friend class ResourceServer
Definition resourceloader.h:231
Resources::ResourceId failResourceId
Definition resourceloader.h:306
virtual ResourceInitOutput InitializeResource(const ResourceLoadJob &job, const Ptr< IO::Stream > &stream)=0
Initialize and create the resource, optionally load if no subresource management is necessary.
virtual void UpdateLoaderSyncState()
Update loader internal state.
Definition resourceloader.cc:99
friend void DispatchJob(ResourceLoader *loader, const ResourceLoader::ResourceLoadJob &job)
Definition resourceloader.cc:163
virtual void LoadFallbackResources()
load placeholder and error resources
Definition resourceloader.cc:71
void ClearPendingUnloads()
clear pending unloads
Definition resourceloader.cc:187
Util::FixedArray< _PendingResourceLoad > loads
Definition resourceloader.h:333
void SetMinLod(const Resources::ResourceId &id, const float lod, bool immediate)
begin updating a resources lod
Definition resourceloader.cc:811
const Resources::ResourceId GetId(const Resources::ResourceName &name) const
get resource id by name, use with care
Definition resourceloader.h:387
virtual ResourceInitOutput ReinitializeResource(const ResourceLoadJob &job, const Ptr< IO::Stream > &stream)
perform a reload
Definition resourceloader.cc:118
void SetupIdFromEntry(const Ids::Id32 entry, ResourceId &cacheEntry)
Construct resource ID based on loader entry.
Definition resourceloader.cc:292
Util::Array< _PendingStreamLod > pendingStreamLods
Definition resourceloader.h:317
virtual ResourceStreamOutput StreamResource(const ResourceLoadJob &job)
Stream resource.
Definition resourceloader.cc:108
const bool HasResource(const Resources::ResourceId id) const
returns true if pool has resource
Definition resourceloader.h:407
virtual void Discard()
discard resource loader
Definition resourceloader.cc:61
Util::FixedArray< _PlaceholderResource > placeholders
Definition resourceloader.h:296
virtual ~ResourceLoader()
destructor
Definition resourceloader.cc:33
const Resources::ResourceName & GetName(const Resources::ResourceId id) const
get resource name
Definition resourceloader.h:351
virtual uint LodMask(const _StreamData &stream, float lod, bool async) const
Create load mask based on LOD. This will be used to determine if the resoure is fully loaded.
Definition resourceloader.cc:132
Util::FixedArray< uint32_t > usage
Definition resourceloader.h:327
Util::StringAtom loaderExtension
Definition resourceloader.h:307
void ReloadResource(const Resources::ResourceName &res, std::function< void(const Resources::ResourceId)> success, std::function< void(const Resources::ResourceId)> failed)
reload resource using resource name
Definition resourceloader.cc:754
Ids::IdPool resourceInstanceIndexPool
Definition resourceloader.h:324
Util::FixedArray< Util::Array< _Callbacks > > callbacks
Definition resourceloader.h:332
const Resource::State GetState(const Resources::ResourceId id) const
get resource state
Definition resourceloader.h:378
Util::FixedArray< _LoadMetaData > metaData
Definition resourceloader.h:334
virtual void Unload(const Resources::ResourceId id)=0
unload resource (overload to implement resource deallocation)
Threading::CriticalSection asyncSection
async section to sync callbacks and pending list with thread
Definition resourceloader.h:342
std::function< void()> preJobFunc
Definition resourceloader.h:311
const uint32_t GetUsage(const Resources::ResourceId id) const
get resource usage from resource id
Definition resourceloader.h:360
friend void ApplyLoadOutput(ResourceLoader *loader, const ResourceLoader::ResourceLoadOutput &output)
Definition resourceloader.cc:150
IO::URI failResourceName
Definition resourceloader.h:303
Definition resourceloaderthread.h:23
Thread-safe version of Util::Queue.
Definition safequeue.h:27
Nebula's dynamic array class.
Definition array.h:61
A collection of key/value pairs with quick value retrieval by key at roughly O(log n).
Definition dictionary.h:35
Implements a fixed size one-dimensional array.
Definition fixedarray.h:20
A StringAtom.
Definition stringatom.h:22
const char * Value() const
get contained string as char ptr (fast)
Definition stringatom.h:362
Nebula's universal string class.
Definition string.h:50
uint32_t Id32
Definition id.h:138
A resource is a container for some type of file which is loaded.
Definition resource.cc:9
LoadFlags
Definition resourceloader.h:51
@ Update
Definition resourceloader.h:54
@ None
Definition resourceloader.h:52
@ Reload
Definition resourceloader.h:55
@ Create
Definition resourceloader.h:53
Util::StringAtom ResourceName
Definition resourceid.h:33
pthread_t ThreadId
Definition linuxthreadid.h:15
#define __ImplementEnumBitOperators(type)
callback functions to run when an associated resource is loaded (can be stacked)
Definition resourceloader.h:257
std::function< void(const Resources::ResourceId)> success
Definition resourceloader.h:258
std::function< void(const Resources::ResourceId)> failed
Definition resourceloader.h:259
struct for pending resources which are about to be loaded
Definition resourceloader.h:121
Ids::Id32 entry
Definition resourceloader.h:122
bool inflight
Definition resourceloader.h:124
IndexT frame
Definition resourceloader.h:127
bool reload
Definition resourceloader.h:126
bool immediate
Definition resourceloader.h:125
float lod
Definition resourceloader.h:128
_PendingResourceLoad()
Definition resourceloader.h:131
LoadFlags flags
Definition resourceloader.h:129
Util::StringAtom tag
Definition resourceloader.h:123
Definition resourceloader.h:251
Resources::ResourceId resourceId
Definition resourceloader.h:252
_PendingStreamLod()
Definition resourceloader.h:247
bool immediate
Definition resourceloader.h:245
Resources::ResourceId id
Definition resourceloader.h:243
float lod
Definition resourceloader.h:244
Definition resourceloader.h:292
Resources::ResourceId placeholderId
Definition resourceloader.h:294
IO::URI placeholderName
Definition resourceloader.h:293
Definition resourceloader.h:141
_StreamData()
Definition resourceloader.h:145
Ptr< IO::Stream > stream
Definition resourceloader.h:142
_StreamData(const Ptr< IO::Stream > &stream, void *data)
Definition resourceloader.h:150
void * data
Definition resourceloader.h:143
Definition resourceloader.h:174
uint loadedBits
Definition resourceloader.h:177
uint requestedBits
Definition resourceloader.h:175
uint pendingBits
Definition resourceloader.h:176
Definition resourceloader.h:157
ResourceInitOutput()
Definition resourceloader.h:161
ResourceUnknownId id
Definition resourceloader.h:158
_StreamData loaderStreamData
Definition resourceloader.h:159
Definition resourceloader.h:181
LoadState loadState
Definition resourceloader.h:186
float lod
Definition resourceloader.h:190
_StreamData streamData
Definition resourceloader.h:187
bool immediate
Definition resourceloader.h:189
static ResourceLoadJob FromPending(ResourceLoader *loader, IndexT frameIndex, const _PendingResourceLoad &load)
Definition resourceloader.h:194
IndexT frameIndex
Definition resourceloader.h:191
LoadFlags flags
Definition resourceloader.h:192
Util::String name
Definition resourceloader.h:182
Resource::State state
Definition resourceloader.h:184
Util::String tag
Definition resourceloader.h:183
_LoadMetaData metadata
Definition resourceloader.h:188
ResourceId id
Definition resourceloader.h:185
Definition resourceloader.h:213
LoadState loadState
Definition resourceloader.h:215
void UpdateLoaderState(ResourceLoader *loader) const
Definition resourceloader.h:220
ResourceId id
Definition resourceloader.h:217
Resource::State state
Definition resourceloader.h:216
ResourceLoadJob remainderJob
Definition resourceloader.h:218
_StreamData streamData
Definition resourceloader.h:214
Definition resourceloader.h:168
uint loadedBits
Definition resourceloader.h:169
uint pendingBits
Definition resourceloader.h:170
Definition resourceid.h:37
static const int InvalidIndex
Definition types.h:47
int SizeT
Definition types.h:42
unsigned int uint
Definition types.h:33
int IndexT
Definition types.h:41