add standalone SceneAsset_createGeometry method
This commit is contained in:
@@ -10,6 +10,20 @@
|
|||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
EMSCRIPTEN_KEEPALIVE TSceneAsset *SceneAsset_createGeometry(
|
||||||
|
TEngine *tEngine,
|
||||||
|
float *vertices,
|
||||||
|
uint32_t numVertices,
|
||||||
|
float *normals,
|
||||||
|
uint32_t numNormals,
|
||||||
|
float *uvs,
|
||||||
|
uint32_t numUvs,
|
||||||
|
uint16_t *indices,
|
||||||
|
uint32_t numIndices,
|
||||||
|
TPrimitiveType tPrimitiveType,
|
||||||
|
TMaterialInstance **materialInstances,
|
||||||
|
int materialInstanceCount
|
||||||
|
);
|
||||||
EMSCRIPTEN_KEEPALIVE void SceneAsset_addToScene(TSceneAsset *tSceneAsset, TScene *tScene);
|
EMSCRIPTEN_KEEPALIVE void SceneAsset_addToScene(TSceneAsset *tSceneAsset, TScene *tScene);
|
||||||
EMSCRIPTEN_KEEPALIVE EntityId SceneAsset_getEntity(TSceneAsset *tSceneAsset);
|
EMSCRIPTEN_KEEPALIVE EntityId SceneAsset_getEntity(TSceneAsset *tSceneAsset);
|
||||||
EMSCRIPTEN_KEEPALIVE int SceneAsset_getChildEntityCount(TSceneAsset* tSceneAsset);
|
EMSCRIPTEN_KEEPALIVE int SceneAsset_getChildEntityCount(TSceneAsset* tSceneAsset);
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
#include "c_api/TSceneAsset.h"
|
#include "c_api/TSceneAsset.h"
|
||||||
#include "scene/SceneAsset.hpp"
|
#include "scene/SceneAsset.hpp"
|
||||||
#include "scene/GltfSceneAsset.hpp"
|
#include "scene/GltfSceneAsset.hpp"
|
||||||
|
#include "scene/GeometrySceneAssetBuilder.hpp"
|
||||||
|
|
||||||
using namespace thermion;
|
using namespace thermion;
|
||||||
|
|
||||||
@@ -10,6 +12,53 @@ extern "C"
|
|||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE TSceneAsset *SceneAsset_createGeometry(
|
||||||
|
TEngine *tEngine,
|
||||||
|
float *vertices,
|
||||||
|
uint32_t numVertices,
|
||||||
|
float *normals,
|
||||||
|
uint32_t numNormals,
|
||||||
|
float *uvs,
|
||||||
|
uint32_t numUvs,
|
||||||
|
uint16_t *indices,
|
||||||
|
uint32_t numIndices,
|
||||||
|
TPrimitiveType tPrimitiveType,
|
||||||
|
TMaterialInstance **materialInstances,
|
||||||
|
int materialInstanceCount
|
||||||
|
) {
|
||||||
|
utils::Entity entity;
|
||||||
|
|
||||||
|
auto *engine = reinterpret_cast<filament::Engine *>(tEngine);
|
||||||
|
|
||||||
|
auto builder = GeometrySceneAssetBuilder(engine)
|
||||||
|
.vertices(vertices, numVertices)
|
||||||
|
.indices(indices, numIndices)
|
||||||
|
.primitiveType(static_cast<filament::RenderableManager::PrimitiveType>(tPrimitiveType));
|
||||||
|
|
||||||
|
if (normals)
|
||||||
|
{
|
||||||
|
builder.normals(normals, numNormals);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (uvs)
|
||||||
|
{
|
||||||
|
builder.uvs(uvs, numUvs);
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.materials(reinterpret_cast<MaterialInstance**>(materialInstances), materialInstanceCount);
|
||||||
|
|
||||||
|
auto sceneAsset = builder.build();
|
||||||
|
|
||||||
|
if (!sceneAsset)
|
||||||
|
{
|
||||||
|
Log("Failed to create geometry");
|
||||||
|
return std::nullptr_t();
|
||||||
|
}
|
||||||
|
|
||||||
|
return reinterpret_cast<TSceneAsset*>(sceneAsset.release());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void SceneAsset_addToScene(TSceneAsset *tSceneAsset, TScene *tScene) {
|
EMSCRIPTEN_KEEPALIVE void SceneAsset_addToScene(TSceneAsset *tSceneAsset, TScene *tScene) {
|
||||||
auto *asset = reinterpret_cast<SceneAsset*>(tSceneAsset);
|
auto *asset = reinterpret_cast<SceneAsset*>(tSceneAsset);
|
||||||
auto *scene = reinterpret_cast<Scene*>(tScene);
|
auto *scene = reinterpret_cast<Scene*>(tScene);
|
||||||
|
|||||||
Reference in New Issue
Block a user