#ifndef _FLUTTER_RENDER_CONTEXT_H #define _FLUTTER_RENDER_CONTEXT_H #include #include #include #include #include "flutter_texture_buffer.h" namespace flutter_filament { class FlutterRenderContext { public: void CreateRenderingSurface(uint32_t width, uint32_t height, std::unique_ptr> result, uint32_t left, uint32_t top ); void DestroyTexture(std::unique_ptr> result) { if (!_active) { result->Success("Texture has already been detroyed, ignoring"); return; } auto sh = std::make_shared< std::unique_ptr>>( std::move(result)); _textureRegistrar->UnregisterTexture( _active->flutterTextureId, [=, sharedResult = std::move(sh)]() { this->_inactive = std::move(this->_active); auto unique = std::move(*(sharedResult.get())); unique->Success(flutter::EncodableValue(true)); std::cout << "Unregistered/destroyed texture." << std::endl; }); } int64_t GetFlutterTextureId() { return _active->flutterTextureId; } void* sharedContext = nullptr; protected: flutter::PluginRegistrarWindows* _pluginRegistrar; flutter::TextureRegistrar* _textureRegistrar; std::unique_ptr _active = nullptr; std::unique_ptr _inactive = nullptr; }; } #endif