Added image loader

This commit is contained in:
J3oss
2021-06-25 21:19:14 +02:00
parent d656014c98
commit b084a83644
6 changed files with 119 additions and 1 deletions

View File

@@ -19,6 +19,7 @@ mod_src = [
'src/loaders/TextLoader/TextLoader.c', 'src/loaders/TextLoader/TextLoader.c',
'src/loaders/JSONLoader/JSONLoader.c', 'src/loaders/JSONLoader/JSONLoader.c',
'src/loaders/MeshLoader/MeshLoader.c', 'src/loaders/MeshLoader/MeshLoader.c',
'src/loaders/ImageLoader/ImageLoader.c',
'src/loaders/ShaderLoader/ShaderLoader.c', 'src/loaders/ShaderLoader/ShaderLoader.c',
] ]

View File

@@ -41,3 +41,10 @@ EV_NS_DEF_BEGIN(ShaderLoader)
EV_NS_DEF_FN(ShaderAsset, loadAsset, (AssetHandle, handle), (ShaderAssetStage, stage), (CONST_STR, shader_name), (CONST_STR, entrypoint), (CompiledShaderType, type)) EV_NS_DEF_FN(ShaderAsset, loadAsset, (AssetHandle, handle), (ShaderAssetStage, stage), (CONST_STR, shader_name), (CONST_STR, entrypoint), (CompiledShaderType, type))
EV_NS_DEF_END(ShaderLoader) EV_NS_DEF_END(ShaderLoader)
EV_NS_DEF_BEGIN(ImageLoader)
EV_NS_DEF_FN(ImageAsset, loadAsset, (AssetHandle, handle))
EV_NS_DEF_END(ImageLoader)

View File

