refactor!: remove RenderThread methods no longer needed
This commit is contained in:
@@ -336,7 +336,7 @@ class ThermionViewerFFI extends ThermionViewer {
|
|||||||
Future loadIbl(String lightingPath, {double intensity = 30000}) async {
|
Future loadIbl(String lightingPath, {double intensity = 30000}) async {
|
||||||
final pathPtr =
|
final pathPtr =
|
||||||
lightingPath.toNativeUtf8(allocator: allocator).cast<Char>();
|
lightingPath.toNativeUtf8(allocator: allocator).cast<Char>();
|
||||||
load_ibl_render_thread(_viewer!, pathPtr, intensity);
|
load_ibl(_viewer!, pathPtr, intensity);
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
@@ -365,7 +365,7 @@ class ThermionViewerFFI extends ThermionViewer {
|
|||||||
///
|
///
|
||||||
@override
|
@override
|
||||||
Future removeIbl() async {
|
Future removeIbl() async {
|
||||||
remove_ibl_render_thread(_viewer!);
|
remove_ibl(_viewer!);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -408,7 +408,7 @@ class ThermionViewerFFI extends ThermionViewer {
|
|||||||
///
|
///
|
||||||
@override
|
@override
|
||||||
Future<ThermionEntity> addDirectLight(DirectLight directLight) async {
|
Future<ThermionEntity> addDirectLight(DirectLight directLight) async {
|
||||||
var entity = await withIntCallback((callback) => add_light_render_thread(
|
var entity = add_light(
|
||||||
_viewer!,
|
_viewer!,
|
||||||
directLight.type.index,
|
directLight.type.index,
|
||||||
directLight.color,
|
directLight.color,
|
||||||
@@ -426,7 +426,7 @@ class ThermionViewerFFI extends ThermionViewer {
|
|||||||
directLight.sunHaloSize,
|
directLight.sunHaloSize,
|
||||||
directLight.sunHaloFallof,
|
directLight.sunHaloFallof,
|
||||||
directLight.castShadows,
|
directLight.castShadows,
|
||||||
callback));
|
);
|
||||||
if (entity == _FILAMENT_ASSET_ERROR) {
|
if (entity == _FILAMENT_ASSET_ERROR) {
|
||||||
throw Exception("Failed to add light to scene");
|
throw Exception("Failed to add light to scene");
|
||||||
}
|
}
|
||||||
@@ -440,7 +440,7 @@ class ThermionViewerFFI extends ThermionViewer {
|
|||||||
///
|
///
|
||||||
@override
|
@override
|
||||||
Future removeLight(ThermionEntity entity) async {
|
Future removeLight(ThermionEntity entity) async {
|
||||||
remove_light_render_thread(_viewer!, entity);
|
remove_light(_viewer!, entity);
|
||||||
_sceneUpdateEventController.add(SceneUpdateEvent.remove(entity));
|
_sceneUpdateEventController.add(SceneUpdateEvent.remove(entity));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -449,8 +449,7 @@ class ThermionViewerFFI extends ThermionViewer {
|
|||||||
///
|
///
|
||||||
@override
|
@override
|
||||||
Future clearLights() async {
|
Future clearLights() async {
|
||||||
clear_lights_render_thread(_viewer!);
|
clear_lights(_viewer!);
|
||||||
|
|
||||||
_sceneUpdateEventController.add(SceneUpdateEvent.clearLights());
|
_sceneUpdateEventController.add(SceneUpdateEvent.clearLights());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -941,12 +940,21 @@ class ThermionViewerFFI extends ThermionViewer {
|
|||||||
///
|
///
|
||||||
///
|
///
|
||||||
Future setTransform(ThermionEntity entity, Matrix4 transform) async {
|
Future setTransform(ThermionEntity entity, Matrix4 transform) async {
|
||||||
final ptr = allocator<Float>(16);
|
SceneManager_setTransform(
|
||||||
for (int i = 0; i < 16; i++) {
|
_sceneManager!, entity, transform.storage.address);
|
||||||
ptr[i] = transform[i];
|
}
|
||||||
}
|
|
||||||
set_transform(_sceneManager!, entity, ptr);
|
///
|
||||||
allocator.free(ptr);
|
///
|
||||||
|
///
|
||||||
|
Future queueTransformUpdates(
|
||||||
|
List<ThermionEntity> entities, List<Matrix4> transforms) async {
|
||||||
|
var tEntities = Int32List.fromList(entities);
|
||||||
|
var tTransforms =
|
||||||
|
Float64List.fromList(transforms.expand((t) => t.storage).toList());
|
||||||
|
|
||||||
|
SceneManager_queueTransformUpdates(_sceneManager!, tEntities.address,
|
||||||
|
tTransforms.address, tEntities.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
@@ -1466,36 +1474,6 @@ class ThermionViewerFFI extends ThermionViewer {
|
|||||||
set_scale(_sceneManager!, entity, scale);
|
set_scale(_sceneManager!, entity, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
|
||||||
///
|
|
||||||
///
|
|
||||||
Future queueRotationUpdateQuat(ThermionEntity entity, Quaternion rotation,
|
|
||||||
{bool relative = false}) async {
|
|
||||||
queue_rotation_update(_sceneManager!, entity, rotation.radians, rotation.x,
|
|
||||||
rotation.y, rotation.z, rotation.w, relative);
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
|
||||||
///
|
|
||||||
///
|
|
||||||
@override
|
|
||||||
Future queueRotationUpdate(
|
|
||||||
ThermionEntity entity, double rads, double x, double y, double z,
|
|
||||||
{bool relative = false}) async {
|
|
||||||
var quat = Quaternion.axisAngle(Vector3(x, y, z), rads);
|
|
||||||
await queueRotationUpdateQuat(entity, quat, relative: relative);
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
|
||||||
///
|
|
||||||
///
|
|
||||||
@override
|
|
||||||
Future queuePositionUpdate(
|
|
||||||
ThermionEntity entity, double x, double y, double z,
|
|
||||||
{bool relative = false}) async {
|
|
||||||
queue_position_update(_sceneManager!, entity, x, y, z, relative);
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Queues an update to the worldspace position for [entity] to the viewport coordinates {x,y}.
|
/// Queues an update to the worldspace position for [entity] to the viewport coordinates {x,y}.
|
||||||
/// The actual update will occur on the next frame, and will be subject to collision detection.
|
/// The actual update will occur on the next frame, and will be subject to collision detection.
|
||||||
@@ -2176,7 +2154,15 @@ class ThermionViewerFFI extends ThermionViewer {
|
|||||||
for (final hook in _hooks) {
|
for (final hook in _hooks) {
|
||||||
await hook.call();
|
await hook.call();
|
||||||
}
|
}
|
||||||
request_frame_render_thread(_viewer!);
|
final completer = Completer();
|
||||||
|
|
||||||
|
final callback = NativeCallable<Void Function()>.listener(() {
|
||||||
|
completer.complete(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
request_frame_render_thread(_viewer!, callback.nativeFunction);
|
||||||
|
|
||||||
|
await completer.future;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Camera> createCamera() async {
|
Future<Camera> createCamera() async {
|
||||||
@@ -2261,4 +2247,10 @@ class ThermionFFIMaterialInstance extends MaterialInstance {
|
|||||||
Future setDepthWriteEnabled(bool enabled) async {
|
Future setDepthWriteEnabled(bool enabled) async {
|
||||||
MaterialInstance_setDepthWrite(this._pointer, enabled);
|
MaterialInstance_setDepthWrite(this._pointer, enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future setParameterFloat2(String name, double x, double y) async {
|
||||||
|
MaterialInstance_setParameterFloat2(
|
||||||
|
_pointer, name.toNativeUtf8().cast<Char>(), x, y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ extern "C"
|
|||||||
EMSCRIPTEN_KEEPALIVE void capture_render_thread(TViewer *viewer, uint8_t* out, void (*onComplete)());
|
EMSCRIPTEN_KEEPALIVE void capture_render_thread(TViewer *viewer, uint8_t* out, void (*onComplete)());
|
||||||
EMSCRIPTEN_KEEPALIVE FilamentRenderCallback make_render_callback_fn_pointer(FilamentRenderCallback);
|
EMSCRIPTEN_KEEPALIVE FilamentRenderCallback make_render_callback_fn_pointer(FilamentRenderCallback);
|
||||||
EMSCRIPTEN_KEEPALIVE void set_rendering_render_thread(TViewer *viewer, bool rendering, void(*onComplete)());
|
EMSCRIPTEN_KEEPALIVE void set_rendering_render_thread(TViewer *viewer, bool rendering, void(*onComplete)());
|
||||||
EMSCRIPTEN_KEEPALIVE void request_frame_render_thread(TViewer *viewer);
|
EMSCRIPTEN_KEEPALIVE void request_frame_render_thread(TViewer *viewer, void(*onComplete)());
|
||||||
EMSCRIPTEN_KEEPALIVE void set_frame_interval_render_thread(TViewer *viewer, float frameInterval);
|
EMSCRIPTEN_KEEPALIVE void set_frame_interval_render_thread(TViewer *viewer, float frameInterval);
|
||||||
EMSCRIPTEN_KEEPALIVE void set_background_color_render_thread(TViewer *viewer, const float r, const float g, const float b, const float a);
|
EMSCRIPTEN_KEEPALIVE void set_background_color_render_thread(TViewer *viewer, const float r, const float g, const float b, const float a);
|
||||||
EMSCRIPTEN_KEEPALIVE void clear_background_image_render_thread(TViewer *viewer);
|
EMSCRIPTEN_KEEPALIVE void clear_background_image_render_thread(TViewer *viewer);
|
||||||
@@ -42,30 +42,8 @@ extern "C"
|
|||||||
EMSCRIPTEN_KEEPALIVE void set_tone_mapping_render_thread(TViewer *viewer, int toneMapping);
|
EMSCRIPTEN_KEEPALIVE void set_tone_mapping_render_thread(TViewer *viewer, int toneMapping);
|
||||||
EMSCRIPTEN_KEEPALIVE void set_bloom_render_thread(TViewer *viewer, float strength);
|
EMSCRIPTEN_KEEPALIVE void set_bloom_render_thread(TViewer *viewer, float strength);
|
||||||
EMSCRIPTEN_KEEPALIVE void load_skybox_render_thread(TViewer *viewer, const char *skyboxPath, void (*onComplete)());
|
EMSCRIPTEN_KEEPALIVE void load_skybox_render_thread(TViewer *viewer, const char *skyboxPath, void (*onComplete)());
|
||||||
EMSCRIPTEN_KEEPALIVE void load_ibl_render_thread(TViewer *viewer, const char *iblPath, float intensity);
|
|
||||||
EMSCRIPTEN_KEEPALIVE void remove_skybox_render_thread(TViewer *viewer);
|
EMSCRIPTEN_KEEPALIVE void remove_skybox_render_thread(TViewer *viewer);
|
||||||
EMSCRIPTEN_KEEPALIVE void remove_ibl_render_thread(TViewer *viewer);
|
|
||||||
EMSCRIPTEN_KEEPALIVE void add_light_render_thread(
|
|
||||||
TViewer *viewer,
|
|
||||||
uint8_t type,
|
|
||||||
float colour,
|
|
||||||
float intensity,
|
|
||||||
float posX,
|
|
||||||
float posY,
|
|
||||||
float posZ,
|
|
||||||
float dirX,
|
|
||||||
float dirY,
|
|
||||||
float dirZ,
|
|
||||||
float falloffRadius,
|
|
||||||
float spotLightConeInner,
|
|
||||||
float spotLightConeOuter,
|
|
||||||
float sunAngularRadius,
|
|
||||||
float sunHaloSize,
|
|
||||||
float sunHaloFallof,
|
|
||||||
bool shadows,
|
|
||||||
void (*callback)(EntityId));
|
|
||||||
EMSCRIPTEN_KEEPALIVE void remove_light_render_thread(TViewer *viewer, EntityId entityId);
|
|
||||||
EMSCRIPTEN_KEEPALIVE void clear_lights_render_thread(TViewer *viewer);
|
|
||||||
EMSCRIPTEN_KEEPALIVE void load_glb_render_thread(TSceneManager *sceneManager, const char *assetPath, int numInstances, bool keepData, void (*callback)(EntityId));
|
EMSCRIPTEN_KEEPALIVE void load_glb_render_thread(TSceneManager *sceneManager, const char *assetPath, int numInstances, bool keepData, void (*callback)(EntityId));
|
||||||
EMSCRIPTEN_KEEPALIVE void load_glb_from_buffer_render_thread(TSceneManager *sceneManager, const uint8_t *const data, size_t length, int numInstances, bool keepData, int priority, int layer, void (*callback)(EntityId));
|
EMSCRIPTEN_KEEPALIVE void load_glb_from_buffer_render_thread(TSceneManager *sceneManager, const uint8_t *const data, size_t length, int numInstances, bool keepData, int priority, int layer, void (*callback)(EntityId));
|
||||||
EMSCRIPTEN_KEEPALIVE void load_gltf_render_thread(TSceneManager *sceneManager, const char *assetPath, const char *relativePath, bool keepData, void (*callback)(EntityId));
|
EMSCRIPTEN_KEEPALIVE void load_gltf_render_thread(TSceneManager *sceneManager, const char *assetPath, const char *relativePath, bool keepData, void (*callback)(EntityId));
|
||||||
|
|||||||
@@ -82,9 +82,10 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void requestFrame()
|
void requestFrame(void (*callback)())
|
||||||
{
|
{
|
||||||
this->_render = true;
|
this->_render = true;
|
||||||
|
this->_requestFrameRenderCallback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
void iter()
|
void iter()
|
||||||
@@ -93,6 +94,7 @@ public:
|
|||||||
if (_render)
|
if (_render)
|
||||||
{
|
{
|
||||||
doRender();
|
doRender();
|
||||||
|
this->_requestFrameRenderCallback();
|
||||||
_render = false;
|
_render = false;
|
||||||
|
|
||||||
// Calculate and print FPS
|
// Calculate and print FPS
|
||||||
@@ -214,9 +216,12 @@ public:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
std::atomic_bool _render = false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void(*_requestFrameRenderCallback)() = nullptr;
|
||||||
bool _stop = false;
|
bool _stop = false;
|
||||||
bool _render = false;
|
|
||||||
int _frameIntervalInMicroseconds = 1000000 / 60;
|
int _frameIntervalInMicroseconds = 1000000 / 60;
|
||||||
std::mutex _mutex;
|
std::mutex _mutex;
|
||||||
std::condition_variable _cv;
|
std::condition_variable _cv;
|
||||||
@@ -317,7 +322,7 @@ extern "C"
|
|||||||
auto fut = _rl->add_task(lambda);
|
auto fut = _rl->add_task(lambda);
|
||||||
}
|
}
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void request_frame_render_thread(TViewer *viewer)
|
EMSCRIPTEN_KEEPALIVE void request_frame_render_thread(TViewer *viewer, void(*onComplete)())
|
||||||
{
|
{
|
||||||
if (!_rl)
|
if (!_rl)
|
||||||
{
|
{
|
||||||
@@ -325,7 +330,7 @@ extern "C"
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_rl->requestFrame();
|
_rl->requestFrame(onComplete);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -505,73 +510,6 @@ extern "C"
|
|||||||
auto fut = _rl->add_task(lambda);
|
auto fut = _rl->add_task(lambda);
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_light_render_thread(
|
|
||||||
TViewer *viewer,
|
|
||||||
uint8_t type,
|
|
||||||
float colour,
|
|
||||||
float intensity,
|
|
||||||
float posX,
|
|
||||||
float posY,
|
|
||||||
float posZ,
|
|
||||||
float dirX,
|
|
||||||
float dirY,
|
|
||||||
float dirZ,
|
|
||||||
float falloffRadius,
|
|
||||||
float spotLightConeInner,
|
|
||||||
float spotLightConeOuter,
|
|
||||||
float sunAngularRadius,
|
|
||||||
float sunHaloSize,
|
|
||||||
float sunHaloFallof,
|
|
||||||
bool shadows,
|
|
||||||
void (*callback)(EntityId))
|
|
||||||
{
|
|
||||||
std::packaged_task<EntityId()> lambda([=]
|
|
||||||
{
|
|
||||||
auto entity = add_light(
|
|
||||||
viewer,
|
|
||||||
type,
|
|
||||||
colour,
|
|
||||||
intensity,
|
|
||||||
posX,
|
|
||||||
posY,
|
|
||||||
posZ,
|
|
||||||
dirX,
|
|
||||||
dirY,
|
|
||||||
dirZ,
|
|
||||||
falloffRadius,
|
|
||||||
spotLightConeInner,
|
|
||||||
spotLightConeOuter,
|
|
||||||
sunAngularRadius,
|
|
||||||
sunHaloSize,
|
|
||||||
sunHaloFallof,
|
|
||||||
shadows);
|
|
||||||
#ifdef __EMSCRIPTEN__
|
|
||||||
MAIN_THREAD_EM_ASM({
|
|
||||||
moduleArg.dartFilamentResolveCallback($0, $1);
|
|
||||||
}, callback, entity);
|
|
||||||
#else
|
|
||||||
callback(entity);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return entity; });
|
|
||||||
auto fut = _rl->add_task(lambda);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void remove_light_render_thread(TViewer *viewer,
|
|
||||||
EntityId entityId)
|
|
||||||
{
|
|
||||||
std::packaged_task<void()> lambda([=]
|
|
||||||
{ remove_light(viewer, entityId); });
|
|
||||||
auto fut = _rl->add_task(lambda);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void clear_lights_render_thread(TViewer *viewer)
|
|
||||||
{
|
|
||||||
std::packaged_task<void()> lambda([=]
|
|
||||||
{ clear_lights(viewer); });
|
|
||||||
auto fut = _rl->add_task(lambda);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void remove_entity_render_thread(TViewer *viewer,
|
EMSCRIPTEN_KEEPALIVE void remove_entity_render_thread(TViewer *viewer,
|
||||||
EntityId asset, void (*callback)())
|
EntityId asset, void (*callback)())
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user