diff --git a/dart_filament/native/include/FilamentViewer.hpp b/dart_filament/native/include/FilamentViewer.hpp index 5ef235c9..5296870b 100644 --- a/dart_filament/native/include/FilamentViewer.hpp +++ b/dart_filament/native/include/FilamentViewer.hpp @@ -163,7 +163,7 @@ namespace flutter_filament private: const ResourceLoaderWrapperImpl *const _resourceLoaderWrapper; - + void* _context = nullptr; Scene *_scene = nullptr; View *_view = nullptr; Engine *_engine = nullptr; diff --git a/dart_filament/native/src/FilamentViewer.cpp b/dart_filament/native/src/FilamentViewer.cpp index 8908d3c1..366d25a8 100644 --- a/dart_filament/native/src/FilamentViewer.cpp +++ b/dart_filament/native/src/FilamentViewer.cpp @@ -27,6 +27,11 @@ #include #ifdef __EMSCRIPTEN__ #include +#include +#include +#include +#include +#include #endif #include #include @@ -124,6 +129,7 @@ namespace flutter_filament FilamentViewer::FilamentViewer(const void *sharedContext, const ResourceLoaderWrapperImpl *const ResourceLoaderWrapperImpl, void *const platform, const char *uberArchivePath) : _resourceLoaderWrapper(ResourceLoaderWrapperImpl) { + _context = (void*) sharedContext; ASSERT_POSTCONDITION(_resourceLoaderWrapper != nullptr, "Resource loader must be non-null"); @@ -142,21 +148,28 @@ namespace flutter_filament #else _engine = Engine::create(Engine::Backend::OPENGL, (backend::Platform *)platform, (void *)sharedContext, nullptr); #endif + Log("Created engine"); _engine->setAutomaticInstancingEnabled(true); _renderer = _engine->createRenderer(); + Log("Created renderer"); + _frameInterval = 1000.0f / 60.0f; setFrameInterval(_frameInterval); _scene = _engine->createScene(); + Log("Created scene"); + utils::Entity camera = EntityManager::get().create(); _mainCamera = _engine->createCamera(camera); + Log("Created camera"); + _view = _engine->createView(); setToneMapping(ToneMapping::ACES); @@ -200,6 +213,8 @@ namespace flutter_filament _scene, uberArchivePath); + Log("Created scene maager"); + _imageTexture = Texture::Builder() .width(1) .height(1) @@ -318,6 +333,7 @@ namespace flutter_filament _frameInterval = frameInterval; Renderer::FrameRateOptions fro; fro.interval = 1; // frameInterval; + fro.history = 5; _renderer->setFrameRateOptions(fro); Log("Set frame interval to %f", frameInterval); } @@ -526,7 +542,7 @@ namespace flutter_filament void FilamentViewer::setBackgroundColor(const float r, const float g, const float b, const float a) { - Log("Setting background color to rgba(%f,%f,%f,%f)", r, g, b, a); + // Log("Setting background color to rgba(%f,%f,%f,%f)", r, g, b, a); _imageMaterial->setDefaultParameter("showImage", 0); _imageMaterial->setDefaultParameter("backgroundColor", RgbaType::sRGB, float4(r, g, b, a)); _imageMaterial->setDefaultParameter("transform", _imageScale); @@ -1051,13 +1067,6 @@ namespace flutter_filament return; } - // if (_frameCount == 60) - // { - // Log("Skipped frames : %d", _skippedFrames); - // _elapsed = 0; - // _frameCount = 0; - // _skippedFrames = 0; - // } auto now = std::chrono::high_resolution_clock::now(); auto secsSinceLastFpsCheck = float(std::chrono::duration_cast(now - _fpsCounterStartTime).count()); @@ -1088,9 +1097,16 @@ namespace flutter_filament // Render the scene, unless the renderer wants to skip the frame. bool beginFrame = _renderer->beginFrame(_swapChain, frameTimeInNanos); + if (!beginFrame) + { + _skippedFrames++; + } + + // beginFrame = true; if (beginFrame) { + _renderer->render(_view); _frameCount++; @@ -1122,14 +1138,10 @@ namespace flutter_filament _renderer->readPixels(_rt, 0, 0, vp.width, vp.height, std::move(pbd)); } _renderer->endFrame(); -#ifdef __EMSCRIPTEN__ + } + #ifdef __EMSCRIPTEN__ _engine->execute(); -#endif - } - else - { - _skippedFrames++; - } + #endif } void FilamentViewer::savePng(void *buf, size_t size, int frameNumber)