added mesh loader

This commit is contained in:
J3oss
2021-06-08 14:17:09 +02:00
parent c267a04de4
commit c1671c75d0
6 changed files with 108 additions and 0 deletions

View File

@@ -15,6 +15,7 @@ mod_src = [
# Loaders # Loaders
'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',
] ]
mod_incdir = [ mod_incdir = [

View File

@@ -23,3 +23,10 @@ EV_NS_DEF_BEGIN(JSONLoader)
EV_NS_DEF_FN(JSONAsset, loadAsset, (AssetHandle, handle)) EV_NS_DEF_FN(JSONAsset, loadAsset, (AssetHandle, handle))
EV_NS_DEF_END(JSONLoader) EV_NS_DEF_END(JSONLoader)
EV_NS_DEF_BEGIN(MeshLoader)
EV_NS_DEF_FN(MeshAsset, loadAsset, (AssetHandle, handle))
EV_NS_DEF_END(MeshLoader)

View File

@@ -9,3 +9,13 @@ TYPE(TextAsset, struct {
TYPE(JSONAsset, struct { TYPE(JSONAsset, struct {
PTR json_data; PTR json_data;
}) })
TYPE(MeshAsset, struct {
uint32_t vertexBuferSize;
uint32_t vertexCount;
float *vertexData;
uint32_t indexBuferSize;
uint32_t indexCount;
uint32_t *indexData;
})

View 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;
}

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

View File

@@ -9,6 +9,7 @@
#include "loaders/LoaderCommon.h" #include "loaders/LoaderCommon.h"
#include "loaders/TextLoader/TextLoader.h" #include "loaders/TextLoader/TextLoader.h"
#include "loaders/JSONLoader/JSONLoader.h" #include "loaders/JSONLoader/JSONLoader.h"
#include "loaders/MeshLoader/MeshLoader.h"
#define AssetSysCheck(...) do { \ #define AssetSysCheck(...) do { \
assetsys_error_t res = __VA_ARGS__; \ assetsys_error_t res = __VA_ARGS__; \
@@ -56,6 +57,16 @@ 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]);
// }
// }
EV_CONSTRUCTOR EV_CONSTRUCTOR
{ {
static_assert(sizeof(AssetEntityID) == sizeof(AssetHandle), "AssetEntityID not the same size of AssetHandle"); static_assert(sizeof(AssetEntityID) == sizeof(AssetHandle), "AssetEntityID not the same size of AssetHandle");
@@ -76,6 +87,9 @@ 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("MeshAsset", sizeof(MeshAsset), EV_ALIGNOF(MeshAsset)));
// AssetECS->setOnRemoveTrigger("MeshAssetOnRemove", "MeshAsset", onRemoveMeshAsset);
} }
} }
@@ -175,5 +189,7 @@ EV_BINDINGS
EV_NS_BIND_FN(JSONLoader, loadAsset, ev_jsonloader_loadasset); EV_NS_BIND_FN(JSONLoader, loadAsset, ev_jsonloader_loadasset);
EV_NS_BIND_FN(MeshLoader, loadAsset, ev_meshloader_loadasset);
return 0; return 0;
} }