Working on the new refactor of primitive and shader
This commit is contained in:
@ -7,7 +7,7 @@
|
||||
|
||||
#pragma once
|
||||
#include "../libs.h"
|
||||
#include "../display/shader.h"
|
||||
#include "../display/shader/shader.h"
|
||||
#include "../display/texture.h"
|
||||
#include "../display/font.h"
|
||||
|
||||
|
@ -42,6 +42,7 @@ void assetManagerInit(assetmanager_t *manager) {
|
||||
manager->itemCount = 0;
|
||||
manager->finished = false;
|
||||
manager->holderCount = 0;
|
||||
manager->running = false;
|
||||
}
|
||||
|
||||
float assetManagerProgressGet(assetmanager_t *manager) {
|
||||
@ -127,6 +128,8 @@ void assetManagerDispose(assetmanager_t *man) {
|
||||
|
||||
// Thread Management
|
||||
void assetManagerStart(assetmanager_t *manager) {
|
||||
if(manager->running) return;
|
||||
manager->running = true;
|
||||
threadStart(&manager->thread);
|
||||
}
|
||||
|
||||
@ -146,7 +149,7 @@ int32_t _assetManagerThread(thread_t *thread) {
|
||||
// Only bother with ASYNC items
|
||||
if(definition->loadAsync == NULL) continue;
|
||||
|
||||
// Are we already loading or already tried to load?
|
||||
// Are we already loading, not ready, or already tried to load?
|
||||
if(item->state != ASSET_MANAGER_STATE_PENDING) continue;
|
||||
|
||||
// Begin loading
|
||||
@ -162,6 +165,7 @@ int32_t _assetManagerThread(thread_t *thread) {
|
||||
}
|
||||
|
||||
manager->finished = assetManagerProgressGet(manager) >= 1.0f;
|
||||
manager->running = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -172,10 +176,21 @@ void assetManagerUpdate(assetmanager_t *manager) {
|
||||
assetmanagerloaderdefinition_t *definition;
|
||||
bool result;
|
||||
|
||||
// Autostart
|
||||
if(assetManagerProgressGet(manager) < 1.0f && !manager->running) {
|
||||
assetManagerStart(manager);
|
||||
}
|
||||
|
||||
for(i = 0; i < manager->itemCount; i++) {
|
||||
item = manager->items + i;
|
||||
definition = ASSET_MANAGER_LOADERS + item->type;
|
||||
|
||||
// Update not ready state (Synchronously)
|
||||
if(item->state == ASSET_MANAGER_STATE_NOT_READY) {
|
||||
item->state = ASSET_MANAGER_STATE_PENDING;
|
||||
continue;
|
||||
}
|
||||
|
||||
// If requires ASYNC loading, then confirm it has finished loading.
|
||||
if(definition->loadAsync != NULL) {
|
||||
if(item->state != ASSET_MANAGER_STATE_ASYNC_DONE) continue;
|
||||
@ -217,7 +232,7 @@ assetmanageritem_t * assetManagerItemGet(assetmanager_t *man, char *key) {
|
||||
assetmanageritem_t * assetManagerItemAdd(assetmanager_t *manager, char *key) {
|
||||
// Check if key already exists.
|
||||
assetmanageritem_t *item = manager->items + manager->itemCount++;
|
||||
item->state = ASSET_MANAGER_STATE_PENDING;
|
||||
item->state = ASSET_MANAGER_STATE_NOT_READY;
|
||||
memcpy(item->key, key, strlen(key) + 1);
|
||||
item->holderCount = 0x00;
|
||||
return item;
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "../display/font.h"
|
||||
#include "../display/texture.h"
|
||||
#include "../display/scaledtexture.h"
|
||||
#include "../display/shader.h"
|
||||
#include "../display/shader/shader.h"
|
||||
#include "../engine/thread.h"
|
||||
#include "../util/array.h"
|
||||
#include "asset.h"
|
||||
@ -21,13 +21,14 @@
|
||||
|
||||
#define ASSET_MANAGER_HOLDERS_MAX 8
|
||||
|
||||
#define ASSET_MANAGER_STATE_PENDING 0x00
|
||||
#define ASSET_MANAGER_STATE_ASYNC_LOADING 0x01
|
||||
#define ASSET_MANAGER_STATE_ASYNC_ERROR 0x02
|
||||
#define ASSET_MANAGER_STATE_ASYNC_DONE 0x03
|
||||
#define ASSET_MANAGER_STATE_SYNC_LOADING 0x04
|
||||
#define ASSET_MANAGER_STATE_SYNC_ERROR 0x05
|
||||
#define ASSET_MANAGER_STATE_SYNC_DONE 0x06
|
||||
#define ASSET_MANAGER_STATE_NOT_READY 0x00
|
||||
#define ASSET_MANAGER_STATE_PENDING 0x01
|
||||
#define ASSET_MANAGER_STATE_ASYNC_LOADING 0x02
|
||||
#define ASSET_MANAGER_STATE_ASYNC_ERROR 0x03
|
||||
#define ASSET_MANAGER_STATE_ASYNC_DONE 0x04
|
||||
#define ASSET_MANAGER_STATE_SYNC_LOADING 0x05
|
||||
#define ASSET_MANAGER_STATE_SYNC_ERROR 0x06
|
||||
#define ASSET_MANAGER_STATE_SYNC_DONE 0x07
|
||||
|
||||
#define ASSET_MANAGER_TYPE_TEXTURE 0x00
|
||||
#define ASSET_MANAGER_TYPE_FONT 0x01
|
||||
@ -105,6 +106,7 @@ typedef struct {
|
||||
uint8_t itemCount;
|
||||
assetmanagerowner_t holders[ASSET_MANAGER_HOLDERS_MAX];
|
||||
uint8_t holderCount;
|
||||
bool running;
|
||||
} assetmanager_t;
|
||||
|
||||
// Constants
|
||||
@ -126,7 +128,7 @@ void assetManagerInit(assetmanager_t *manager);
|
||||
*/
|
||||
float assetManagerProgressGet(assetmanager_t *manager);
|
||||
|
||||
uint8_t assetManagerHolderCreate(assetmanager_t *man);
|
||||
assetmanagerowner_t assetManagerHolderCreate(assetmanager_t *man);
|
||||
void assetManagerHolderRelease(assetmanager_t *man, uint8_t hold);
|
||||
void assetManagerDisposeReleased(assetmanager_t *man);
|
||||
void assetManagerDispose(assetmanager_t *man);
|
||||
|
Reference in New Issue
Block a user