#ifndef FLUTTER_PLUGIN_POLYVOX_FILAMENT_PLUGIN_H_ #define FLUTTER_PLUGIN_POLYVOX_FILAMENT_PLUGIN_H_ #include #include #include #include #include #include #include #include "GL/GL.h" #include "GL/GLu.h" #ifdef USE_ANGLE #include "flutter_angle_texture.h" #else #include "opengl_texture_buffer.h" #endif #include "PolyvoxFilamentApi.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::map _resources; std::shared_ptr _renderMutex; void CreateTexture( const flutter::MethodCall &methodCall, std::unique_ptr> result); void DestroyTexture( const flutter::MethodCall &methodCall, std::unique_ptr> result); void RenderCallback(); ResourceBuffer loadResource(const char *path); void freeResource(ResourceBuffer rbuf); private: #ifdef USE_ANGLE EGLContext _context = NULL; EGLConfig _eglConfig = NULL; EGLDisplay _eglDisplay = NULL; std::unique_ptr _active = nullptr; ID3D11Device* _D3D11Device = nullptr; ID3D11DeviceContext* _D3D11DeviceContext = nullptr; bool CreateSharedEGLContext(); bool MakeD3DTexture(uint32_t width, uint32_t height, std::unique_ptr> result); #else std::unique_ptr _active = nullptr; std::unique_ptr _inactive = nullptr; // shared OpenGLContext HGLRC _context = NULL; bool CreateSharedWGLContext(); bool MakeOpenGLTexture(uint32_t width, uint32_t height, std::unique_ptr> result); #endif }; } // namespace polyvox_filament #endif // FLUTTER_PLUGIN_POLYVOX_FILAMENT_PLUGIN_H_