@@ -18,6 +18,7 @@ mod_src = [
|
||||
# Loaders
|
||||
'src/loaders/TextLoader/TextLoader.c',
|
||||
'src/loaders/JSONLoader/JSONLoader.c',
|
||||
'src/loaders/MeshLoader/MeshLoader.c',
|
||||
'src/loaders/ShaderLoader/ShaderLoader.c',
|
||||
]
|
||||
|
||||
|
||||
@@ -25,6 +25,13 @@ EV_NS_DEF_FN(JSONAsset, loadAsset, (AssetHandle, handle))
|
||||
EV_NS_DEF_END(JSONLoader)
|
||||
|
||||
|
||||
EV_NS_DEF_BEGIN(MeshLoader)
|
||||
|
||||
EV_NS_DEF_FN(MeshAsset, loadAsset, (AssetHandle, handle))
|
||||
|
||||
EV_NS_DEF_END(MeshLoader)
|
||||
|
||||
|
||||
EV_NS_DEF_BEGIN(ShaderLoader)
|
||||
|
||||
EV_NS_DEF_FN(ShaderAsset, loadAsset, (AssetHandle, handle), (ShaderAssetStage, stage), (CONST_STR, shader_name), (CONST_STR, entrypoint), (CompiledShaderType, type))
|
||||
|
||||
@@ -10,6 +10,16 @@ TYPE(JSONAsset, struct {
|
||||
PTR json_data;
|
||||
})
|
||||
|
||||
|
||||
TYPE(MeshAsset, struct {
|
||||
uint32_t vertexBuferSize;
|
||||
uint32_t vertexCount;
|
||||
float *vertexData;
|
||||
|
||||
uint32_t indexBuferSize;
|
||||
uint32_t indexCount;
|
||||
uint32_t *indexData;
|
||||
|
||||
TYPE(ShaderAssetStage, enum {
|
||||
EV_SHADERASSETSTAGE_VERTEX,
|
||||
EV_SHADERASSETSTAGE_FRAGMENT,
|
||||
|
||||
61
src/loaders/MeshLoader/MeshLoader.c
Normal file
61
src/loaders/MeshLoader/MeshLoader.c
Normal file
@@ -0,0 +1,61 @@
|
||||
#define TYPE_MODULE evmod_assets
|
||||
#include <evol/meta/type_import.h>
|
||||
#include <evol/common/ev_log.h>
|
||||
#include <evjson.h>
|
||||
|
||||
#include "../LoaderCommon.h"
|
||||
#include "MeshLoader.h"
|
||||
|
||||
typedef struct {
|
||||
Vec4 pos;
|
||||
Vec4 nor;
|
||||
Vec4 col;
|
||||
Vec4 uv;
|
||||
} Vertex;
|
||||
|
||||
MeshAsset
|
||||
ev_meshloader_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);
|
||||
|
||||
MeshAsset inter = {
|
||||
.vertexBuferSize = evjs_get(evjs, "vertex_buffer_size")->as_num,
|
||||
.vertexCount = evjs_get(evjs, "vertex_count")->as_num,
|
||||
.vertexData = data,
|
||||
|
||||
.indexBuferSize = evjs_get(evjs, "index_buffer_size")->as_num,
|
||||
.indexCount = evjs_get(evjs, "index_count")->as_num,
|
||||
.indexData = (PTR)(&((char*)data)[inter.vertexBuferSize]),
|
||||
};
|
||||
|
||||
evjs_fini(evjs);
|
||||
|
||||
ev_asset_markas(handle, LoaderData.assetType, &inter);
|
||||
|
||||
return inter;
|
||||
}
|
||||
|
||||
void
|
||||
ev_meshloader_textasset_destr(
|
||||
MeshAsset mesh)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
ev_meshloader_setassettype(
|
||||
GenericHandle type)
|
||||
{
|
||||
LoaderData.assetType = type;
|
||||
}
|
||||
13
src/loaders/MeshLoader/MeshLoader.h
Normal file
13
src/loaders/MeshLoader/MeshLoader.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
MeshAsset
|
||||
ev_meshloader_loadasset(
|
||||
AssetHandle handle);
|
||||
|
||||
void
|
||||
ev_meshloader_meshasset_destr(
|
||||
MeshAsset mesh);
|
||||
|
||||
void
|
||||
ev_meshloader_setassettype(
|
||||
GenericHandle type);
|
||||
18
src/mod.c
18
src/mod.c
@@ -9,6 +9,7 @@
|
||||
#include "loaders/LoaderCommon.h"
|
||||
#include "loaders/TextLoader/TextLoader.h"
|
||||
#include "loaders/JSONLoader/JSONLoader.h"
|
||||
#include "loaders/MeshLoader/MeshLoader.h"
|
||||
#include "loaders/ShaderLoader/ShaderLoader.h"
|
||||
|
||||
#define AssetSysCheck(...) do { \
|
||||
@@ -57,6 +58,17 @@ onRemoveJSONAsset(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// void
|
||||
// onRemoveMeshAsset(
|
||||
// ECSQuery query)
|
||||
// {
|
||||
// MeshAsset *assets = ECS->getQueryColumn(query, sizeof(MeshAsset), 1);
|
||||
// for(int i = 0; i < ECS->getQueryMatchCount(query); i++) {
|
||||
// ev_meshloader_meshasset_destr(assets[i]);
|
||||
// }
|
||||
// }
|
||||
|
||||
void
|
||||
onRemoveShaderAsset(
|
||||
ECSQuery query)
|
||||
@@ -89,6 +101,10 @@ EV_CONSTRUCTOR
|
||||
ev_jsonloader_setassettype(AssetECS->registerComponent("JSONAsset", sizeof(JSONAsset), EV_ALIGNOF(JSONAsset)));
|
||||
AssetECS->setOnRemoveTrigger("JSONAssetOnRemove", "JSONAsset", onRemoveJSONAsset);
|
||||
|
||||
|
||||
ev_jsonloader_setassettype(AssetECS->registerComponent("MeshAsset", sizeof(MeshAsset), EV_ALIGNOF(MeshAsset)));
|
||||
// AssetECS->setOnRemoveTrigger("MeshAssetOnRemove", "MeshAsset", onRemoveMeshAsset);
|
||||
|
||||
ev_shaderloader_setassettype(AssetECS->registerComponent("ShaderAsset", sizeof(ShaderAsset), EV_ALIGNOF(ShaderAsset)));
|
||||
AssetECS->setOnRemoveTrigger("ShaderAssetOnRemove", "ShaderAsset", onRemoveShaderAsset);
|
||||
}
|
||||
@@ -195,6 +211,8 @@ EV_BINDINGS
|
||||
|
||||
EV_NS_BIND_FN(JSONLoader, loadAsset, ev_jsonloader_loadasset);
|
||||
|
||||
EV_NS_BIND_FN(MeshLoader, loadAsset, ev_meshloader_loadasset);
|
||||
|
||||
EV_NS_BIND_FN(ShaderLoader, loadAsset, ev_shaderloader_loadasset);
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user