Working on the new refactor of primitive and shader

This commit is contained in:
2021-11-11 09:47:42 -08:00
parent ada6de9723
commit e4222866ef
49 changed files with 635 additions and 440 deletions

View File

@ -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"

View File

@ -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;

View File

@ -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);