From 059fc9ebfd86df9a687a601a325405000b8bea77 Mon Sep 17 00:00:00 2001 From: Benau <Benau@users.noreply.github.com> Date: Mon, 18 Apr 2022 10:46:23 +0800 Subject: [PATCH] Add GE::getResizedImage using IReadFile --- lib/graphics_engine/include/ge_texture.hpp | 4 ++++ .../include/ge_vulkan_driver.hpp | 1 - lib/graphics_engine/src/ge_texture.cpp | 17 ++++++++++++++++- lib/irrlicht/include/IVideoDriver.h | 2 ++ lib/irrlicht/source/Irrlicht/CNullDriver.h | 1 + 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/graphics_engine/include/ge_texture.hpp b/lib/graphics_engine/include/ge_texture.hpp index 8a5e51aa2..518ebf5f7 100644 --- a/lib/graphics_engine/include/ge_texture.hpp +++ b/lib/graphics_engine/include/ge_texture.hpp @@ -5,6 +5,7 @@ #include <string> #include <ITexture.h> #include <IImage.h> +#include <IReadFile.h> namespace GE { @@ -15,6 +16,9 @@ irr::video::ITexture* createTexture(irr::video::IImage* img, irr::video::IImage* getResizedImage(const std::string& path, const irr::core::dimension2d<irr::u32>& max_size, irr::core::dimension2d<irr::u32>* orig_size = NULL); +irr::video::IImage* getResizedImage(irr::io::IReadFile* file, + const irr::core::dimension2d<irr::u32>& max_size, + irr::core::dimension2d<irr::u32>* orig_size = NULL); irr::video::ITexture* createTexture(const std::string& path, std::function<void(irr::video::IImage*)> image_mani = nullptr); }; // GE diff --git a/lib/graphics_engine/include/ge_vulkan_driver.hpp b/lib/graphics_engine/include/ge_vulkan_driver.hpp index 43add979c..5cbbb5ab2 100644 --- a/lib/graphics_engine/include/ge_vulkan_driver.hpp +++ b/lib/graphics_engine/include/ge_vulkan_driver.hpp @@ -291,7 +291,6 @@ namespace GE { return m_features; } const VkPhysicalDeviceProperties& getPhysicalDeviceProperties() const { return m_properties; } - io::IFileSystem* getFileSystem() const { return FileSystem; } VkExtent2D getSwapChainExtent() const { return m_swap_chain_extent; } size_t getSwapChainImagesCount() const { return m_vk->swap_chain_images.size(); } diff --git a/lib/graphics_engine/src/ge_texture.cpp b/lib/graphics_engine/src/ge_texture.cpp index f5c5ae301..5f7fd2990 100644 --- a/lib/graphics_engine/src/ge_texture.cpp +++ b/lib/graphics_engine/src/ge_texture.cpp @@ -4,6 +4,7 @@ #include "ge_vulkan_texture.hpp" #include "ge_texture.hpp" +#include <IFileSystem.h> #include <IVideoDriver.h> namespace GE @@ -13,7 +14,21 @@ video::IImage* getResizedImage(const std::string& path, const core::dimension2du& max_size, core::dimension2d<u32>* orig_size) { - video::IImage* image = getDriver()->createImageFromFile(path.c_str()); + io::IReadFile* file = + getDriver()->getFileSystem()->createAndOpenFile(path.c_str()); + if (file == NULL) + return NULL; + video::IImage* image = getResizedImage(file, max_size, orig_size); + file->drop(); + return image; +} // getResizedImage + +// ---------------------------------------------------------------------------- +video::IImage* getResizedImage(irr::io::IReadFile* file, + const core::dimension2du& max_size, + core::dimension2d<u32>* orig_size) +{ + video::IImage* image = getDriver()->createImageFromFile(file); if (image == NULL) return NULL; if (orig_size) diff --git a/lib/irrlicht/include/IVideoDriver.h b/lib/irrlicht/include/IVideoDriver.h index 2f23505df..f79be0010 100644 --- a/lib/irrlicht/include/IVideoDriver.h +++ b/lib/irrlicht/include/IVideoDriver.h @@ -25,6 +25,7 @@ namespace irr namespace io { class IAttributes; + class IFileSystem; struct SAttributeReadWriteOptions; class IReadFile; class IWriteFile; @@ -1483,6 +1484,7 @@ namespace video virtual void disableScissorTest() {} virtual void pauseRendering() {} virtual void unpauseRendering() {} + virtual io::IFileSystem* getFileSystem() const = 0; }; } // end namespace video diff --git a/lib/irrlicht/source/Irrlicht/CNullDriver.h b/lib/irrlicht/source/Irrlicht/CNullDriver.h index 355991a0f..22b862458 100644 --- a/lib/irrlicht/source/Irrlicht/CNullDriver.h +++ b/lib/irrlicht/source/Irrlicht/CNullDriver.h @@ -672,6 +672,7 @@ namespace video virtual bool checkDriverReset() {return false;} virtual u32 getDefaultFramebuffer() const { return 0; } + virtual io::IFileSystem* getFileSystem() const { return FileSystem; } protected: //! deletes all textures