@@ -10,7 +10,6 @@ TYPE(JSONAsset, struct {
PTR json_data; PTR json_data;
}) })
TYPE(MeshAsset, struct { TYPE(MeshAsset, struct {
uint32_t vertexBuferSize; uint32_t vertexBuferSize;
uint32_t vertexCount; uint32_t vertexCount;
@@ -21,6 +20,20 @@ TYPE(MeshAsset, struct {
uint32_t *indexData; uint32_t *indexData;
}) })
typedef enum {
EV_IMAGEFORMAT_RGBA8,
EV_IMAGEFORMAT_INVALID
} EvImageFormat;
TYPE(ImageAsset, struct {
uint32_t bufferSize;
uint32_t width;
uint32_t height;
EvImageFormat format;
PTR data;
})
TYPE(ShaderAssetStage, enum { TYPE(ShaderAssetStage, enum {
EV_SHADERASSETSTAGE_VERTEX, EV_SHADERASSETSTAGE_VERTEX,
EV_SHADERASSETSTAGE_FRAGMENT, EV_SHADERASSETSTAGE_FRAGMENT,

View File

@@ -0,0 +1,70 @@
#define TYPE_MODULE evmod_assets
#include <evol/meta/type_import.h>
#include <evol/common/ev_log.h>
#include <evjson.h>
#include "../LoaderCommon.h"
#include "ImageLoader.h"
EvImageFormat
strToFormat(
evstr_ref str_ref);
ImageAsset
ev_imageloader_loadasset(
AssetHandle handle)
{
const Asset *asset = ev_asset_getfromhandle(handle);
uint32_t jsonLength = ((U32*)asset->data)[0];
uint32_t blobLength = ((U32*)asset->data)[1];
const char *json = (PTR)(&((U32*)asset->data)[2]);
const void *data = json + jsonLength;
evjson_t *evjs = evjs_init();
evjs_loadjson(evjs, json);
evstr_ref str_ref = evjs_get(evjs, "format")->as_str;
ImageAsset inter = {
.bufferSize = evjs_get(evjs, "buffer_size")->as_num,
.height = evjs_get(evjs, "height")->as_num,
.width = evjs_get(evjs, "width")->as_num,
.format = strToFormat(str_ref),
.data = data,
};
evjs_fini(evjs);
ev_asset_markas(handle, LoaderData.assetType, &inter);
return inter;
}
void
ev_imageloader_imageasset_destr(
ImageAsset image)
{
}
void
ev_imageloader_setassettype(
GenericHandle type)
{
LoaderData.assetType = type;
}
EvImageFormat
strToFormat(
evstr_ref str_ref)
{
if(!strncmp(str_ref.data + str_ref.offset, "RGBA8", str_ref.len))
return EV_IMAGEFORMAT_RGBA8;
else
return EV_IMAGEFORMAT_INVALID;
}

View File

@@ -0,0 +1,13 @@
#pragma once
ImageAsset
ev_imageloader_loadasset(
AssetHandle handle);
void
ev_imageloader_imageasset_destr(
ImageAsset image);
void
ev_imageloader_setassettype(
GenericHandle type);

View File

@@ -13,6 +13,7 @@
#include "loaders/JSONLoader/JSONLoader.h" #include "loaders/JSONLoader/JSONLoader.h"
#include "loaders/MeshLoader/MeshLoader.h" #include "loaders/MeshLoader/MeshLoader.h"
#include "loaders/ShaderLoader/ShaderLoader.h" #include "loaders/ShaderLoader/ShaderLoader.h"
#include "loaders/ImageLoader/ImageLoader.h"
#define AssetSysCheck(errmsg_fmt, vars, ...) do { \ #define AssetSysCheck(errmsg_fmt, vars, ...) do { \
assetsys_error_t res = __VA_ARGS__; \ assetsys_error_t res = __VA_ARGS__; \
@@ -63,6 +64,15 @@ onRemoveJSONAsset(
} }
} }
// void
// onRemoveImageAsset(
// ECSQuery query)
// {
// ImageAsset *assets = ECS->getQueryColumn(query, sizeof(ImageAsset), 1);
// for(int i = 0; i < ECS->getQueryMatchCount(query); i++) {
// ev_imageloader_imageasset_destr(assets[i]);
// }
// }
// void // void
// onRemoveMeshAsset( // onRemoveMeshAsset(
@@ -107,6 +117,8 @@ EV_CONSTRUCTOR
ev_jsonloader_setassettype(AssetECS->registerComponent("JSONAsset", sizeof(JSONAsset), EV_ALIGNOF(JSONAsset))); ev_jsonloader_setassettype(AssetECS->registerComponent("JSONAsset", sizeof(JSONAsset), EV_ALIGNOF(JSONAsset)));
AssetECS->setOnRemoveTrigger("JSONAssetOnRemove", "JSONAsset", onRemoveJSONAsset); AssetECS->setOnRemoveTrigger("JSONAssetOnRemove", "JSONAsset", onRemoveJSONAsset);
ev_jsonloader_setassettype(AssetECS->registerComponent("ImageAsset", sizeof(ImageAsset), EV_ALIGNOF(ImageAsset)));
// AssetECS->setOnRemoveTrigger("ImageAssetOnRemove", "ImageAsset", onRemoveImageAsset);
ev_jsonloader_setassettype(AssetECS->registerComponent("MeshAsset", sizeof(MeshAsset), EV_ALIGNOF(MeshAsset))); ev_jsonloader_setassettype(AssetECS->registerComponent("MeshAsset", sizeof(MeshAsset), EV_ALIGNOF(MeshAsset)));
// AssetECS->setOnRemoveTrigger("MeshAssetOnRemove", "MeshAsset", onRemoveMeshAsset); // AssetECS->setOnRemoveTrigger("MeshAssetOnRemove", "MeshAsset", onRemoveMeshAsset);
@@ -257,5 +269,7 @@ EV_BINDINGS
EV_NS_BIND_FN(ShaderLoader, loadAsset, ev_shaderloader_loadasset); EV_NS_BIND_FN(ShaderLoader, loadAsset, ev_shaderloader_loadasset);
EV_NS_BIND_FN(ImageLoader, loadAsset, ev_imageloader_loadasset);
return 0; return 0;
} }