#ifndef FLUTTER_PLUGIN_POLYVOX_FILAMENT_PLUGIN_H_ #define FLUTTER_PLUGIN_POLYVOX_FILAMENT_PLUGIN_H_ #include #include #include #include #include #include #include #include #include #include "GL/GL.h" #include "GL/GLu.h" #include "EGL/egl.h" #include "EGL/eglext.h" #include "EGL/eglplatform.h" #include "GLES2/gl2.h" #include "GLES2/gl2ext.h" #include "PolyvoxFilamentApi.h" #include "PlatformAngle.h" namespace polyvox_filament { class PolyvoxFilamentPlugin : public flutter::Plugin { public: static void RegisterWithRegistrar(flutter::PluginRegistrarWindows *registrar); PolyvoxFilamentPlugin(flutter::TextureRegistrar *textureRegistrar, flutter::PluginRegistrarWindows *registrar); virtual ~PolyvoxFilamentPlugin(); // Disallow copy and assign. PolyvoxFilamentPlugin(const PolyvoxFilamentPlugin &) = delete; PolyvoxFilamentPlugin &operator=(const PolyvoxFilamentPlugin &) = delete; // Called when a method is called on this plugin's channel from Dart. void HandleMethodCall( const flutter::MethodCall &method_call, std::unique_ptr> result); flutter::PluginRegistrarWindows *_pluginRegistrar; flutter::TextureRegistrar *_textureRegistrar; std::unique_ptr _texture = nullptr; std::unique_ptr _pixelBuffer = nullptr; std::unique_ptr _pixelData = nullptr; std::unique_ptr _textureDescriptor = nullptr; int32_t _frameIntervalInMilliseconds = 1000 / 60; bool _rendering = false; int64_t _flutterTextureId; std::mutex _renderMutex; // OpenGL // Texture handle GLuint _glTextureId = 0; // Shared context HGLRC _context = NULL; // D3D // Device ID3D11Device* _D3D11Device = nullptr; ID3D11DeviceContext* _D3D11DeviceContext = nullptr; // Texture objects/shared handles Microsoft::WRL::ComPtr _externalD3DTexture2D; Microsoft::WRL::ComPtr _internalD3DTexture2D; HANDLE _externalD3DTextureHandle = nullptr; HANDLE _internalD3DTextureHandle = nullptr; filament::backend::PlatformANGLE* _platform = nullptr; void *_viewer = nullptr; std::map _resources; void CreateFilamentViewer( const flutter::MethodCall &methodCall, std::unique_ptr> result); void CreateTexture( const flutter::MethodCall &methodCall, std::unique_ptr> result); void Render( const flutter::MethodCall &methodCall, std::unique_ptr> result); void SetRendering( const flutter::MethodCall &methodCall, std::unique_ptr> result); void SetBackgroundImage( const flutter::MethodCall &methodCall, std::unique_ptr> result); void SetBackgroundColor( const flutter::MethodCall &methodCall, std::unique_ptr> result); void UpdateViewportAndCameraProjection( const flutter::MethodCall &methodCall, std::unique_ptr> result); void GetAssetManager( const flutter::MethodCall &methodCall, std::unique_ptr> result); void LoadSkybox( const flutter::MethodCall &methodCall, std::unique_ptr> result); void LoadIbl( const flutter::MethodCall &methodCall, std::unique_ptr> result); void RemoveSkybox( const flutter::MethodCall &methodCall, std::unique_ptr> result); void RemoveIbl( const flutter::MethodCall &methodCall, std::unique_ptr> result); void AddLight( const flutter::MethodCall &methodCall, std::unique_ptr> result); void LoadGlb( const flutter::MethodCall &methodCall, std::unique_ptr> result); void RotateStart( const flutter::MethodCall &methodCall, std::unique_ptr> result); void RotateEnd( const flutter::MethodCall &methodCall, std::unique_ptr> result); void RotateUpdate( const flutter::MethodCall &methodCall, std::unique_ptr> result); void PanStart( const flutter::MethodCall &methodCall, std::unique_ptr> result); void PanUpdate( const flutter::MethodCall &methodCall, std::unique_ptr> result); void PanEnd( const flutter::MethodCall &methodCall, std::unique_ptr> result); void SetPosition( const flutter::MethodCall &methodCall, std::unique_ptr> result); void SetRotation( const flutter::MethodCall &methodCall, std::unique_ptr> result); void GetAnimationNames( const flutter::MethodCall &methodCall, std::unique_ptr> result); void RemoveAsset( const flutter::MethodCall &methodCall, std::unique_ptr> result); void TransformToUnitCube( const flutter::MethodCall &methodCall, std::unique_ptr> result); void GrabBegin(const flutter::MethodCall &methodCall, std::unique_ptr> result); void GrabEnd(const flutter::MethodCall &methodCall, std::unique_ptr> result); void GrabUpdate(const flutter::MethodCall &methodCall, std::unique_ptr> result); void ScrollBegin(const flutter::MethodCall &methodCall, std::unique_ptr> result); void ScrollEnd(const flutter::MethodCall &methodCall, std::unique_ptr> result); void ScrollUpdate(const flutter::MethodCall &methodCall, std::unique_ptr> result); void ClearAssets( const flutter::MethodCall &methodCall, std::unique_ptr> result); void ClearLights( const flutter::MethodCall &methodCall, std::unique_ptr> result); void MoveCameraToAsset( const flutter::MethodCall &methodCall, std::unique_ptr> result); void SetViewFrustumCulling( const flutter::MethodCall &methodCall, std::unique_ptr> result); ResourceBuffer loadResource(const char *path); void freeResource(ResourceBuffer rbuf); }; } // namespace polyvox_filament #endif // FLUTTER_PLUGIN_POLYVOX_FILAMENT_PLUGIN_H_