diff --git a/lib/graphics_engine/CMakeLists.txt b/lib/graphics_engine/CMakeLists.txt index a884f936a..9d02bc8fe 100644 --- a/lib/graphics_engine/CMakeLists.txt +++ b/lib/graphics_engine/CMakeLists.txt @@ -32,6 +32,7 @@ set(GE_SOURCES src/ge_vulkan_dynamic_buffer.cpp src/ge_vulkan_features.cpp src/ge_vulkan_mesh_cache.cpp + src/ge_vulkan_scene_manager.cpp src/ge_vulkan_shader_manager.cpp src/ge_vulkan_texture.cpp src/ge_gl_texture.cpp diff --git a/lib/graphics_engine/include/ge_vulkan_scene_manager.hpp b/lib/graphics_engine/include/ge_vulkan_scene_manager.hpp new file mode 100644 index 000000000..641b6cc9c --- /dev/null +++ b/lib/graphics_engine/include/ge_vulkan_scene_manager.hpp @@ -0,0 +1,26 @@ +#ifndef HEADER_GE_VULKAN_SCENE_MANAGER_HPP +#define HEADER_GE_VULKAN_SCENE_MANAGER_HPP + +#include "../source/Irrlicht/CSceneManager.h" + +namespace GE +{ + +class GEVulkanSceneManager : public irr::scene::CSceneManager +{ +private: +public: + // ------------------------------------------------------------------------ + GEVulkanSceneManager(irr::video::IVideoDriver* driver, + irr::io::IFileSystem* fs, + irr::gui::ICursorControl* cursor_control, + irr::scene::IMeshCache* cache, + irr::gui::IGUIEnvironment* gui_environment); + // ------------------------------------------------------------------------ + ~GEVulkanSceneManager(); + // ------------------------------------------------------------------------ +}; // GEVulkanSceneManager + +} + +#endif diff --git a/lib/graphics_engine/src/ge_vulkan_scene_manager.cpp b/lib/graphics_engine/src/ge_vulkan_scene_manager.cpp new file mode 100644 index 000000000..f628578df --- /dev/null +++ b/lib/graphics_engine/src/ge_vulkan_scene_manager.cpp @@ -0,0 +1,21 @@ +#include "ge_vulkan_scene_manager.hpp" + +namespace GE +{ +// ---------------------------------------------------------------------------- +GEVulkanSceneManager::GEVulkanSceneManager(irr::video::IVideoDriver* driver, + irr::io::IFileSystem* fs, + irr::gui::ICursorControl* cursor_control, + irr::scene::IMeshCache* cache, + irr::gui::IGUIEnvironment* gui_environment) + : CSceneManager(driver, fs, cursor_control, cache, + gui_environment) +{ +} // GEVulkanSceneManager + +// ---------------------------------------------------------------------------- +GEVulkanSceneManager::~GEVulkanSceneManager() +{ +} // ~GEVulkanSceneManager + +} diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceSDL.cpp b/lib/irrlicht/source/Irrlicht/CIrrDeviceSDL.cpp index d7504fe3f..1e1b9eec0 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceSDL.cpp +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceSDL.cpp @@ -23,6 +23,7 @@ #include "ge_main.hpp" #include "glad/gl.h" #include "ge_vulkan_driver.hpp" +#include "ge_vulkan_scene_manager.hpp" #include "MoltenVK.h" extern bool GLContextDebugBit; @@ -189,7 +190,12 @@ CIrrDeviceSDL::CIrrDeviceSDL(const SIrrlichtCreationParameters& param) createDriver(); if (VideoDriver) - createGUIAndScene(); + { + if (CreationParams.DriverType == video::EDT_VULKAN) + createGUIAndVulkanScene(); + else + createGUIAndScene(); + } #ifdef IOS_STK SDL_SetEventFilter(handle_app_event, NULL); #endif @@ -1582,6 +1588,20 @@ s32 CIrrDeviceSDL::getRightPadding() } +void CIrrDeviceSDL::createGUIAndVulkanScene() +{ + #ifdef _IRR_COMPILE_WITH_GUI_ + // create gui environment + GUIEnvironment = gui::createGUIEnvironment(FileSystem, VideoDriver, Operator); + #endif + + // create Scene manager + SceneManager = new GE::GEVulkanSceneManager(VideoDriver, FileSystem, CursorControl, NULL, GUIEnvironment); + + setEventReceiver(UserReceiver); +} + + } // end namespace irr #endif // _IRR_COMPILE_WITH_SDL_DEVICE_ diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceSDL.h b/lib/irrlicht/source/Irrlicht/CIrrDeviceSDL.h index 08ec78345..95412d4fb 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceSDL.h +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceSDL.h @@ -327,6 +327,7 @@ class MoltenVK; #ifdef DLOPEN_MOLTENVK MoltenVK* m_moltenvk; #endif + void createGUIAndVulkanScene(); }; } // end namespace irr