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 {
|
||||
final pathPtr =
|
||||
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
|
||||
Future removeIbl() async {
|
||||
remove_ibl_render_thread(_viewer!);
|
||||
remove_ibl(_viewer!);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -408,7 +408,7 @@ class ThermionViewerFFI extends ThermionViewer {
|
||||
///
|
||||
@override
|
||||
Future<ThermionEntity> addDirectLight(DirectLight directLight) async {
|
||||
var entity = await withIntCallback((callback) => add_light_render_thread(
|
||||
var entity = add_light(
|
||||
_viewer!,
|
||||
directLight.type.index,
|
||||
directLight.color,
|
||||
@@ -426,7 +426,7 @@ class ThermionViewerFFI extends ThermionViewer {
|
||||
directLight.sunHaloSize,
|
||||
directLight.sunHaloFallof,
|
||||
directLight.castShadows,
|
||||
callback));
|
||||
);
|
||||
if (entity == _FILAMENT_ASSET_ERROR) {
|
||||
throw Exception("Failed to add light to scene");
|
||||
}
|
||||
@@ -440,7 +440,7 @@ class ThermionViewerFFI extends ThermionViewer {
|
||||
///
|
||||
@override
|
||||
Future removeLight(ThermionEntity entity) async {
|
||||
remove_light_render_thread(_viewer!, entity);
|
||||
remove_light(_viewer!, entity);
|
||||
_sceneUpdateEventController.add(SceneUpdateEvent.remove(entity));
|
||||
}
|
||||
|
||||
@@ -449,8 +449,7 @@ class ThermionViewerFFI extends ThermionViewer {
|
||||
///
|
||||
@override
|
||||
Future clearLights() async {
|
||||
clear_lights_render_thread(_viewer!);
|
||||
|
||||
clear_lights(_viewer!);
|
||||
_sceneUpdateEventController.add(SceneUpdateEvent.clearLights());
|
||||
}
|
||||
|
||||
@@ -941,12 +940,21 @@ class ThermionViewerFFI extends ThermionViewer {
|
||||
///
|
||||
///
|
||||
Future setTransform(ThermionEntity entity, Matrix4 transform) async {
|
||||
final ptr = allocator<Float>(16);
|
||||
for (int i = 0; i < 16; i++) {
|
||||
ptr[i] = transform[i];
|
||||
}
|
||||
set_transform(_sceneManager!, entity, ptr);
|
||||
allocator.free(ptr);
|
||||
SceneManager_setTransform(
|
||||
_sceneManager!, entity, transform.storage.address);
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
///
|
||||
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);
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
///
|
||||
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}.
|
||||
/// 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) {
|
||||
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 {
|
||||
@@ -2261,4 +2247,10 @@ class ThermionFFIMaterialInstance extends MaterialInstance {
|
||||
Future setDepthWriteEnabled(bool enabled) async {
|
||||
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 FilamentRenderCallback make_render_callback_fn_pointer(FilamentRenderCallback);
|
||||
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_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);
|
||||
@@ -42,30 +42,8 @@ extern "C"
|
||||
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 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_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_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));
|
||||
|
||||
@@ -82,9 +82,10 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void requestFrame()
|
||||
void requestFrame(void (*callback)())
|
||||
{
|
||||
this->_render = true;
|
||||
this->_requestFrameRenderCallback = callback;
|
||||
}
|
||||
|
||||
void iter()
|
||||
@@ -93,6 +94,7 @@ public:
|
||||
if (_render)
|
||||
{
|
||||
doRender();
|
||||
this->_requestFrameRenderCallback();
|
||||
_render = false;
|
||||
|
||||
// Calculate and print FPS
|
||||
@@ -214,9 +216,12 @@ public:
|
||||
return ret;
|
||||
}
|
||||
|
||||
public:
|
||||
std::atomic_bool _render = false;
|
||||
|
||||
private:
|
||||
void(*_requestFrameRenderCallback)() = nullptr;
|
||||
bool _stop = false;
|
||||
bool _render = false;
|
||||
int _frameIntervalInMicroseconds = 1000000 / 60;
|
||||
std::mutex _mutex;
|
||||
std::condition_variable _cv;
|
||||
@@ -317,7 +322,7 @@ extern "C"
|
||||
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)
|
||||
{
|
||||
@@ -325,7 +330,7 @@ extern "C"
|
||||
}
|
||||
else
|
||||
{
|
||||
_rl->requestFrame();
|
||||
_rl->requestFrame(onComplete);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -505,73 +510,6 @@ extern "C"
|
||||
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,
|
||||
EntityId asset, void (*callback)())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user