diff --git a/thermion_dart/native/include/TMaterialInstance.h b/thermion_dart/native/include/TMaterialInstance.h new file mode 100644 index 00000000..11589ab4 --- /dev/null +++ b/thermion_dart/native/include/TMaterialInstance.h @@ -0,0 +1,65 @@ +#pragma once + +#ifdef _WIN32 +#ifdef IS_DLL +#define EMSCRIPTEN_KEEPALIVE __declspec(dllimport) +#else +#define EMSCRIPTEN_KEEPALIVE __declspec(dllexport) +#endif +#else +#ifndef EMSCRIPTEN_KEEPALIVE +#define EMSCRIPTEN_KEEPALIVE __attribute__((visibility("default"))) +#endif +#endif + +// we copy the LLVM here rather than including, +// because on Windows it's difficult to pin the exact location which confuses dart ffigen + +#ifndef __STDBOOL_H +#define __STDBOOL_H + +#define __bool_true_false_are_defined 1 + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ > 201710L +/* FIXME: We should be issuing a deprecation warning here, but cannot yet due + * to system headers which include this header file unconditionally. + */ +#elif !defined(__cplusplus) +#define bool _Bool +#define true 1 +#define false 0 +#elif defined(__GNUC__) && !defined(__STRICT_ANSI__) +/* Define _Bool as a GNU extension. */ +#define _Bool bool +#if defined(__cplusplus) && __cplusplus < 201103L +/* For C++98, define bool, false, true as a GNU extension. */ +#define bool bool +#define false false +#define true true +#endif +#endif + +#endif /* __STDBOOL_H */ + +#if defined(__APPLE__) || defined(__EMSCRIPTEN__) +#include +#endif + +#include "APIBoundaryTypes.h" +#include "ResourceBuffer.hpp" +#include "ThermionDartAPIUtils.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setDepthWrite(TMaterialInstance* materialInstance, bool enabled); + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setDepthCulling(TMaterialInstance* materialInstance, bool enabled); + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat4(TMaterialInstance* materialInstance, const char* name, double x, double y, double w, double z); + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat2(TMaterialInstance* materialInstance, const char* name, double x, double y); + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat(TMaterialInstance* materialInstance, const char* name, double value); + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterInt(TMaterialInstance* materialInstance, const char* name, int value); + #ifdef __cplusplus +} +#endif + diff --git a/thermion_dart/native/include/ThermionDartApi.h b/thermion_dart/native/include/ThermionDartApi.h index 6e188f78..06b26bf0 100644 --- a/thermion_dart/native/include/ThermionDartApi.h +++ b/thermion_dart/native/include/ThermionDartApi.h @@ -55,8 +55,6 @@ extern "C" { #endif - - EMSCRIPTEN_KEEPALIVE TViewer *Viewer_create(const void *const context, const void *const loader, void *const platform, const char *uberArchivePath); EMSCRIPTEN_KEEPALIVE void destroy_filament_viewer(TViewer *viewer); EMSCRIPTEN_KEEPALIVE TSceneManager *Viewer_getSceneManager(TViewer *viewer); @@ -295,14 +293,6 @@ extern "C" EMSCRIPTEN_KEEPALIVE TMaterialInstance* get_material_instance_at(TSceneManager *sceneManager, EntityId entity, int materialIndex); - EMSCRIPTEN_KEEPALIVE void MaterialInstance_setDepthWrite(TMaterialInstance* materialInstance, bool enabled); - EMSCRIPTEN_KEEPALIVE void MaterialInstance_setDepthCulling(TMaterialInstance* materialInstance, bool enabled); - EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat4(TMaterialInstance* materialInstance, const char* name, double x, double y, double w, double z); - EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat2(TMaterialInstance* materialInstance, const char* name, double x, double y); - EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat(TMaterialInstance* materialInstance, const char* name, double value); - EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterInt(TMaterialInstance* materialInstance, const char* name, int value); - - #ifdef __cplusplus } #endif diff --git a/thermion_dart/native/src/TMaterialInstance.cpp b/thermion_dart/native/src/TMaterialInstance.cpp new file mode 100644 index 00000000..514e4e7b --- /dev/null +++ b/thermion_dart/native/src/TMaterialInstance.cpp @@ -0,0 +1,51 @@ +#include +#include +#include +#include + +#include "Log.hpp" +#include "TMaterialInstance.h" + +#ifdef __cplusplus +namespace thermion +{ + extern "C" + { +#endif + + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setDepthWrite(TMaterialInstance *materialInstance, bool enabled) + { + reinterpret_cast<::filament::MaterialInstance *>(materialInstance)->setDepthWrite(enabled); + } + + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setDepthCulling(TMaterialInstance *materialInstance, bool enabled) + { + reinterpret_cast<::filament::MaterialInstance *>(materialInstance)->setDepthCulling(enabled); + } + + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat4(TMaterialInstance *tMaterialInstance, const char *propertyName, double x, double y, double z, double w) + { + auto *materialInstance = reinterpret_cast<::filament::MaterialInstance *>(tMaterialInstance); + filament::math::float4 data{static_cast(x), static_cast(y), static_cast(z), static_cast(w)}; + materialInstance->setParameter(propertyName, data); + } + + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat2(TMaterialInstance *materialInstance, const char *propertyName, double x, double y) + { + filament::math::float2 data{static_cast(x), static_cast(y)}; + reinterpret_cast<::filament::MaterialInstance *>(materialInstance)->setParameter(propertyName, data); + } + + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat(TMaterialInstance *materialInstance, const char *propertyName, double value) + { + reinterpret_cast<::filament::MaterialInstance *>(materialInstance)->setParameter(propertyName, static_cast(value)); + } + + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterInt(TMaterialInstance *materialInstance, const char *propertyName, int value) + { + reinterpret_cast<::filament::MaterialInstance *>(materialInstance)->setParameter(propertyName, value); + } +#ifdef __cplusplus + } +} +#endif diff --git a/thermion_dart/native/src/ThermionDartApi.cpp b/thermion_dart/native/src/ThermionDartApi.cpp index d0fdf1f3..4d9abc3e 100644 --- a/thermion_dart/native/src/ThermionDartApi.cpp +++ b/thermion_dart/native/src/ThermionDartApi.cpp @@ -1050,37 +1050,7 @@ extern "C" ((SceneManager *)sceneManager)->destroy(reinterpret_cast(instance)); } - EMSCRIPTEN_KEEPALIVE void MaterialInstance_setDepthWrite(TMaterialInstance *materialInstance, bool enabled) - { - reinterpret_cast(materialInstance)->setDepthWrite(enabled); - } - - EMSCRIPTEN_KEEPALIVE void MaterialInstance_setDepthCulling(TMaterialInstance *materialInstance, bool enabled) - { - reinterpret_cast(materialInstance)->setDepthCulling(enabled); - } - - EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat4(TMaterialInstance *materialInstance, const char *propertyName, double x, double y, double w, double z) - { - filament::math::float4 data{static_cast(x), static_cast(y), static_cast(z), static_cast(w)}; - reinterpret_cast(materialInstance)->setParameter(propertyName, data); - } - - EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat2(TMaterialInstance *materialInstance, const char *propertyName, double x, double y) - { - filament::math::float2 data{static_cast(x), static_cast(y)}; - reinterpret_cast(materialInstance)->setParameter(propertyName, data); - } - - EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterFloat(TMaterialInstance *materialInstance, const char *propertyName, double value) - { - reinterpret_cast(materialInstance)->setParameter(propertyName, static_cast(value)); - } - - EMSCRIPTEN_KEEPALIVE void MaterialInstance_setParameterInt(TMaterialInstance *materialInstance, const char *propertyName, int value) - { - reinterpret_cast(materialInstance)->setParameter(propertyName, value); - } + EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine *tEngine, EntityId entityId) {