diff --git a/docs/docs/guides/GETTING_STARTED.mdx b/docs/docs/guides/GETTING_STARTED.mdx
index 201951c0..6e5509da 100644
--- a/docs/docs/guides/GETTING_STARTED.mdx
+++ b/docs/docs/guides/GETTING_STARTED.mdx
@@ -12,9 +12,27 @@ import TabItem from '@theme/TabItem'
1. Install [react-native-filament](https://www.npmjs.com/package/react-native-filament):
-```sh
-npm i react-native-filament
-```
+= 0.75.x', value: 'RN075'},
+ {label: 'React Native < 0.75.x', value: 'RN074'}
+ ]}>
+
+ We highly recommend that you use react-native >= v0.75.x, as it has a lot of improvements and fixes. You'll get the fastest performance as react-native-filament uses [react-native-nitro-modules](https://nitro.margelo.com/docs/for-users):
+
+ ```sh
+ npm i react-native-nitro-modules
+ npm i react-native-filament
+ ```
+
+
+ ```sh
+ npm i react-native-filament@^1.0.0
+ ```
+
+
2. `react-native-filament` depends on [`react-native-worklets-core`](https://github.com/margelo/react-native-worklets-core):
@@ -65,7 +83,7 @@ For react-native-worklets-core its necessary to add a plugin to your `babel.conf
- You should already use the reaniamted babel pluginVersions, make sure to add the `processNestedWorklets` option to it:
+ You should already use the reanimated babel pluginVersions, make sure to add the `processNestedWorklets` option to it:
```js
module.exports = {
diff --git a/package/android/CMakeLists.txt b/package/android/CMakeLists.txt
index c65328cf..5de45291 100644
--- a/package/android/CMakeLists.txt
+++ b/package/android/CMakeLists.txt
@@ -23,6 +23,7 @@ endif()
find_package(ReactAndroid REQUIRED CONFIG)
find_package(fbjni REQUIRED CONFIG)
find_library(LOG_LIB log)
+find_package(react-native-nitro-modules REQUIRED) # <-- Used to create all HybridObjects and use the Nitro core library
# Add react-native-filament sources
add_library(
@@ -38,13 +39,11 @@ add_library(
../cpp/RNFChoreographer.cpp
../cpp/RNFChoreographerWrapper.cpp
../cpp/RNFListener.cpp
- ../cpp/jsi/RNFHybridObject.cpp
../cpp/jsi/RNFPromise.cpp
../cpp/jsi/RNFPromiseFactory.cpp
../cpp/jsi/RNFRuntimeCache.cpp
../cpp/jsi/RNFWorkletRuntimeRegistry.cpp
../cpp/threading/RNFDispatcher.cpp
- ../cpp/test/RNFTestHybridObject.cpp
# Filament Core
../cpp/core/RNFEngineImpl.cpp
@@ -124,6 +123,7 @@ target_link_libraries(
fbjni::fbjni # <-- fbjni
GLESv3 # <-- OpenGL (Core)
EGL # <-- OpenGL (EGL)
+ react-native-nitro-modules::NitroModules # <-- NitroModules Core :)
)
# Link with RNWC:
diff --git a/package/cpp/RNFChoreographer.cpp b/package/cpp/RNFChoreographer.cpp
index 21b2b351..307aa8e5 100644
--- a/package/cpp/RNFChoreographer.cpp
+++ b/package/cpp/RNFChoreographer.cpp
@@ -4,6 +4,7 @@
#include "RNFChoreographer.h"
#include "RNFListenerManager.h"
+#include "RNFLogger.h"
namespace margelo {
diff --git a/package/cpp/RNFChoreographer.h b/package/cpp/RNFChoreographer.h
index 83813d0d..a6c3fe77 100644
--- a/package/cpp/RNFChoreographer.h
+++ b/package/cpp/RNFChoreographer.h
@@ -6,6 +6,7 @@
#include "RNFListener.h"
#include "RNFListenerManager.h"
+#include "RNFLogger.h"
#include
namespace margelo {
diff --git a/package/cpp/RNFChoreographerWrapper.cpp b/package/cpp/RNFChoreographerWrapper.cpp
index b8f93746..20831d55 100644
--- a/package/cpp/RNFChoreographerWrapper.cpp
+++ b/package/cpp/RNFChoreographerWrapper.cpp
@@ -13,10 +13,14 @@ ChoreographerWrapper::~ChoreographerWrapper() {
}
void ChoreographerWrapper::loadHybridMethods() {
- registerHybridMethod("start", &ChoreographerWrapper::start, this);
- registerHybridMethod("stop", &ChoreographerWrapper::stop, this);
- registerHybridMethod("addFrameCallbackListener", &ChoreographerWrapper::addFrameCallbackListener, this);
- registerHybridMethod("release", &ChoreographerWrapper::release, this, true);
+ PointerHolder::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("start", &ChoreographerWrapper::start);
+ proto.registerHybridMethod("stop", &ChoreographerWrapper::stop);
+ proto.registerHybridMethod("addFrameCallbackListener", &ChoreographerWrapper::addFrameCallbackListener);
+ // TODO: overwrite mechanism doens't exist yet i believe
+ proto.registerHybridMethod("release", &ChoreographerWrapper::release);
+ });
}
void ChoreographerWrapper::start() {
@@ -85,11 +89,12 @@ void ChoreographerWrapper::release() {
PointerHolder::release();
}
-void ChoreographerWrapper::onRuntimeDestroyed(jsi::Runtime*) {
- std::unique_lock lock(_mutex);
- Logger::log(TAG, "Runtime destroyed...");
- stopAndRemoveListeners();
-}
+// TODO: nitro is this still needed? I don't think so
+// void ChoreographerWrapper::onRuntimeDestroyed(jsi::Runtime*) {
+// std::unique_lock lock(_mutex);
+// Logger::log(TAG, "Runtime destroyed...");
+// stopAndRemoveListeners();
+//}
std::shared_ptr ChoreographerWrapper::getChoreographer() {
if (getIsValid()) {
diff --git a/package/cpp/RNFChoreographerWrapper.h b/package/cpp/RNFChoreographerWrapper.h
index cb7d862e..8a7ca013 100644
--- a/package/cpp/RNFChoreographerWrapper.h
+++ b/package/cpp/RNFChoreographerWrapper.h
@@ -6,14 +6,13 @@
#include "RNFChoreographer.h"
#include "jsi/RNFPointerHolder.h"
-#include "jsi/RNFRuntimeCache.h"
namespace margelo {
using FrameInfo = std::unordered_map;
using RenderCallback = std::function;
-class ChoreographerWrapper : public PointerHolder, public RuntimeLifecycleListener {
+class ChoreographerWrapper : public PointerHolder {
public:
explicit ChoreographerWrapper(std::shared_ptr choreographer) : PointerHolder(TAG, choreographer) {}
~ChoreographerWrapper() override;
@@ -32,7 +31,6 @@ class ChoreographerWrapper : public PointerHolder, public Runtime
private: // Internal
void stopAndRemoveListeners();
- void onRuntimeDestroyed(jsi::Runtime*) override;
FrameInfo createFrameInfo(double timestamp);
private:
diff --git a/package/cpp/RNFFilamentBuffer.h b/package/cpp/RNFFilamentBuffer.h
index 3fc1a4b5..e0584415 100644
--- a/package/cpp/RNFFilamentBuffer.h
+++ b/package/cpp/RNFFilamentBuffer.h
@@ -8,7 +8,9 @@ namespace margelo {
class FilamentBuffer : public PointerHolder {
public:
explicit FilamentBuffer(std::shared_ptr buffer) : PointerHolder("FilamentBuffer", buffer) {}
- void loadHybridMethods() override {}
+ void loadHybridMethods() override {
+ PointerHolder::loadHybridMethods();
+ }
std::shared_ptr getBuffer() {
return pointee();
diff --git a/package/cpp/RNFFilamentProxy.cpp b/package/cpp/RNFFilamentProxy.cpp
index c881994d..f5409be4 100644
--- a/package/cpp/RNFFilamentProxy.cpp
+++ b/package/cpp/RNFFilamentProxy.cpp
@@ -8,8 +8,6 @@
#include "RNFReferences.h"
#include "core/RNFEngineBackendEnum.h"
#include "core/RNFEngineConfigHelper.h"
-#include "jsi/RNFPromise.h"
-#include "threading/RNFDispatcher.h"
#include
#include
@@ -21,18 +19,20 @@ namespace margelo {
using namespace facebook;
void FilamentProxy::loadHybridMethods() {
- registerHybridMethod("loadAsset", &FilamentProxy::loadAssetAsync, this);
- registerHybridMethod("findFilamentView", &FilamentProxy::findFilamentViewAsync, this);
- registerHybridMethod("createTestObject", &FilamentProxy::createTestObject, this);
- registerHybridMethod("createEngine", &FilamentProxy::createEngine, this);
- registerHybridMethod("createBullet", &FilamentProxy::createBullet, this);
- registerHybridMethod("createChoreographer", &FilamentProxy::createChoreographerWrapper, this);
- registerHybridMethod("createRecorder", &FilamentProxy::createRecorder, this);
- registerHybridMethod("getCurrentDispatcher", &FilamentProxy::getCurrentDispatcher, this);
- registerHybridGetter("hasWorklets", &FilamentProxy::getHasWorklets, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("loadAsset", &FilamentProxy::loadAssetAsync);
+ proto.registerHybridMethod("findFilamentView", &FilamentProxy::findFilamentViewAsync);
+ proto.registerHybridMethod("createEngine", &FilamentProxy::createEngine);
+ proto.registerHybridMethod("createBullet", &FilamentProxy::createBullet);
+ proto.registerRawHybridMethod("createChoreographer", 0, &FilamentProxy::createChoreographerWrapper);
+ proto.registerHybridMethod("createRecorder", &FilamentProxy::createRecorder);
+ proto.registerRawHybridMethod("getCurrentDispatcher", 0, &FilamentProxy::getCurrentDispatcher);
+ proto.registerHybridGetter("hasWorklets", &FilamentProxy::getHasWorklets);
#if HAS_WORKLETS
- registerHybridMethod("createWorkletContext", &FilamentProxy::createWorkletContext, this);
+ proto.registerHybridMethod("createWorkletContext", &FilamentProxy::createWorkletContext);
#endif
+ });
}
bool FilamentProxy::getHasWorklets() {
@@ -55,7 +55,7 @@ std::shared_ptr FilamentProxy::createWorkletContex
Logger::log(TAG, "Successfully created WorkletContext! Installing global Dispatcher...");
workletContext->invokeOnWorkletThread([=](RNWorklet::JsiWorkletContext*, jsi::Runtime& runtime) {
- Dispatcher::installRuntimeGlobalDispatcher(runtime, renderThreadDispatcher);
+ nitro::Dispatcher::installRuntimeGlobalDispatcher(runtime, renderThreadDispatcher);
Logger::log(TAG, "Successfully installed global Dispatcher in WorkletContext!");
});
@@ -63,8 +63,17 @@ std::shared_ptr FilamentProxy::createWorkletContex
}
#endif
+// TODO: nitro is this still needed?!
jsi::Value FilamentProxy::getCurrentDispatcher(jsi::Runtime& runtime, const jsi::Value&, const jsi::Value*, size_t) {
- return Dispatcher::getRuntimeGlobalDispatcherHolder(runtime);
+#ifdef NITRO_DEBUG
+ if (!runtime.global().hasProperty(runtime, "__nitroDispatcher")) [[unlikely]] {
+ throw std::runtime_error("Failed to get current Dispatcher - the global Dispatcher "
+ "holder (global.__nitroDispatcher) "
+ "does not exist! Was Dispatcher::installDispatcherIntoRuntime() called "
+ "for this jsi::Runtime?");
+ }
+#endif
+ return runtime.global().getProperty(runtime, "__nitroDispatcher");
}
std::future> FilamentProxy::loadAssetAsync(const std::string& path) {
@@ -95,16 +104,11 @@ std::future> FilamentProxy::findFilamentViewAsync(
});
}
-std::shared_ptr FilamentProxy::createTestObject() {
- Logger::log(TAG, "Creating TestObject...");
- return std::make_shared();
-}
-
std::shared_ptr FilamentProxy::createEngine(std::optional backend,
std::optional> arguments) {
Logger::log(TAG, "Creating Engine...");
- std::shared_ptr renderThread = getRenderThreadDispatcher();
+ std::shared_ptr renderThread = getRenderThreadDispatcher();
Engine::Config config = EngineConfigHelper::makeConfigFromUserParams(arguments);
Engine::Backend backendEnum = Engine::Backend::DEFAULT;
@@ -145,19 +149,9 @@ jsi::Value FilamentProxy::createChoreographerWrapper(jsi::Runtime& runtime, cons
Logger::log(TAG, "Creating Choreographer...");
std::shared_ptr choreographer = createChoreographer();
- ChoreographerWrapper* choreographerWrapperPtr = new ChoreographerWrapper(choreographer);
-
- RuntimeLifecycleMonitor::addListener(runtime, choreographerWrapperPtr);
-
- // Wrap the ChoreographerWrapper in a shared_ptr with a custom deleter that removes the listener from the RuntimeLifecycleMonitor:
- std::shared_ptr choreographerWrapper =
- std::shared_ptr(choreographerWrapperPtr, [&runtime](ChoreographerWrapper* ptr) {
- // Remove the ChoreographerWrapper from the RuntimeLifecycleMonitor when it gets destroyed.
- RuntimeLifecycleMonitor::removeListener(runtime, ptr);
- delete ptr;
- });
+ std::shared_ptr choreographerWrapper = std::make_shared(choreographer);
- return JSIConverter>::toJSI(runtime, choreographerWrapper);
+ return nitro::JSIConverter>::toJSI(runtime, choreographerWrapper);
}
} // namespace margelo
diff --git a/package/cpp/RNFFilamentProxy.h b/package/cpp/RNFFilamentProxy.h
index 6cf84b00..ee95b6a3 100644
--- a/package/cpp/RNFFilamentProxy.h
+++ b/package/cpp/RNFFilamentProxy.h
@@ -4,6 +4,13 @@
#pragma once
+#if __has_include()
+#include
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
+
#include
#include
@@ -17,9 +24,6 @@
#include "RNFFilamentView.h"
#include "bullet/RNFBulletWrapper.h"
#include "core/RNFEngineWrapper.h"
-#include "jsi/RNFHybridObject.h"
-#include "test/RNFTestHybridObject.h"
-#include "threading/RNFDispatcher.h"
#include
@@ -37,7 +41,7 @@ namespace margelo {
using namespace facebook;
-class FilamentProxy : public HybridObject {
+class FilamentProxy : public nitro::HybridObject {
public:
explicit FilamentProxy() : HybridObject(TAG) {}
@@ -51,22 +55,22 @@ class FilamentProxy : public HybridObject {
/**
* Get the Dispatcher for the main react JS thread.
*/
- virtual std::shared_ptr getJSDispatcher() = 0;
+ virtual std::shared_ptr getJSDispatcher() = 0;
/**
* Get the Dispatcher that is responsible for rendering to Filament.
* This is guaranteed to only use a single Thread, as opposed to a Thread-pool.
*/
- virtual std::shared_ptr getRenderThreadDispatcher() = 0;
+ virtual std::shared_ptr getRenderThreadDispatcher() = 0;
/**
* Get the Dispatcher for the platform-default UI Thread.
* This is guaranteed to only use a single Thread, as opposed to a Thread-pool.
*/
- virtual std::shared_ptr getUIDispatcher() = 0;
+ virtual std::shared_ptr getUIDispatcher() = 0;
/**
* Get a Dispatcher that uses a Thread-pool for background operations such as File I/O.
* This Dispatcher may use multiple Threads to run code.
*/
- virtual std::shared_ptr getBackgroundDispatcher() = 0;
+ virtual std::shared_ptr getBackgroundDispatcher() = 0;
/**
* Get the refresh rate of the display in Hz.
* Needed for correct frame pacing and dynamic resolution calculations.
@@ -79,9 +83,6 @@ class FilamentProxy : public HybridObject {
jsi::Value getCurrentDispatcher(jsi::Runtime& runtime, const jsi::Value& thisValue, const jsi::Value* args, size_t count);
- // For testing
- std::shared_ptr createTestObject();
-
// Public API
std::future> loadAssetAsync(const std::string& path);
std::future> findFilamentViewAsync(int id);
diff --git a/package/cpp/RNFFilamentRecorder.cpp b/package/cpp/RNFFilamentRecorder.cpp
index fb191e38..dba866e5 100644
--- a/package/cpp/RNFFilamentRecorder.cpp
+++ b/package/cpp/RNFFilamentRecorder.cpp
@@ -3,13 +3,15 @@
//
#include "RNFFilamentRecorder.h"
+#include "RNFLogger.h"
#include
namespace margelo {
using namespace facebook;
-FilamentRecorder::FilamentRecorder(std::shared_ptr renderThreadDispatcher, int width, int height, int fps, double bitRate)
+FilamentRecorder::FilamentRecorder(std::shared_ptr renderThreadDispatcher, int width, int height, int fps,
+ double bitRate)
: HybridObject("FilamentRecorder"), _renderThreadDispatcher(renderThreadDispatcher), _width(width), _height(height), _fps(fps),
_bitRate(bitRate), _listenerManager(ListenerManager::create()) {
Logger::log(TAG, "Creating %zu x %zu @ %zu FPS (%f bps) FilamentRecorder...", width, height, fps, bitRate);
@@ -20,19 +22,23 @@ FilamentRecorder::~FilamentRecorder() {
}
void FilamentRecorder::loadHybridMethods() {
- registerHybridGetter("width", &FilamentRecorder::getWidth, this);
- registerHybridGetter("height", &FilamentRecorder::getHeight, this);
- registerHybridGetter("fps", &FilamentRecorder::getFps, this);
- registerHybridGetter("bitRate", &FilamentRecorder::getBitRate, this);
- registerHybridGetter("outputFile", &FilamentRecorder::getOutputFile, this);
- registerHybridGetter("isRecording", &FilamentRecorder::getIsRecording, this);
- registerHybridMethod("startRecording", &FilamentRecorder::startRecording, this);
- registerHybridMethod("stopRecording", &FilamentRecorder::stopRecording, this);
- registerHybridMethod("renderFrame", &FilamentRecorder::renderFrame, this);
- registerHybridMethod("addOnReadyForMoreDataListener", &FilamentRecorder::addOnReadyForMoreDataListener, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridGetter("width", &FilamentRecorder::getWidth);
+ proto.registerHybridGetter("height", &FilamentRecorder::getHeight);
+ proto.registerHybridGetter("fps", &FilamentRecorder::getFps);
+ proto.registerHybridGetter("bitRate", &FilamentRecorder::getBitRate);
+ proto.registerHybridGetter("outputFile", &FilamentRecorder::getOutputFile);
+ proto.registerHybridGetter("isRecording", &FilamentRecorder::getIsRecording);
+ proto.registerHybridMethod("startRecording", &FilamentRecorder::startRecording);
+ proto.registerHybridMethod("stopRecording", &FilamentRecorder::stopRecording);
+ proto.registerHybridMethod("renderFrame", &FilamentRecorder::renderFrame);
+ // TODO: nitro
+ // proto.registerHybridMethod("addOnReadyForMoreDataListener", &FilamentRecorder::addOnReadyForMoreDataListener);
+ });
}
-std::shared_ptr FilamentRecorder::addOnReadyForMoreDataListener(ReadyForMoreDataCallback callback) {
+std::shared_ptr FilamentRecorder::addOnReadyForMoreDataListener(const ReadyForMoreDataCallback& callback) {
return _listenerManager->add(callback);
}
diff --git a/package/cpp/RNFFilamentRecorder.h b/package/cpp/RNFFilamentRecorder.h
index fd5e1762..acbfe1a8 100644
--- a/package/cpp/RNFFilamentRecorder.h
+++ b/package/cpp/RNFFilamentRecorder.h
@@ -11,19 +11,23 @@
#include "RNFListener.h"
#include "RNFListenerManager.h"
-#include "jsi/RNFHybridObject.h"
-#include "threading/RNFDispatcher.h"
+#if __has_include()
+#include
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
namespace margelo {
using namespace facebook;
-class FilamentRecorder : public HybridObject {
+class FilamentRecorder : public nitro::HybridObject {
public:
using ReadyForMoreDataCallback = std::function;
public:
- explicit FilamentRecorder(std::shared_ptr renderThreadDispatcher, int width, int height, int fps, double bitRate);
+ explicit FilamentRecorder(std::shared_ptr renderThreadDispatcher, int width, int height, int fps, double bitRate);
~FilamentRecorder();
public:
@@ -40,7 +44,7 @@ class FilamentRecorder : public HybridObject {
return _bitRate;
}
- std::shared_ptr addOnReadyForMoreDataListener(ReadyForMoreDataCallback callback);
+ std::shared_ptr addOnReadyForMoreDataListener(const ReadyForMoreDataCallback& callback);
/**
* Notify all JS listeners that the Recorder is ready for more data - this will probably cause rendering to happen.
* This needs to be called from the renderer Thread!
@@ -77,7 +81,7 @@ class FilamentRecorder : public HybridObject {
static constexpr auto TAG = "FilamentRecorder";
protected:
- std::shared_ptr _renderThreadDispatcher;
+ std::shared_ptr _renderThreadDispatcher;
int _width;
int _height;
int _fps;
diff --git a/package/cpp/RNFFilamentView.cpp b/package/cpp/RNFFilamentView.cpp
index a7951712..6e7a703b 100644
--- a/package/cpp/RNFFilamentView.cpp
+++ b/package/cpp/RNFFilamentView.cpp
@@ -15,8 +15,11 @@ FilamentView::~FilamentView() {
}
void FilamentView::loadHybridMethods() {
- registerHybridMethod("getSurfaceProvider", &FilamentView::getSurfaceProvider, this);
- registerHybridMethod("setChoreographer", &FilamentView::setChoreographer, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("getSurfaceProvider", &FilamentView::getSurfaceProvider);
+ proto.registerHybridMethod("setChoreographer", &FilamentView::setChoreographer);
+ });
}
void FilamentView::setChoreographer(std::optional> choreographerWrapperOrNull) {
diff --git a/package/cpp/RNFFilamentView.h b/package/cpp/RNFFilamentView.h
index e0b6e51d..c000a6d4 100644
--- a/package/cpp/RNFFilamentView.h
+++ b/package/cpp/RNFFilamentView.h
@@ -8,7 +8,11 @@
#include "RNFChoreographerWrapper.h"
#include "RNFSurfaceProvider.h"
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
#include
#include
@@ -16,7 +20,7 @@ namespace margelo {
using namespace facebook;
-class FilamentView : public HybridObject {
+class FilamentView : public nitro::HybridObject {
public:
explicit FilamentView() : HybridObject("FilamentView") {}
~FilamentView() override;
diff --git a/package/cpp/RNFListener.cpp b/package/cpp/RNFListener.cpp
index 880fca2f..4bbdb834 100644
--- a/package/cpp/RNFListener.cpp
+++ b/package/cpp/RNFListener.cpp
@@ -17,7 +17,8 @@ Listener::~Listener() {
}
void Listener::loadHybridMethods() {
- registerHybridMethod("remove", &Listener::remove, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) { proto.registerHybridMethod("remove", &Listener::remove); });
}
void Listener::remove() {
diff --git a/package/cpp/RNFListener.h b/package/cpp/RNFListener.h
index ea3e1aa9..880eccd7 100644
--- a/package/cpp/RNFListener.h
+++ b/package/cpp/RNFListener.h
@@ -4,13 +4,17 @@
#pragma once
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
#include
#include
namespace margelo {
-class Listener : public HybridObject {
+class Listener : public nitro::HybridObject {
public:
using ListenerRemover = std::function;
diff --git a/package/cpp/RNFSurface.cpp b/package/cpp/RNFSurface.cpp
index f3c4c2d6..13dd153a 100644
--- a/package/cpp/RNFSurface.cpp
+++ b/package/cpp/RNFSurface.cpp
@@ -6,8 +6,11 @@
namespace margelo {
void Surface::loadHybridMethods() {
- registerHybridGetter("width", &Surface::getWidth, this);
- registerHybridGetter("height", &Surface::getHeight, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridGetter("width", &Surface::getWidth);
+ proto.registerHybridGetter("height", &Surface::getHeight);
+ });
}
} // namespace margelo
diff --git a/package/cpp/RNFSurface.h b/package/cpp/RNFSurface.h
index 3e04f2e2..c4c40044 100644
--- a/package/cpp/RNFSurface.h
+++ b/package/cpp/RNFSurface.h
@@ -4,13 +4,17 @@
#pragma once
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
#include
#include
namespace margelo {
-class Surface : public HybridObject {
+class Surface : public nitro::HybridObject {
public:
explicit Surface() : HybridObject("Surface") {}
diff --git a/package/cpp/RNFSurfaceProvider.cpp b/package/cpp/RNFSurfaceProvider.cpp
index 095b7923..1520c607 100644
--- a/package/cpp/RNFSurfaceProvider.cpp
+++ b/package/cpp/RNFSurfaceProvider.cpp
@@ -8,9 +8,12 @@
namespace margelo {
void SurfaceProvider::loadHybridMethods() {
- registerHybridMethod("getSurface", &SurfaceProvider::getSurface, this);
- registerHybridMethod("addOnSurfaceCreatedListener", &SurfaceProvider::addOnSurfaceCreatedListener, this);
- registerHybridMethod("addOnSurfaceDestroyedListener", &SurfaceProvider::addOnSurfaceDestroyedListener, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("getSurface", &SurfaceProvider::getSurface);
+ proto.registerHybridMethod("addOnSurfaceCreatedListener", &SurfaceProvider::addOnSurfaceCreatedListener);
+ proto.registerHybridMethod("addOnSurfaceDestroyedListener", &SurfaceProvider::addOnSurfaceDestroyedListener);
+ });
}
std::shared_ptr SurfaceProvider::addOnSurfaceChangedListener(SurfaceProvider::Callbacks&& callbacks) {
@@ -20,7 +23,7 @@ std::shared_ptr SurfaceProvider::addOnSurfaceChangedListener(SurfacePr
}
std::shared_ptr SurfaceProvider::addOnSurfaceCreatedListener(SurfaceProvider::TOnCreate callback,
- std::shared_ptr dispatcher) {
+ std::shared_ptr dispatcher) {
Logger::log(TAG, "Adding \"surface created\" listener");
std::unique_lock lock(_mutex);
@@ -36,7 +39,7 @@ std::shared_ptr SurfaceProvider::addOnSurfaceCreatedListener(SurfacePr
});
}
std::shared_ptr SurfaceProvider::addOnSurfaceDestroyedListener(SurfaceProvider::TOnDestroy callback,
- std::shared_ptr dispatcher) {
+ std::shared_ptr dispatcher) {
Logger::log(TAG, "Adding \"surface destroyed\" listener");
std::unique_lock lock(_mutex);
diff --git a/package/cpp/RNFSurfaceProvider.h b/package/cpp/RNFSurfaceProvider.h
index 9b5c1c93..2e5cae56 100644
--- a/package/cpp/RNFSurfaceProvider.h
+++ b/package/cpp/RNFSurfaceProvider.h
@@ -4,10 +4,16 @@
#pragma once
+#if __has_include()
+#include
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
+
#include "RNFListener.h"
#include "RNFListenerManager.h"
#include "RNFSurface.h"
-#include "jsi/RNFHybridObject.h"
#include
#include
#include
@@ -15,7 +21,7 @@
namespace margelo {
-class SurfaceProvider : public HybridObject {
+class SurfaceProvider : public nitro::HybridObject {
public:
using TOnCreate = std::function surface)>;
using TOnResize = std::function surface, int width, int height)>;
@@ -32,8 +38,8 @@ class SurfaceProvider : public HybridObject {
public:
std::shared_ptr addOnSurfaceChangedListener(Callbacks&& callbacks);
- std::shared_ptr addOnSurfaceCreatedListener(TOnCreate callback, std::shared_ptr dispatcher);
- std::shared_ptr addOnSurfaceDestroyedListener(TOnDestroy callback, std::shared_ptr dispatcher);
+ std::shared_ptr addOnSurfaceCreatedListener(TOnCreate callback, std::shared_ptr dispatcher);
+ std::shared_ptr addOnSurfaceDestroyedListener(TOnDestroy callback, std::shared_ptr dispatcher);
virtual std::shared_ptr getSurfaceOrNull() = 0;
std::optional> getSurface();
diff --git a/package/cpp/bullet/RNFBulletWrapper.cpp b/package/cpp/bullet/RNFBulletWrapper.cpp
index 3019be49..57b9d312 100644
--- a/package/cpp/bullet/RNFBulletWrapper.cpp
+++ b/package/cpp/bullet/RNFBulletWrapper.cpp
@@ -7,15 +7,18 @@
namespace margelo {
void BulletWrapper::loadHybridMethods() {
- registerHybridMethod("createDiscreteDynamicWorld", &BulletWrapper::createDiscreteDynamicWorld, this);
- registerHybridMethod("createRigidBody", &BulletWrapper::createRigidBody, this);
- registerHybridMethod("createBoxShape", &BulletWrapper::createBoxShape, this);
- registerHybridMethod("createCylinderShape", &BulletWrapper::createCylinderShape, this);
- registerHybridMethod("createCylinderShapeX", &BulletWrapper::createCylinderShapeX, this);
- registerHybridMethod("createCylinderShapeZ", &BulletWrapper::createCylinderShapeZ, this);
- registerHybridMethod("createStaticPlaneShape", &BulletWrapper::createStaticPlaneShape, this);
- registerHybridMethod("createRigidBodyFromTransform", &BulletWrapper::createRigidBodyFromTransform, this);
- registerHybridMethod("createSphereShape", &BulletWrapper::createSphereShape, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("createDiscreteDynamicWorld", &BulletWrapper::createDiscreteDynamicWorld);
+ proto.registerHybridMethod("createRigidBody", &BulletWrapper::createRigidBody);
+ proto.registerHybridMethod("createBoxShape", &BulletWrapper::createBoxShape);
+ proto.registerHybridMethod("createCylinderShape", &BulletWrapper::createCylinderShape);
+ proto.registerHybridMethod("createCylinderShapeX", &BulletWrapper::createCylinderShapeX);
+ proto.registerHybridMethod("createCylinderShapeZ", &BulletWrapper::createCylinderShapeZ);
+ proto.registerHybridMethod("createStaticPlaneShape", &BulletWrapper::createStaticPlaneShape);
+ proto.registerHybridMethod("createRigidBodyFromTransform", &BulletWrapper::createRigidBodyFromTransform);
+ proto.registerHybridMethod("createSphereShape", &BulletWrapper::createSphereShape);
+ });
}
std::shared_ptr BulletWrapper::createDiscreteDynamicWorld(double gravityX, double gravityY, double gravityZ) {
@@ -23,8 +26,8 @@ std::shared_ptr BulletWrapper::createDiscreteDynami
}
std::shared_ptr BulletWrapper::createRigidBody(double mass, double x, double y, double z,
- std::shared_ptr shape, std::string id,
- std::optional collisionCallback) {
+ const std::shared_ptr& shape, std::string id,
+ const std::optional& collisionCallback) {
// Don't pass the shape wrapper, but the shape itself
const auto& shapePtr = shape->getShape();
if (shapePtr == nullptr) {
@@ -34,9 +37,10 @@ std::shared_ptr BulletWrapper::createRigidBody(double mass, do
return RigidBodyWrapper::create(mass, x, y, z, shapePtr, id, collisionCallback);
}
-std::shared_ptr BulletWrapper::createRigidBodyFromTransform(double mass, std::shared_ptr entityTransform,
- std::shared_ptr shape, std::string id,
- std::optional collisionCallback) {
+std::shared_ptr BulletWrapper::createRigidBodyFromTransform(double mass,
+ const std::shared_ptr& entityTransform,
+ const std::shared_ptr& shape, std::string id,
+ const std::optional& collisionCallback) {
const auto& shapePtr = shape->getShape();
if (shapePtr == nullptr) {
throw std::runtime_error("Shape is null");
diff --git a/package/cpp/bullet/RNFBulletWrapper.h b/package/cpp/bullet/RNFBulletWrapper.h
index 2992e828..a9a40483 100644
--- a/package/cpp/bullet/RNFBulletWrapper.h
+++ b/package/cpp/bullet/RNFBulletWrapper.h
@@ -12,23 +12,27 @@
#include "RNFRigidBodyWrapper.h"
#include "RNFSphereShapeWrapper.h"
#include "RNFStaticPlaneShapeWrapper.h"
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
namespace margelo {
// Main Wrapper for all Bullet Physics related APIs
-class BulletWrapper : public HybridObject {
+class BulletWrapper : public nitro::HybridObject {
public:
explicit BulletWrapper() : HybridObject("BulletWrapper") {}
void loadHybridMethods() override;
private:
std::shared_ptr createDiscreteDynamicWorld(double gravityX, double gravityY, double gravityZ);
- std::shared_ptr createRigidBody(double mass, double x, double y, double z, std::shared_ptr shape,
- std::string id, std::optional collisionCallback);
- std::shared_ptr createRigidBodyFromTransform(double mass, std::shared_ptr entityTransform,
- std::shared_ptr shape, std::string id,
- std::optional collisionCallback);
+ std::shared_ptr createRigidBody(double mass, double x, double y, double z, const std::shared_ptr& shape,
+ std::string id, const std::optional& collisionCallback);
+ std::shared_ptr createRigidBodyFromTransform(double mass, const std::shared_ptr& entityTransform,
+ const std::shared_ptr& shape, std::string id,
+ const std::optional& collisionCallback);
std::shared_ptr createBoxShape(double x, double y, double z);
std::shared_ptr createCylinderShape(double x, double y, double z);
std::shared_ptr createCylinderShapeX(double x, double y, double z);
diff --git a/package/cpp/bullet/RNFDiscreteDynamicWorldWrapper.cpp b/package/cpp/bullet/RNFDiscreteDynamicWorldWrapper.cpp
index ca827806..1f9d9309 100644
--- a/package/cpp/bullet/RNFDiscreteDynamicWorldWrapper.cpp
+++ b/package/cpp/bullet/RNFDiscreteDynamicWorldWrapper.cpp
@@ -19,9 +19,12 @@ DiscreteDynamicWorldWrapper::DiscreteDynamicWorldWrapper(double gravityX, double
}
void DiscreteDynamicWorldWrapper::loadHybridMethods() {
- registerHybridMethod("addRigidBody", &DiscreteDynamicWorldWrapper::addRigidBody, this);
- registerHybridMethod("removeRigidBody", &DiscreteDynamicWorldWrapper::removeRigidBody, this);
- registerHybridMethod("stepSimulation", &DiscreteDynamicWorldWrapper::stepSimulation, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("addRigidBody", &DiscreteDynamicWorldWrapper::addRigidBody);
+ proto.registerHybridMethod("removeRigidBody", &DiscreteDynamicWorldWrapper::removeRigidBody);
+ proto.registerHybridMethod("stepSimulation", &DiscreteDynamicWorldWrapper::stepSimulation);
+ });
}
void DiscreteDynamicWorldWrapper::addRigidBody(std::shared_ptr rigidBody) {
diff --git a/package/cpp/bullet/RNFDiscreteDynamicWorldWrapper.h b/package/cpp/bullet/RNFDiscreteDynamicWorldWrapper.h
index 72412afc..50712b8a 100644
--- a/package/cpp/bullet/RNFDiscreteDynamicWorldWrapper.h
+++ b/package/cpp/bullet/RNFDiscreteDynamicWorldWrapper.h
@@ -5,14 +5,18 @@
#pragma once
#include "RNFRigidBodyWrapper.h"
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
#include
#include
namespace margelo {
-class DiscreteDynamicWorldWrapper : public HybridObject {
+class DiscreteDynamicWorldWrapper : public nitro::HybridObject {
public:
explicit DiscreteDynamicWorldWrapper(double gravityX, double gravityY, double gravityZ);
diff --git a/package/cpp/bullet/RNFRigidBodyWrapper.cpp b/package/cpp/bullet/RNFRigidBodyWrapper.cpp
index dcc84351..46418f7f 100644
--- a/package/cpp/bullet/RNFRigidBodyWrapper.cpp
+++ b/package/cpp/bullet/RNFRigidBodyWrapper.cpp
@@ -70,14 +70,17 @@ std::shared_ptr RigidBodyWrapper::create(double mass, std::sha
}
void RigidBodyWrapper::loadHybridMethods() {
- registerHybridMethod("setDamping", &RigidBodyWrapper::setDamping, this);
- registerHybridSetter("friction", &RigidBodyWrapper::setFriction, this);
- registerHybridGetter("friction", &RigidBodyWrapper::getFriction, this);
- registerHybridSetter("activationState", &RigidBodyWrapper::setActivationState, this);
- registerHybridGetter("activationState", &RigidBodyWrapper::getActivationState, this);
- registerHybridGetter("id", &RigidBodyWrapper::getId, this);
- registerHybridSetter("id", &RigidBodyWrapper::setId, this);
- registerHybridMethod("setCollisionCallback", &RigidBodyWrapper::setCollisionCallback, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("setDamping", &RigidBodyWrapper::setDamping);
+ proto.registerHybridSetter("friction", &RigidBodyWrapper::setFriction);
+ proto.registerHybridGetter("friction", &RigidBodyWrapper::getFriction);
+ proto.registerHybridSetter("activationState", &RigidBodyWrapper::setActivationState);
+ proto.registerHybridGetter("activationState", &RigidBodyWrapper::getActivationState);
+ proto.registerHybridGetter("id", &RigidBodyWrapper::getId);
+ proto.registerHybridSetter("id", &RigidBodyWrapper::setId);
+ proto.registerHybridMethod("setCollisionCallback", &RigidBodyWrapper::setCollisionCallback);
+ });
}
void RigidBodyWrapper::setDamping(double linearDamping, double angularDamping) {
diff --git a/package/cpp/bullet/RNFRigidBodyWrapper.h b/package/cpp/bullet/RNFRigidBodyWrapper.h
index a01161d1..46dd12db 100644
--- a/package/cpp/bullet/RNFRigidBodyWrapper.h
+++ b/package/cpp/bullet/RNFRigidBodyWrapper.h
@@ -7,7 +7,11 @@
#include "RNFActivationStateEnum.h"
#include "core/RNFFilamentAssetWrapper.h"
#include "core/math/RNFTMat44Wrapper.h"
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
#include
@@ -19,9 +23,9 @@ class RigidBodyWrapper;
* first arg: "this" rigid body
* second arg: the rigid body "this" is colliding with
*/
-using CollisionCallback = std::function&, const std::shared_ptr)>;
+using CollisionCallback = std::function&, const std::shared_ptr&)>;
-class RigidBodyWrapper : public HybridObject {
+class RigidBodyWrapper : public nitro::HybridObject {
public:
explicit RigidBodyWrapper(double mass, std::shared_ptr shape, std::unique_ptr motionState,
std::string id, std::optional collisionCallback);
diff --git a/package/cpp/bullet/RNFShapeWrapper.cpp b/package/cpp/bullet/RNFShapeWrapper.cpp
index 574ca226..1d854e47 100644
--- a/package/cpp/bullet/RNFShapeWrapper.cpp
+++ b/package/cpp/bullet/RNFShapeWrapper.cpp
@@ -7,10 +7,13 @@
namespace margelo {
void margelo::ShapeWrapper::loadHybridMethods() {
- registerHybridGetter("localScaling", &ShapeWrapper::getLocalScaling, this);
- registerHybridSetter("localScaling", &ShapeWrapper::setLocalScaling, this);
- registerHybridGetter("margin", &ShapeWrapper::getMargin, this);
- registerHybridSetter("margin", &ShapeWrapper::setMargin, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridGetter("localScaling", &ShapeWrapper::getLocalScaling);
+ proto.registerHybridSetter("localScaling", &ShapeWrapper::setLocalScaling);
+ proto.registerHybridGetter("margin", &ShapeWrapper::getMargin);
+ proto.registerHybridSetter("margin", &ShapeWrapper::setMargin);
+ });
}
std::vector ShapeWrapper::getLocalScaling() {
diff --git a/package/cpp/bullet/RNFShapeWrapper.h b/package/cpp/bullet/RNFShapeWrapper.h
index d1677e56..93e94a82 100644
--- a/package/cpp/bullet/RNFShapeWrapper.h
+++ b/package/cpp/bullet/RNFShapeWrapper.h
@@ -4,7 +4,11 @@
#pragma once
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
#include
namespace margelo {
@@ -13,7 +17,7 @@ namespace margelo {
* Base class for all bullet collision shapes.
* Every new collision shape we want to support in the API should be derived from this class.
*/
-class ShapeWrapper : public HybridObject {
+class ShapeWrapper : public nitro::HybridObject {
public:
explicit ShapeWrapper(const char* name, std::shared_ptr shape) : HybridObject(name), _shape(shape) {};
diff --git a/package/cpp/core/RNFAABBWrapper.cpp b/package/cpp/core/RNFAABBWrapper.cpp
index 3768120e..0159fc1d 100644
--- a/package/cpp/core/RNFAABBWrapper.cpp
+++ b/package/cpp/core/RNFAABBWrapper.cpp
@@ -6,10 +6,13 @@
namespace margelo {
void AABBWrapper::loadHybridMethods() {
- registerHybridGetter("center", &AABBWrapper::getCenter, this);
- registerHybridGetter("halfExtent", &AABBWrapper::getHalfExtent, this);
- registerHybridGetter("min", &AABBWrapper::getMin, this);
- registerHybridGetter("max", &AABBWrapper::getMax, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridGetter("center", &AABBWrapper::getCenter);
+ proto.registerHybridGetter("halfExtent", &AABBWrapper::getHalfExtent);
+ proto.registerHybridGetter("min", &AABBWrapper::getMin);
+ proto.registerHybridGetter("max", &AABBWrapper::getMax);
+ });
}
std::vector AABBWrapper::getCenter() {
@@ -31,4 +34,4 @@ std::vector AABBWrapper::getMax() {
math::float3 max = _aabb.max;
return {max.x, max.y, max.z};
}
-} // namespace margelo
\ No newline at end of file
+} // namespace margelo
diff --git a/package/cpp/core/RNFAABBWrapper.h b/package/cpp/core/RNFAABBWrapper.h
index 0c3fc8a7..bbff6e58 100644
--- a/package/cpp/core/RNFAABBWrapper.h
+++ b/package/cpp/core/RNFAABBWrapper.h
@@ -5,13 +5,17 @@
#pragma once
#include
-#include
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
namespace margelo {
using namespace filament;
-class AABBWrapper : public HybridObject {
+class AABBWrapper : public nitro::HybridObject {
public:
explicit AABBWrapper(const Aabb& aabb) : HybridObject("AABBWrapper"), _aabb(aabb) {}
void loadHybridMethods() override;
diff --git a/package/cpp/core/RNFAmbientOcclusionOptionsWrapper.h b/package/cpp/core/RNFAmbientOcclusionOptionsWrapper.h
index 2cc83612..d76f6705 100644
--- a/package/cpp/core/RNFAmbientOcclusionOptionsWrapper.h
+++ b/package/cpp/core/RNFAmbientOcclusionOptionsWrapper.h
@@ -5,44 +5,51 @@
#pragma once
#include "RNFQualityLevel.h"
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
#include
namespace margelo {
using namespace filament;
-class AmbientOcclusionOptionsWrapper : public HybridObject, public AmbientOcclusionOptions {
+class AmbientOcclusionOptionsWrapper : public nitro::HybridObject, public AmbientOcclusionOptions {
public:
explicit AmbientOcclusionOptionsWrapper() : HybridObject("AmbientOcclusionOptionsWrapper") {}
explicit AmbientOcclusionOptionsWrapper(const AmbientOcclusionOptions& options)
: HybridObject("AmbientOcclusionOptionsWrapper"), AmbientOcclusionOptions(options) {}
void loadHybridMethods() override {
- registerHybridGetter("radius", &AmbientOcclusionOptionsWrapper::getRadius, this);
- registerHybridSetter("radius", &AmbientOcclusionOptionsWrapper::setRadius, this);
- registerHybridGetter("power", &AmbientOcclusionOptionsWrapper::getPower, this);
- registerHybridSetter("power", &AmbientOcclusionOptionsWrapper::setPower, this);
- registerHybridGetter("bias", &AmbientOcclusionOptionsWrapper::getBias, this);
- registerHybridSetter("bias", &AmbientOcclusionOptionsWrapper::setBias, this);
- registerHybridGetter("resolution", &AmbientOcclusionOptionsWrapper::getResolution, this);
- registerHybridSetter("resolution", &AmbientOcclusionOptionsWrapper::setResolution, this);
- registerHybridGetter("intensity", &AmbientOcclusionOptionsWrapper::getIntensity, this);
- registerHybridSetter("intensity", &AmbientOcclusionOptionsWrapper::setIntensity, this);
- registerHybridGetter("bilateralThreshold", &AmbientOcclusionOptionsWrapper::getBilateralThreshold, this);
- registerHybridSetter("bilateralThreshold", &AmbientOcclusionOptionsWrapper::setBilateralThreshold, this);
- registerHybridGetter("quality", &AmbientOcclusionOptionsWrapper::getQuality, this);
- registerHybridSetter("quality", &AmbientOcclusionOptionsWrapper::setQuality, this);
- registerHybridGetter("lowPassFilter", &AmbientOcclusionOptionsWrapper::getLowPassFilter, this);
- registerHybridSetter("lowPassFilter", &AmbientOcclusionOptionsWrapper::setLowPassFilter, this);
- registerHybridGetter("upsampling", &AmbientOcclusionOptionsWrapper::getUpsampling, this);
- registerHybridSetter("upsampling", &AmbientOcclusionOptionsWrapper::setUpsampling, this);
- registerHybridGetter("enabled", &AmbientOcclusionOptionsWrapper::getEnabled, this);
- registerHybridSetter("enabled", &AmbientOcclusionOptionsWrapper::setEnabled, this);
- registerHybridGetter("bentNormals", &AmbientOcclusionOptionsWrapper::getBentNormals, this);
- registerHybridSetter("bentNormals", &AmbientOcclusionOptionsWrapper::setBentNormals, this);
- registerHybridGetter("minHorizonAngleRad", &AmbientOcclusionOptionsWrapper::getMinHorizonAngleRad, this);
- registerHybridSetter("minHorizonAngleRad", &AmbientOcclusionOptionsWrapper::setMinHorizonAngleRad, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridGetter("radius", &AmbientOcclusionOptionsWrapper::getRadius);
+ proto.registerHybridSetter("radius", &AmbientOcclusionOptionsWrapper::setRadius);
+ proto.registerHybridGetter("power", &AmbientOcclusionOptionsWrapper::getPower);
+ proto.registerHybridSetter("power", &AmbientOcclusionOptionsWrapper::setPower);
+ proto.registerHybridGetter("bias", &AmbientOcclusionOptionsWrapper::getBias);
+ proto.registerHybridSetter("bias", &AmbientOcclusionOptionsWrapper::setBias);
+ proto.registerHybridGetter("resolution", &AmbientOcclusionOptionsWrapper::getResolution);
+ proto.registerHybridSetter("resolution", &AmbientOcclusionOptionsWrapper::setResolution);
+ proto.registerHybridGetter("intensity", &AmbientOcclusionOptionsWrapper::getIntensity);
+ proto.registerHybridSetter("intensity", &AmbientOcclusionOptionsWrapper::setIntensity);
+ proto.registerHybridGetter("bilateralThreshold", &AmbientOcclusionOptionsWrapper::getBilateralThreshold);
+ proto.registerHybridSetter("bilateralThreshold", &AmbientOcclusionOptionsWrapper::setBilateralThreshold);
+ proto.registerHybridGetter("quality", &AmbientOcclusionOptionsWrapper::getQuality);
+ proto.registerHybridSetter("quality", &AmbientOcclusionOptionsWrapper::setQuality);
+ proto.registerHybridGetter("lowPassFilter", &AmbientOcclusionOptionsWrapper::getLowPassFilter);
+ proto.registerHybridSetter("lowPassFilter", &AmbientOcclusionOptionsWrapper::setLowPassFilter);
+ proto.registerHybridGetter("upsampling", &AmbientOcclusionOptionsWrapper::getUpsampling);
+ proto.registerHybridSetter("upsampling", &AmbientOcclusionOptionsWrapper::setUpsampling);
+ proto.registerHybridGetter("enabled", &AmbientOcclusionOptionsWrapper::getEnabled);
+ proto.registerHybridSetter("enabled", &AmbientOcclusionOptionsWrapper::setEnabled);
+ proto.registerHybridGetter("bentNormals", &AmbientOcclusionOptionsWrapper::getBentNormals);
+ proto.registerHybridSetter("bentNormals", &AmbientOcclusionOptionsWrapper::setBentNormals);
+ proto.registerHybridGetter("minHorizonAngleRad", &AmbientOcclusionOptionsWrapper::getMinHorizonAngleRad);
+ proto.registerHybridSetter("minHorizonAngleRad", &AmbientOcclusionOptionsWrapper::setMinHorizonAngleRad);
+ });
}
private:
diff --git a/package/cpp/core/RNFAnimatorWrapper.cpp b/package/cpp/core/RNFAnimatorWrapper.cpp
index 82f971bb..7ffd4a69 100644
--- a/package/cpp/core/RNFAnimatorWrapper.cpp
+++ b/package/cpp/core/RNFAnimatorWrapper.cpp
@@ -9,15 +9,18 @@
namespace margelo {
void AnimatorWrapper::loadHybridMethods() {
- registerHybridMethod("applyAnimation", &AnimatorWrapper::applyAnimation, this);
- registerHybridMethod("updateBoneMatrices", &AnimatorWrapper::updateBoneMatrices, this);
- registerHybridMethod("applyCrossFade", &AnimatorWrapper::applyCrossFade, this);
- registerHybridMethod("resetBoneMatrices", &AnimatorWrapper::resetBoneMatrices, this);
- registerHybridMethod("getAnimationCount", &AnimatorWrapper::getAnimationCount, this);
- registerHybridMethod("getAnimationDuration", &AnimatorWrapper::getAnimationDuration, this);
- registerHybridMethod("getAnimationName", &AnimatorWrapper::getAnimationName, this);
- registerHybridMethod("addToSyncList", &AnimatorWrapper::addToSyncList, this);
- registerHybridMethod("removeFromSyncList", &AnimatorWrapper::removeFromSyncList, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("applyAnimation", &AnimatorWrapper::applyAnimation);
+ proto.registerHybridMethod("updateBoneMatrices", &AnimatorWrapper::updateBoneMatrices);
+ proto.registerHybridMethod("applyCrossFade", &AnimatorWrapper::applyCrossFade);
+ proto.registerHybridMethod("resetBoneMatrices", &AnimatorWrapper::resetBoneMatrices);
+ proto.registerHybridMethod("getAnimationCount", &AnimatorWrapper::getAnimationCount);
+ proto.registerHybridMethod("getAnimationDuration", &AnimatorWrapper::getAnimationDuration);
+ proto.registerHybridMethod("getAnimationName", &AnimatorWrapper::getAnimationName);
+ proto.registerHybridMethod("addToSyncList", &AnimatorWrapper::addToSyncList);
+ proto.registerHybridMethod("removeFromSyncList", &AnimatorWrapper::removeFromSyncList);
+ });
}
inline void assertAnimationIndexSmallerThan(int animationIndex, int max) {
diff --git a/package/cpp/core/RNFAnimatorWrapper.h b/package/cpp/core/RNFAnimatorWrapper.h
index db040e4b..82f3ba24 100644
--- a/package/cpp/core/RNFAnimatorWrapper.h
+++ b/package/cpp/core/RNFAnimatorWrapper.h
@@ -6,7 +6,11 @@
#include "RNFFilamentAssetWrapper.h"
#include "RNFFilamentInstanceWrapper.h"
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
#include
#include
@@ -17,7 +21,7 @@ namespace margelo {
using namespace filament::gltfio;
using EntityNameMap = std::map;
-class AnimatorWrapper : public HybridObject {
+class AnimatorWrapper : public nitro::HybridObject {
public:
explicit AnimatorWrapper(Animator* animator, FilamentInstance* instance, std::shared_ptr nameComponentManager)
: HybridObject("AnimatorWrapper"), _animator(animator), _instance(instance), _nameComponentManager(nameComponentManager),
diff --git a/package/cpp/core/RNFBoxWrapper.cpp b/package/cpp/core/RNFBoxWrapper.cpp
index eb1c4167..b004cc0a 100644
--- a/package/cpp/core/RNFBoxWrapper.cpp
+++ b/package/cpp/core/RNFBoxWrapper.cpp
@@ -6,10 +6,13 @@
namespace margelo {
void BoxWrapper::loadHybridMethods() {
- registerHybridGetter("center", &BoxWrapper::getCenter, this);
- registerHybridGetter("halfExtent", &BoxWrapper::getHalfExtent, this);
- registerHybridGetter("min", &BoxWrapper::getMin, this);
- registerHybridGetter("max", &BoxWrapper::getMax, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridGetter("center", &BoxWrapper::getCenter);
+ proto.registerHybridGetter("halfExtent", &BoxWrapper::getHalfExtent);
+ proto.registerHybridGetter("min", &BoxWrapper::getMin);
+ proto.registerHybridGetter("max", &BoxWrapper::getMax);
+ });
}
std::vector BoxWrapper::getCenter() {
diff --git a/package/cpp/core/RNFBoxWrapper.h b/package/cpp/core/RNFBoxWrapper.h
index e3c138e2..3945f1d6 100644
--- a/package/cpp/core/RNFBoxWrapper.h
+++ b/package/cpp/core/RNFBoxWrapper.h
@@ -5,13 +5,17 @@
#pragma once
#include
-#include
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
namespace margelo {
using namespace filament;
-class BoxWrapper : public HybridObject {
+class BoxWrapper : public nitro::HybridObject {
public:
explicit BoxWrapper(const Box& box) : HybridObject("BoxWrapper"), _box(box) {}
void loadHybridMethods() override;
diff --git a/package/cpp/core/RNFCameraWrapper.cpp b/package/cpp/core/RNFCameraWrapper.cpp
index 4706a445..9e926ca2 100644
--- a/package/cpp/core/RNFCameraWrapper.cpp
+++ b/package/cpp/core/RNFCameraWrapper.cpp
@@ -2,10 +2,13 @@
#include "RNFCameraFovEnum.h"
void margelo::CameraWrapper::loadHybridMethods() {
- registerHybridMethod("lookAtCameraManipulator", &CameraWrapper::lookAtCameraManipulator, this);
- registerHybridMethod("lookAt", &CameraWrapper::lookAt, this);
- registerHybridMethod("setLensProjection", &CameraWrapper::setLensProjection, this);
- registerHybridMethod("setProjection", &CameraWrapper::setProjection, this);
+ PointerHolder::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("lookAtCameraManipulator", &CameraWrapper::lookAtCameraManipulator);
+ proto.registerHybridMethod("lookAt", &CameraWrapper::lookAt);
+ proto.registerHybridMethod("setLensProjection", &CameraWrapper::setLensProjection);
+ proto.registerHybridMethod("setProjection", &CameraWrapper::setProjection);
+ });
}
void margelo::CameraWrapper::lookAtCameraManipulator(std::shared_ptr cameraManipulator) {
diff --git a/package/cpp/core/RNFDynamicResolutionOptions.h b/package/cpp/core/RNFDynamicResolutionOptions.h
index b01b2c8f..62ac9451 100644
--- a/package/cpp/core/RNFDynamicResolutionOptions.h
+++ b/package/cpp/core/RNFDynamicResolutionOptions.h
@@ -5,32 +5,39 @@
#pragma once
#include "RNFQualityLevel.h"
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
#include
namespace margelo {
using namespace filament;
-class DynamicResolutionOptionsWrapper : public HybridObject, public DynamicResolutionOptions {
+class DynamicResolutionOptionsWrapper : public nitro::HybridObject, public DynamicResolutionOptions {
public:
explicit DynamicResolutionOptionsWrapper() : HybridObject("DynamicResolutionOptions") {}
explicit DynamicResolutionOptionsWrapper(const DynamicResolutionOptions& options)
: HybridObject("DynamicResolutionOptions"), DynamicResolutionOptions(options) {}
void loadHybridMethods() {
- registerHybridGetter("minScale", &DynamicResolutionOptionsWrapper::getMinScale, this);
- registerHybridSetter("minScale", &DynamicResolutionOptionsWrapper::setMinScale, this);
- registerHybridGetter("maxScale", &DynamicResolutionOptionsWrapper::getMaxScale, this);
- registerHybridSetter("maxScale", &DynamicResolutionOptionsWrapper::setMaxScale, this);
- registerHybridGetter("sharpness", &DynamicResolutionOptionsWrapper::getSharpness, this);
- registerHybridSetter("sharpness", &DynamicResolutionOptionsWrapper::setSharpness, this);
- registerHybridGetter("enabled", &DynamicResolutionOptionsWrapper::getEnabled, this);
- registerHybridSetter("enabled", &DynamicResolutionOptionsWrapper::setEnabled, this);
- registerHybridGetter("homogeneousScaling", &DynamicResolutionOptionsWrapper::getHomogeneousScaling, this);
- registerHybridSetter("homogeneousScaling", &DynamicResolutionOptionsWrapper::setHomogeneousScaling, this);
- registerHybridGetter("quality", &DynamicResolutionOptionsWrapper::getQuality, this);
- registerHybridSetter("quality", &DynamicResolutionOptionsWrapper::setQuality, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridGetter("minScale", &DynamicResolutionOptionsWrapper::getMinScale);
+ proto.registerHybridSetter("minScale", &DynamicResolutionOptionsWrapper::setMinScale);
+ proto.registerHybridGetter("maxScale", &DynamicResolutionOptionsWrapper::getMaxScale);
+ proto.registerHybridSetter("maxScale", &DynamicResolutionOptionsWrapper::setMaxScale);
+ proto.registerHybridGetter("sharpness", &DynamicResolutionOptionsWrapper::getSharpness);
+ proto.registerHybridSetter("sharpness", &DynamicResolutionOptionsWrapper::setSharpness);
+ proto.registerHybridGetter("enabled", &DynamicResolutionOptionsWrapper::getEnabled);
+ proto.registerHybridSetter("enabled", &DynamicResolutionOptionsWrapper::setEnabled);
+ proto.registerHybridGetter("homogeneousScaling", &DynamicResolutionOptionsWrapper::getHomogeneousScaling);
+ proto.registerHybridSetter("homogeneousScaling", &DynamicResolutionOptionsWrapper::setHomogeneousScaling);
+ proto.registerHybridGetter("quality", &DynamicResolutionOptionsWrapper::getQuality);
+ proto.registerHybridSetter("quality", &DynamicResolutionOptionsWrapper::setQuality);
+ });
}
private:
diff --git a/package/cpp/core/RNFEngineImpl.cpp b/package/cpp/core/RNFEngineImpl.cpp
index b82b0ac5..75ab67d1 100644
--- a/package/cpp/core/RNFEngineImpl.cpp
+++ b/package/cpp/core/RNFEngineImpl.cpp
@@ -33,7 +33,7 @@
namespace margelo {
-EngineImpl::EngineImpl(std::shared_ptr rendererDispatcher, std::shared_ptr engine, float displayRefreshRate,
+EngineImpl::EngineImpl(std::shared_ptr rendererDispatcher, std::shared_ptr engine, float displayRefreshRate,
float densityPixelRatio)
: _engine(engine), _rendererDispatcher(rendererDispatcher), _densityPixelRatio(densityPixelRatio) {
diff --git a/package/cpp/core/RNFEngineImpl.h b/package/cpp/core/RNFEngineImpl.h
index 4a42677a..5b08aa1e 100644
--- a/package/cpp/core/RNFEngineImpl.h
+++ b/package/cpp/core/RNFEngineImpl.h
@@ -4,6 +4,12 @@
#pragma once
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
+
#include "jsi/RNFPointerHolder.h"
#include "RNFChoreographer.h"
@@ -20,7 +26,6 @@
#include "bullet/RNFRigidBodyWrapper.h"
#include "core/utils/RNFEntityWrapper.h"
#include "core/utils/RNFManipulatorWrapper.h"
-#include "threading/RNFDispatcher.h"
#include
#include
@@ -45,7 +50,7 @@ using ManipulatorBuilder = Manipulator::Builder;
// If you add a new method that you want to expose to JS, you need to add it to the EngineWrapper as well.
class EngineImpl : public std::enable_shared_from_this {
public:
- explicit EngineImpl(std::shared_ptr rendererDispatcher, std::shared_ptr engine, float displayRefreshRate,
+ explicit EngineImpl(std::shared_ptr rendererDispatcher, std::shared_ptr engine, float displayRefreshRate,
float densityPixelRatio);
// First a surface provider must be set, then once we have a surface a swapchain can be created and finally the swapchain can be set
@@ -63,8 +68,7 @@ class EngineImpl : public std::enable_shared_from_this {
std::shared_ptr createNameComponentManager();
std::shared_ptr createMaterial(std::shared_ptr materialBuffer);
void createAndSetSkybox(std::string hexColor, std::optional showSun, std::optional envIntensity);
- void createAndSetSkybox(std::shared_ptr textureBuffer, std::optional showSun,
- std::optional envIntensity);
+ void createAndSetSkybox(std::shared_ptr textureBuffer, std::optional showSun, std::optional envIntensity);
void clearSkybox();
void setAutomaticInstancingEnabled(bool enabled);
@@ -73,7 +77,7 @@ class EngineImpl : public std::enable_shared_from_this {
private:
std::mutex _mutex;
std::shared_ptr _engine;
- std::shared_ptr _rendererDispatcher;
+ std::shared_ptr _rendererDispatcher;
std::shared_ptr _surfaceProvider;
std::shared_ptr _surfaceListener;
std::shared_ptr _materialProvider;
diff --git a/package/cpp/core/RNFEngineWrapper.cpp b/package/cpp/core/RNFEngineWrapper.cpp
index 5960f930..7c9073b4 100644
--- a/package/cpp/core/RNFEngineWrapper.cpp
+++ b/package/cpp/core/RNFEngineWrapper.cpp
@@ -32,28 +32,31 @@
namespace margelo {
void EngineWrapper::loadHybridMethods() {
- registerHybridMethod("setSurfaceProvider", &EngineWrapper::setSurfaceProvider, this);
- registerHybridMethod("createSwapChainForSurface", &EngineWrapper::createSwapChainForSurface, this);
- registerHybridMethod("createSwapChainForRecorder", &EngineWrapper::createSwapChainForRecorder, this);
- registerHybridMethod("setSwapChain", &EngineWrapper::setSwapChain, this);
- registerHybridMethod("setIndirectLight", &EngineWrapper::setIndirectLight, this);
- registerHybridMethod("loadAsset", &EngineWrapper::loadAsset, this);
- registerHybridMethod("loadInstancedAsset", &EngineWrapper::loadInstancedAsset, this);
- registerHybridMethod("getScene", &EngineWrapper::getScene, this);
- registerHybridMethod("getView", &EngineWrapper::getView, this);
- registerHybridMethod("getCamera", &EngineWrapper::getCamera, this);
- registerHybridMethod("createOrbitCameraManipulator", &EngineWrapper::createOrbitCameraManipulator, this);
- registerHybridMethod("createTransformManager", &EngineWrapper::createTransformManager, this);
- registerHybridMethod("createRenderableManager", &EngineWrapper::createRenderableManager, this);
- registerHybridMethod("createMaterial", &EngineWrapper::createMaterial, this);
- registerHybridMethod("createLightManager", &EngineWrapper::createLightManager, this);
- registerHybridMethod("createRenderer", &EngineWrapper::createRenderer, this);
- registerHybridMethod("createNameComponentManager", &EngineWrapper::createNameComponentManager, this);
- registerHybridMethod("createAndSetSkyboxByColor", &EngineWrapper::createAndSetSkyboxByColor, this);
- registerHybridMethod("createAndSetSkyboxByTexture", &EngineWrapper::createAndSetSkyboxByTexture, this);
- registerHybridMethod("clearSkybox", &EngineWrapper::clearSkybox, this);
- registerHybridMethod("setAutomaticInstancingEnabled", &EngineWrapper::setAutomaticInstancingEnabled, this);
- registerHybridMethod("flushAndWait", &EngineWrapper::flushAndWait, this);
+ PointerHolder::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("setSurfaceProvider", &EngineWrapper::setSurfaceProvider);
+ proto.registerHybridMethod("createSwapChainForSurface", &EngineWrapper::createSwapChainForSurface);
+ proto.registerHybridMethod("createSwapChainForRecorder", &EngineWrapper::createSwapChainForRecorder);
+ proto.registerHybridMethod("setSwapChain", &EngineWrapper::setSwapChain);
+ proto.registerHybridMethod("setIndirectLight", &EngineWrapper::setIndirectLight);
+ proto.registerHybridMethod("loadAsset", &EngineWrapper::loadAsset);
+ proto.registerHybridMethod("loadInstancedAsset", &EngineWrapper::loadInstancedAsset);
+ proto.registerHybridMethod("getScene", &EngineWrapper::getScene);
+ proto.registerHybridMethod("getView", &EngineWrapper::getView);
+ proto.registerHybridMethod("getCamera", &EngineWrapper::getCamera);
+ proto.registerHybridMethod("createOrbitCameraManipulator", &EngineWrapper::createOrbitCameraManipulator);
+ proto.registerHybridMethod("createTransformManager", &EngineWrapper::createTransformManager);
+ proto.registerHybridMethod("createRenderableManager", &EngineWrapper::createRenderableManager);
+ proto.registerHybridMethod("createMaterial", &EngineWrapper::createMaterial);
+ proto.registerHybridMethod("createLightManager", &EngineWrapper::createLightManager);
+ proto.registerHybridMethod("createRenderer", &EngineWrapper::createRenderer);
+ proto.registerHybridMethod("createNameComponentManager", &EngineWrapper::createNameComponentManager);
+ proto.registerHybridMethod("createAndSetSkyboxByColor", &EngineWrapper::createAndSetSkyboxByColor);
+ proto.registerHybridMethod("createAndSetSkyboxByTexture", &EngineWrapper::createAndSetSkyboxByTexture);
+ proto.registerHybridMethod("clearSkybox", &EngineWrapper::clearSkybox);
+ proto.registerHybridMethod("setAutomaticInstancingEnabled", &EngineWrapper::setAutomaticInstancingEnabled);
+ proto.registerHybridMethod("flushAndWait", &EngineWrapper::flushAndWait);
+ });
}
void EngineWrapper::setSurfaceProvider(std::shared_ptr surfaceProvider) {
pointee()->setSurfaceProvider(surfaceProvider);
diff --git a/package/cpp/core/RNFEngineWrapper.h b/package/cpp/core/RNFEngineWrapper.h
index a3302a11..4e359e3f 100644
--- a/package/cpp/core/RNFEngineWrapper.h
+++ b/package/cpp/core/RNFEngineWrapper.h
@@ -39,7 +39,6 @@
#include "RNFSwapChainWrapper.h"
#include "RNFTransformManagerWrapper.h"
#include "RNFViewWrapper.h"
-#include "threading/RNFDispatcher.h"
#include
#include
#include
diff --git a/package/cpp/core/RNFFilamentAssetWrapper.cpp b/package/cpp/core/RNFFilamentAssetWrapper.cpp
index 0bb472e2..30735f34 100644
--- a/package/cpp/core/RNFFilamentAssetWrapper.cpp
+++ b/package/cpp/core/RNFFilamentAssetWrapper.cpp
@@ -11,17 +11,20 @@ namespace margelo {
using namespace utils;
void FilamentAssetWrapper::loadHybridMethods() {
- registerHybridMethod("getRoot", &FilamentAssetWrapper::getRoot, this);
- registerHybridMethod("releaseSourceData", &FilamentAssetWrapper::releaseSourceData, this);
- registerHybridMethod("createAnimator", &FilamentAssetWrapper::createAnimator, this);
- registerHybridGetter("entityCount", &FilamentAssetWrapper::getEntityCount, this);
- registerHybridMethod("getEntities", &FilamentAssetWrapper::getEntities, this);
- registerHybridGetter("renderableEntityCount", &FilamentAssetWrapper::getRenderableEntityCount, this);
- registerHybridMethod("getRenderableEntities", &FilamentAssetWrapper::getRenderableEntities, this);
- registerHybridMethod("getBoundingBox", &FilamentAssetWrapper::getBoundingBox, this);
- registerHybridMethod("getFirstEntityByName", &FilamentAssetWrapper::getFirstEntityByName, this);
- registerHybridMethod("getInstance", &FilamentAssetWrapper::getInstance, this);
- registerHybridMethod("getAssetInstances", &FilamentAssetWrapper::getAssetInstances, this);
+ PointerHolder::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("getRoot", &FilamentAssetWrapper::getRoot);
+ proto.registerHybridMethod("releaseSourceData", &FilamentAssetWrapper::releaseSourceData);
+ proto.registerHybridMethod("createAnimator", &FilamentAssetWrapper::createAnimator);
+ proto.registerHybridGetter("entityCount", &FilamentAssetWrapper::getEntityCount);
+ proto.registerHybridMethod("getEntities", &FilamentAssetWrapper::getEntities);
+ proto.registerHybridGetter("renderableEntityCount", &FilamentAssetWrapper::getRenderableEntityCount);
+ proto.registerHybridMethod("getRenderableEntities", &FilamentAssetWrapper::getRenderableEntities);
+ proto.registerHybridMethod("getBoundingBox", &FilamentAssetWrapper::getBoundingBox);
+ proto.registerHybridMethod("getFirstEntityByName", &FilamentAssetWrapper::getFirstEntityByName);
+ proto.registerHybridMethod("getInstance", &FilamentAssetWrapper::getInstance);
+ proto.registerHybridMethod("getAssetInstances", &FilamentAssetWrapper::getAssetInstances);
+ });
}
std::shared_ptr FilamentAssetWrapper::getRoot() {
diff --git a/package/cpp/core/RNFFilamentInstanceWrapper.cpp b/package/cpp/core/RNFFilamentInstanceWrapper.cpp
index 0c8b5354..3530fe8f 100644
--- a/package/cpp/core/RNFFilamentInstanceWrapper.cpp
+++ b/package/cpp/core/RNFFilamentInstanceWrapper.cpp
@@ -10,11 +10,14 @@
namespace margelo {
void FilamentInstanceWrapper::loadHybridMethods() {
- registerHybridGetter("entityCount", &FilamentInstanceWrapper::getEntityCount, this);
- registerHybridMethod("getEntities", &FilamentInstanceWrapper::getEntities, this);
- registerHybridMethod("getRoot", &FilamentInstanceWrapper::getRoot, this);
- registerHybridMethod("createAnimator", &FilamentInstanceWrapper::createAnimator, this);
- registerHybridMethod("getBoundingBox", &FilamentInstanceWrapper::getBoundingBox, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridGetter("entityCount", &FilamentInstanceWrapper::getEntityCount);
+ proto.registerHybridMethod("getEntities", &FilamentInstanceWrapper::getEntities);
+ proto.registerHybridMethod("getRoot", &FilamentInstanceWrapper::getRoot);
+ proto.registerHybridMethod("createAnimator", &FilamentInstanceWrapper::createAnimator);
+ proto.registerHybridMethod("getBoundingBox", &FilamentInstanceWrapper::getBoundingBox);
+ });
}
int FilamentInstanceWrapper::getEntityCount() {
diff --git a/package/cpp/core/RNFFilamentInstanceWrapper.h b/package/cpp/core/RNFFilamentInstanceWrapper.h
index 51a0b13c..aef397c5 100644
--- a/package/cpp/core/RNFFilamentInstanceWrapper.h
+++ b/package/cpp/core/RNFFilamentInstanceWrapper.h
@@ -6,7 +6,11 @@
#include "RNFAABBWrapper.h"
#include "RNFNameComponentManagerWrapper.h"
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
#include "utils/RNFEntityWrapper.h"
#include
@@ -18,7 +22,7 @@ using namespace gltfio;
class AnimatorWrapper;
-class FilamentInstanceWrapper : public HybridObject {
+class FilamentInstanceWrapper : public nitro::HybridObject {
public:
explicit FilamentInstanceWrapper(FilamentInstance* instance) : HybridObject("FilamentInstanceWrapper"), _instance(instance) {}
diff --git a/package/cpp/core/RNFLightManagerWrapper.cpp b/package/cpp/core/RNFLightManagerWrapper.cpp
index 353f9b5c..21db0fd5 100644
--- a/package/cpp/core/RNFLightManagerWrapper.cpp
+++ b/package/cpp/core/RNFLightManagerWrapper.cpp
@@ -13,20 +13,23 @@
namespace margelo {
void LightManagerWrapper::loadHybridMethods() {
- registerHybridMethod("createLightEntity", &LightManagerWrapper::createLightEntity, this);
- registerHybridMethod("destroy", &LightManagerWrapper::destroy, this);
- registerHybridMethod("setPosition", &LightManagerWrapper::setPosition, this);
- registerHybridMethod("getPosition", &LightManagerWrapper::getPosition, this);
- registerHybridMethod("setDirection", &LightManagerWrapper::setDirection, this);
- registerHybridMethod("getDirection", &LightManagerWrapper::getDirection, this);
- registerHybridMethod("setColor", &LightManagerWrapper::setColor, this);
- registerHybridMethod("getColor", &LightManagerWrapper::getColor, this);
- registerHybridMethod("setIntensity", &LightManagerWrapper::setIntensity, this);
- registerHybridMethod("getIntensity", &LightManagerWrapper::getIntensity, this);
- registerHybridMethod("setFalloff", &LightManagerWrapper::setFalloff, this);
- registerHybridMethod("getFalloff", &LightManagerWrapper::getFalloff, this);
- registerHybridMethod("setSpotLightCone", &LightManagerWrapper::setSpotLightCone, this);
- registerHybridMethod("getSpotLightCone", &LightManagerWrapper::getSpotLightCone, this);
+ PointerHolder::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("createLightEntity", &LightManagerWrapper::createLightEntity);
+ proto.registerHybridMethod("destroy", &LightManagerWrapper::destroy);
+ proto.registerHybridMethod("setPosition", &LightManagerWrapper::setPosition);
+ proto.registerHybridMethod("getPosition", &LightManagerWrapper::getPosition);
+ proto.registerHybridMethod("setDirection", &LightManagerWrapper::setDirection);
+ proto.registerHybridMethod("getDirection", &LightManagerWrapper::getDirection);
+ proto.registerHybridMethod("setColor", &LightManagerWrapper::setColor);
+ proto.registerHybridMethod("getColor", &LightManagerWrapper::getColor);
+ proto.registerHybridMethod("setIntensity", &LightManagerWrapper::setIntensity);
+ proto.registerHybridMethod("getIntensity", &LightManagerWrapper::getIntensity);
+ proto.registerHybridMethod("setFalloff", &LightManagerWrapper::setFalloff);
+ proto.registerHybridMethod("getFalloff", &LightManagerWrapper::getFalloff);
+ proto.registerHybridMethod("setSpotLightCone", &LightManagerWrapper::setSpotLightCone);
+ proto.registerHybridMethod("getSpotLightCone", &LightManagerWrapper::getSpotLightCone);
+ });
}
std::shared_ptr LightManagerWrapper::createLightEntity(const std::string& lightTypeStr, std::optional colorKelvin,
@@ -171,4 +174,4 @@ std::vector LightManagerWrapper::getSpotLightCone(std::shared_ptr(innerCone), static_cast(outerCone)};
}
-} // namespace margelo
\ No newline at end of file
+} // namespace margelo
diff --git a/package/cpp/core/RNFMaterialImpl.h b/package/cpp/core/RNFMaterialImpl.h
index 6ec64035..d89fc868 100644
--- a/package/cpp/core/RNFMaterialImpl.h
+++ b/package/cpp/core/RNFMaterialImpl.h
@@ -5,7 +5,11 @@
#pragma once
#include "RNFMaterialInstanceWrapper.h"
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
#include
diff --git a/package/cpp/core/RNFMaterialInstanceWrapper.cpp b/package/cpp/core/RNFMaterialInstanceWrapper.cpp
index a08977c2..055a5e21 100644
--- a/package/cpp/core/RNFMaterialInstanceWrapper.cpp
+++ b/package/cpp/core/RNFMaterialInstanceWrapper.cpp
@@ -10,20 +10,23 @@
namespace margelo {
void MaterialInstanceWrapper::loadHybridMethods() {
- registerHybridMethod("setCullingMode", &MaterialInstanceWrapper::setCullingMode, this);
- registerHybridMethod("setTransparencyMode", &MaterialInstanceWrapper::setTransparencyMode, this);
- registerHybridMethod("changeAlpha", &MaterialInstanceWrapper::changeAlpha, this);
- registerHybridMethod("setFloatParameter", &MaterialInstanceWrapper::setFloatParameter, this);
- registerHybridMethod("setIntParameter", &MaterialInstanceWrapper::setIntParameter, this);
- registerHybridMethod("setFloat3Parameter", &MaterialInstanceWrapper::setFloat3Parameter, this);
- registerHybridMethod("setFloat4Parameter", &MaterialInstanceWrapper::setFloat4Parameter, this);
- registerHybridMethod("setMat3fParameter", &MaterialInstanceWrapper::setMat3fParameter, this);
- registerHybridMethod("getFloatParameter", &MaterialInstanceWrapper::getFloatParameter, this);
- registerHybridMethod("getIntParameter", &MaterialInstanceWrapper::getIntParameter, this);
- registerHybridMethod("getFloat3Parameter", &MaterialInstanceWrapper::getFloat3Parameter, this);
- registerHybridMethod("getFloat4Parameter", &MaterialInstanceWrapper::getFloat4Parameter, this);
- registerHybridMethod("getMat3fParameter", &MaterialInstanceWrapper::getMat3fParameter, this);
- registerHybridGetter("getName", &MaterialInstanceWrapper::getName, this);
+ HybridObject::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("setCullingMode", &MaterialInstanceWrapper::setCullingMode);
+ proto.registerHybridMethod("setTransparencyMode", &MaterialInstanceWrapper::setTransparencyMode);
+ proto.registerHybridMethod("changeAlpha", &MaterialInstanceWrapper::changeAlpha);
+ proto.registerHybridMethod("setFloatParameter", &MaterialInstanceWrapper::setFloatParameter);
+ proto.registerHybridMethod("setIntParameter", &MaterialInstanceWrapper::setIntParameter);
+ proto.registerHybridMethod("setFloat3Parameter", &MaterialInstanceWrapper::setFloat3Parameter);
+ proto.registerHybridMethod("setFloat4Parameter", &MaterialInstanceWrapper::setFloat4Parameter);
+ proto.registerHybridMethod("setMat3fParameter", &MaterialInstanceWrapper::setMat3fParameter);
+ proto.registerHybridMethod("getFloatParameter", &MaterialInstanceWrapper::getFloatParameter);
+ proto.registerHybridMethod("getIntParameter", &MaterialInstanceWrapper::getIntParameter);
+ proto.registerHybridMethod("getFloat3Parameter", &MaterialInstanceWrapper::getFloat3Parameter);
+ proto.registerHybridMethod("getFloat4Parameter", &MaterialInstanceWrapper::getFloat4Parameter);
+ proto.registerHybridMethod("getMat3fParameter", &MaterialInstanceWrapper::getMat3fParameter);
+ proto.registerHybridGetter("getName", &MaterialInstanceWrapper::getName);
+ });
}
void MaterialInstanceWrapper::setCullingMode(std::string mode) {
diff --git a/package/cpp/core/RNFMaterialInstanceWrapper.h b/package/cpp/core/RNFMaterialInstanceWrapper.h
index 7e18c0aa..80531d14 100644
--- a/package/cpp/core/RNFMaterialInstanceWrapper.h
+++ b/package/cpp/core/RNFMaterialInstanceWrapper.h
@@ -6,13 +6,17 @@
#include
-#include "jsi/RNFHybridObject.h"
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
namespace margelo {
using namespace filament;
-class MaterialInstanceWrapper : public HybridObject {
+class MaterialInstanceWrapper : public nitro::HybridObject {
public:
explicit MaterialInstanceWrapper(MaterialInstance* materialInstance)
diff --git a/package/cpp/core/RNFMaterialWrapper.cpp b/package/cpp/core/RNFMaterialWrapper.cpp
index e63ec894..09d59b05 100644
--- a/package/cpp/core/RNFMaterialWrapper.cpp
+++ b/package/cpp/core/RNFMaterialWrapper.cpp
@@ -9,14 +9,17 @@
namespace margelo {
void MaterialWrapper::loadHybridMethods() {
- registerHybridMethod("createInstance", &MaterialWrapper::createInstance, this);
- registerHybridMethod("setDefaultFloatParameter", &MaterialWrapper::setDefaultFloatParameter, this);
- registerHybridMethod("setDefaultTextureParameter", &MaterialWrapper::setDefaultTextureParameter, this);
- registerHybridMethod("getDefaultInstance", &MaterialWrapper::getDefaultInstance, this);
- registerHybridMethod("setDefaultMat3fParameter", &MaterialWrapper::setDefaultMat3fParameter, this);
- registerHybridMethod("setDefaultFloat3Parameter", &MaterialWrapper::setDefaultFloat3Parameter, this);
- registerHybridMethod("setDefaultFloat4Parameter", &MaterialWrapper::setDefaultFloat4Parameter, this);
- registerHybridMethod("setDefaultIntParameter", &MaterialWrapper::setDefaultIntParameter, this);
+ PointerHolder::loadHybridMethods();
+ registerHybrids(this, [](nitro::Prototype& proto) {
+ proto.registerHybridMethod("createInstance", &MaterialWrapper::createInstance);
+ proto.registerHybridMethod("setDefaultFloatParameter", &MaterialWrapper::setDefaultFloatParameter);
+ proto.registerHybridMethod("setDefaultTextureParameter", &MaterialWrapper::setDefaultTextureParameter);
+ proto.registerHybridMethod("getDefaultInstance", &MaterialWrapper::getDefaultInstance);
+ proto.registerHybridMethod("setDefaultMat3fParameter", &MaterialWrapper::setDefaultMat3fParameter);
+ proto.registerHybridMethod("setDefaultFloat3Parameter", &MaterialWrapper::setDefaultFloat3Parameter);
+ proto.registerHybridMethod("setDefaultFloat4Parameter", &MaterialWrapper::setDefaultFloat4Parameter);
+ proto.registerHybridMethod("setDefaultIntParameter", &MaterialWrapper::setDefaultIntParameter);
+ });
}
std::shared_ptr MaterialWrapper::createInstance() {
return pointee()->createInstance();
@@ -62,4 +65,4 @@ void MaterialWrapper::setDefaultMat3fParameter(std::string name, std::vectorgetName();
}
-} // namespace margelo
\ No newline at end of file
+} // namespace margelo
diff --git a/package/cpp/core/RNFNameComponentManagerWrapper.cpp b/package/cpp/core/RNFNameComponentManagerWrapper.cpp
index e638cedb..99162ba5 100644
--- a/package/cpp/core/RNFNameComponentManagerWrapper.cpp
+++ b/package/cpp/core/RNFNameComponentManagerWrapper.cpp
@@ -5,29 +5,30 @@
namespace margelo {
- void NameComponentManagerWrapper::loadHybridMethods() {
- registerHybridMethod("getEntityName", &NameComponentManagerWrapper::getEntityName, this);
- }
+void NameComponentManagerWrapper::loadHybridMethods() {
+ PointerHolder::loadHybridMethods();
+ registerHybrids(
+ this, [](nitro::Prototype& proto) { proto.registerHybridMethod("getEntityName", &NameComponentManagerWrapper::getEntityName); });
+}
- // TODO: This code is similar to EntityNameMap AnimatorWrapper::createEntityNameMap, consider refactoring
- std::optional
- NameComponentManagerWrapper::getEntityName(std::shared_ptr entityWrapper) {
- if (!entityWrapper) {
- throw std::invalid_argument("EntityWrapper is null");
- }
+// TODO: This code is similar to EntityNameMap AnimatorWrapper::createEntityNameMap, consider refactoring
+std::optional NameComponentManagerWrapper::getEntityName(std::shared_ptr entityWrapper) {
+ if (!entityWrapper) {
+ throw std::invalid_argument("EntityWrapper is null");
+ }
- Entity entity = entityWrapper->getEntity();
- bool hasEntity = pointee()->hasComponent(entity);
- if (!hasEntity) {
- Logger::log(TAG, "Entity wasn't found in NameComponentManager");
- return std::nullopt;
- }
+ Entity entity = entityWrapper->getEntity();
+ bool hasEntity = pointee()->hasComponent(entity);
+ if (!hasEntity) {
+ Logger::log(TAG, "Entity wasn't found in NameComponentManager");
+ return std::nullopt;
+ }
- NameComponentManager::Instance instance = pointee()->getInstance(entity);
- if (!instance || !instance.isValid()) {
- Logger::log(TAG, "Instance wasn't found in NameComponentManager");
- return std::nullopt;
- }
- return pointee()->getName(instance);
- }
-}
\ No newline at end of file
+ NameComponentManager::Instance instance = pointee()->getInstance(entity);
+ if (!instance || !instance.isValid()) {
+ Logger::log(TAG, "Instance wasn't found in NameComponentManager");
+ return std::nullopt;
+ }
+ return pointee()->getName(instance);
+}
+} // namespace margelo
diff --git a/package/cpp/core/RNFNameComponentManagerWrapper.h b/package/cpp/core/RNFNameComponentManagerWrapper.h
index cd12747b..1cb8ecf5 100644
--- a/package/cpp/core/RNFNameComponentManagerWrapper.h
+++ b/package/cpp/core/RNFNameComponentManagerWrapper.h
@@ -4,8 +4,8 @@
#pragma once
-#include "jsi/RNFPointerHolder.h"
#include "core/utils/RNFEntityWrapper.h"
+#include "jsi/RNFPointerHolder.h"
#include
namespace margelo {
@@ -27,7 +27,7 @@ class NameComponentManagerWrapper : public PointerHolder {
static auto constexpr TAG = "NameComponentManagerWrapper";
private: // Exposed JS method
- std::optional getEntityName(std::shared_ptr entityWrapper);
+ std::optional getEntityName(std::shared_ptr entityWrapper);
};
} // namespace margelo
diff --git a/package/cpp/core/RNFRenderableManagerImpl.h b/package/cpp/core/RNFRenderableManagerImpl.h
index c503e499..55419956 100644
--- a/package/cpp/core/RNFRenderableManagerImpl.h
+++ b/package/cpp/core/RNFRenderableManagerImpl.h
@@ -4,6 +4,12 @@
#pragma once
+#if __has_include()
+#include
+#else
+#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
+#endif
+
#include "RNFFilamentAssetWrapper.h"
#include "RNFFilamentBuffer.h"
#include "RNFMaterialInstanceWrapper.h"
@@ -28,7 +34,7 @@ struct DebugVertex {
class RenderableManagerImpl {
public:
- explicit RenderableManagerImpl(std::shared_ptr