Roughly planning asset locking

This commit is contained in:
2025-09-01 22:07:36 -05:00
parent 14c41d33a7
commit f915a4208b
3 changed files with 74 additions and 0 deletions

34
src/asset/asset.h Normal file
View File

@@ -0,0 +1,34 @@
/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#pragma once
#include "assetpaletteimage.h"
#include "util/reflist.h"
#define ASSET_HEADER_SIZE 3
#define ASSET_REFERENCE_COUNT_MAX 8
typedef enum {
ASSET_STATE_NOT_LOADED,
ASSET_STATE_LOADING,
ASSET_STATE_LOADED,
ASSET_STATE_ERROR,
} assetstate_t;
typedef enum {
ASSET_TYPE_UNKNOWN,
ASSET_TYPE_PALETTE_IMAGE,
} assettype_t;
typedef struct {
const char_t filename[FILENAME_MAX];
ref_t refListArray[ASSET_REFERENCE_COUNT_MAX];
reflist_t refList;
assetstate_t state;
assettype_t type;
void *data;
} asset_t;

View File

@@ -9,6 +9,9 @@
#include "error/error.h"
#include <zip.h>
#include "display/texture/texture.h"
#include "asset.h"
#define ASSET_MANAGER_ASSET_COUNT_MAX 256
#if ASSET_TYPE == wad
#else
@@ -31,6 +34,8 @@ static const char_t ASSET_MANAGER_SEARCH_PATHS[][FILENAME_MAX] = {
typedef struct {
int32_t nothing;
zip_t *zip;
asset_t assets[ASSET_MANAGER_ASSET_COUNT_MAX];
uint8_t assetCount;
} assetmanager_t;
extern assetmanager_t ASSET_MANAGER;
@@ -40,6 +45,24 @@ extern assetmanager_t ASSET_MANAGER;
*/
errorret_t assetManagerInit(void);
/**
* Gets and requests a lock on a given asset. Locking an asset will prevent it
* from being unloaded until it is unlocked.
*
* @param filename The filename of the asset to lock.
* @param outRef A pointer to store the locked reference ID in.
* @return A pointer to the locked asset, or NULL if the asset could not be
*/
asset_t * assetManagerLock(const char_t *filename, ref_t *outRef);
/**
* Unlocks a previously locked asset reference.
*
* @param asset The asset to unlock the reference from.
* @param ref The reference ID to unlock.
*/
void assetManagerUnlock(const ref_t ref);
/**
* Disposes/cleans up the asset system.
*/

View File

@@ -0,0 +1,17 @@
/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#pragma once
#include "dusk.h"
#define ASSET_PALETTE_IMAGE_SIZE_MAX (256*256)
typedef struct {
uint32_t width;
uint32_t height;
uint8_t data[ASSET_PALETTE_IMAGE_SIZE_MAX];
} assetpaletteimage_t;