Added image loader
This commit is contained in:
@@ -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',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
70
src/loaders/ImageLoader/ImageLoader.c
Normal file
70
src/loaders/ImageLoader/ImageLoader.c
Normal 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;
|
||||||
|
}
|
||||||
13
src/loaders/ImageLoader/ImageLoader.h
Normal file
13
src/loaders/ImageLoader/ImageLoader.h
Normal 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);
|
||||||
14
src/mod.c
14
src/mod.c
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user