This commit is contained in:
Nick Fisher
2023-09-01 12:56:25 +08:00
11 changed files with 275 additions and 94 deletions

View File

@@ -303,6 +303,9 @@ void AssetManager::updateAnimations() {
break;
}
}
if(anim.mLoop && elapsed >= anim.mDuration) {
anim.mStart = now;
}
// animation has completed
} else {
completed.push_back(anim);
@@ -390,9 +393,16 @@ void AssetManager::setMorphTargetWeights(EntityId entityId, const char* const en
}
RenderableManager &rm = _engine->getRenderableManager();
auto renderableInstance = rm.getInstance(entity);
if(!renderableInstance.isValid()) {
Log("Warning: failed to find renderable instance for entity %s", entityName);
return;
}
rm.setMorphWeights(
rm.getInstance(entity),
renderableInstance,
weights,
count
);

View File

@@ -136,21 +136,13 @@ FilamentViewer::FilamentViewer(const void* context, const ResourceLoaderWrapper*
Log("Main camera created");
_view = _engine->createView();
decltype(_view->getBloomOptions()) opts;
opts.enabled = true;
opts.strength = 0.6f;
_view->setBloomOptions(opts);
setToneMapping(ToneMapping::ACES);
setBloom(0.6f);
_view->setScene(_scene);
_view->setCamera(_mainCamera);
// ToneMapper *tm = new ACESToneMapper();
ToneMapper *tm = new LinearToneMapper();
colorGrading = ColorGrading::Builder().toneMapper(tm).build(*_engine);
delete tm;
_view->setColorGrading(colorGrading);
_cameraFocalLength = 28.0f;
_mainCamera->setLensProjection(_cameraFocalLength, 1.0f, kNearPlane,
kFarPlane);
@@ -243,6 +235,35 @@ FilamentViewer::FilamentViewer(const void* context, const ResourceLoaderWrapper*
_scene->addEntity(imageEntity);
}
void FilamentViewer::setBloom(float strength) {
decltype(_view->getBloomOptions()) opts;
opts.enabled = true;
opts.strength = strength;
_view->setBloomOptions(opts);
}
void FilamentViewer::setToneMapping(ToneMapping toneMapping) {
ToneMapper* tm;
switch(toneMapping) {
case ToneMapping::ACES:
tm = new ACESToneMapper();
break;
case ToneMapping::LINEAR:
tm = new LinearToneMapper();
break;
case ToneMapping::FILMIC:
tm = new FilmicToneMapper();
break;
}
auto newColorGrading = ColorGrading::Builder().toneMapper(tm).build(*_engine);
_view->setColorGrading(newColorGrading);
_engine->destroy(colorGrading);
delete tm;
}
void FilamentViewer::setFrameInterval(float frameInterval) {
Renderer::FrameRateOptions fro;
fro.interval = frameInterval;

View File

@@ -48,6 +48,15 @@ extern "C" {
((FilamentViewer*)viewer)->setBackgroundImagePosition(x, y, clamp);
}
FLUTTER_PLUGIN_EXPORT void set_tone_mapping(const void* const viewer, int toneMapping) {
((FilamentViewer*)viewer)->setToneMapping((ToneMapping)toneMapping);
}
FLUTTER_PLUGIN_EXPORT void set_bloom(const void* const viewer, float strength) {
Log("Setting bloom to %f", strength);
((FilamentViewer*)viewer)->setBloom(strength);
}
FLUTTER_PLUGIN_EXPORT void load_skybox(const void* const viewer, const char* skyboxPath) {
((FilamentViewer*)viewer)->loadSkybox(skyboxPath);
}
@@ -191,6 +200,8 @@ extern "C" {
);
}
FLUTTER_PLUGIN_EXPORT bool set_morph_animation(
void* assetManager,
EntityId asset,