]> git.lizzy.rs Git - irrlicht.git/commitdiff
Extract and use singular CNullDriver::checkImage
authornumzero <numzer0@yandex.ru>
Fri, 7 Apr 2023 22:45:11 +0000 (01:45 +0300)
committersfan5 <sfan5@live.de>
Sat, 8 Apr 2023 17:07:16 +0000 (19:07 +0200)
source/Irrlicht/CNullDriver.cpp
source/Irrlicht/CNullDriver.h

index 43b59d0373b07ee8f358b2e08e7659204e7a16c2..6ef7c17a7e5d67a84b6531552679d1edceac1fac 100644 (file)
@@ -344,10 +344,7 @@ ITexture* CNullDriver::addTexture(const core::dimension2d<u32>& size, const io::
        IImage* image = new CImage(format, size);\r
        ITexture* t = 0;\r
 \r
-       core::array<IImage*> imageArray(1);\r
-       imageArray.push_back(image);\r
-\r
-       if (checkImage(imageArray))\r
+       if (checkImage(image))\r
        {\r
                t = createDeviceDependentTexture(name, image);\r
        }\r
@@ -376,10 +373,7 @@ ITexture* CNullDriver::addTexture(const io::path& name, IImage* image)
 \r
        ITexture* t = 0;\r
 \r
-       core::array<IImage*> imageArray(1);\r
-       imageArray.push_back(image);\r
-\r
-       if (checkImage(imageArray))\r
+       if (checkImage(image))\r
        {\r
                t = createDeviceDependentTexture(name, image);\r
        }\r
@@ -559,9 +553,7 @@ video::ITexture* CNullDriver::loadTextureFromFile(io::IReadFile* file, const io:
        if (!image)\r
                return nullptr;\r
 \r
-       core::array<IImage*> imageArray;\r
-       imageArray.push_back(image);\r
-       if (checkImage(imageArray)) {\r
+       if (checkImage(image)) {\r
                texture = createDeviceDependentTexture(hashName.size() ? hashName : file->getFileName(), image);\r
                if (texture)\r
                        os::Printer::log("Loaded texture", file->getFileName(), ELL_DEBUG);\r
@@ -1039,90 +1031,92 @@ bool CNullDriver::checkPrimitiveCount(u32 prmCount) const
        return true;\r
 }\r
 \r
-bool CNullDriver::checkImage(const core::array<IImage*>& image) const\r
+bool CNullDriver::checkImage(IImage *image) const\r
 {\r
-       bool status = true;\r
+       ECOLOR_FORMAT format = image->getColorFormat();\r
+       core::dimension2d<u32> size = image->getDimension();\r
 \r
-       if (image.size() > 0)\r
+       switch (format)\r
        {\r
-               ECOLOR_FORMAT lastFormat = image[0]->getColorFormat();\r
-               core::dimension2d<u32> lastSize = image[0]->getDimension();\r
-\r
-               for (u32 i = 0; i < image.size() && status; ++i)\r
+       case ECF_DXT1:\r
+       case ECF_DXT2:\r
+       case ECF_DXT3:\r
+       case ECF_DXT4:\r
+       case ECF_DXT5:\r
+               if (!queryFeature(EVDF_TEXTURE_COMPRESSED_DXT))\r
                {\r
-                       ECOLOR_FORMAT format = image[i]->getColorFormat();\r
-                       core::dimension2d<u32> size = image[i]->getDimension();\r
-\r
-                       switch (format)\r
-                       {\r
-                       case ECF_DXT1:\r
-                       case ECF_DXT2:\r
-                       case ECF_DXT3:\r
-                       case ECF_DXT4:\r
-                       case ECF_DXT5:\r
-                               if (!queryFeature(EVDF_TEXTURE_COMPRESSED_DXT))\r
-                               {\r
-                                       os::Printer::log("DXT texture compression not available.", ELL_ERROR);\r
-                                       status = false;\r
-                               }\r
-                               else if (size.getOptimalSize(true, false) != size)\r
-                               {\r
-                                       os::Printer::log("Invalid size of image for DXT texture, size of image must be power of two.", ELL_ERROR);\r
-                                       status = false;\r
-                               }\r
-                               break;\r
-                       case ECF_PVRTC_RGB2:\r
-                       case ECF_PVRTC_ARGB2:\r
-                       case ECF_PVRTC_RGB4:\r
-                       case ECF_PVRTC_ARGB4:\r
-                               if (!queryFeature(EVDF_TEXTURE_COMPRESSED_PVRTC))\r
-                               {\r
-                                       os::Printer::log("PVRTC texture compression not available.", ELL_ERROR);\r
-                                       status = false;\r
-                               }\r
-                               else if (size.getOptimalSize(true, false) != size)\r
-                               {\r
-                                       os::Printer::log("Invalid size of image for PVRTC compressed texture, size of image must be power of two and squared.", ELL_ERROR);\r
-                                       status = false;\r
-                               }\r
-                               break;\r
-                       case ECF_PVRTC2_ARGB2:\r
-                       case ECF_PVRTC2_ARGB4:\r
-                               if (!queryFeature(EVDF_TEXTURE_COMPRESSED_PVRTC2))\r
-                               {\r
-                                       os::Printer::log("PVRTC2 texture compression not available.", ELL_ERROR);\r
-                                       status = false;\r
-                               }\r
-                               break;\r
-                       case ECF_ETC1:\r
-                               if (!queryFeature(EVDF_TEXTURE_COMPRESSED_ETC1))\r
-                               {\r
-                                       os::Printer::log("ETC1 texture compression not available.", ELL_ERROR);\r
-                                       status = false;\r
-                               }\r
-                               break;\r
-                       case ECF_ETC2_RGB:\r
-                       case ECF_ETC2_ARGB:\r
-                               if (!queryFeature(EVDF_TEXTURE_COMPRESSED_ETC2))\r
-                               {\r
-                                       os::Printer::log("ETC2 texture compression not available.", ELL_ERROR);\r
-                                       status = false;\r
-                               }\r
-                               break;\r
-                       default:\r
-                               break;\r
-                       }\r
-\r
-                       if (format != lastFormat || size != lastSize)\r
-                               status = false;\r
+                       os::Printer::log("DXT texture compression not available.", ELL_ERROR);\r
+                       return false;\r
                }\r
+               else if (size.getOptimalSize(true, false) != size)\r
+               {\r
+                       os::Printer::log("Invalid size of image for DXT texture, size of image must be power of two.", ELL_ERROR);\r
+                       return false;\r
+               }\r
+               break;\r
+       case ECF_PVRTC_RGB2:\r
+       case ECF_PVRTC_ARGB2:\r
+       case ECF_PVRTC_RGB4:\r
+       case ECF_PVRTC_ARGB4:\r
+               if (!queryFeature(EVDF_TEXTURE_COMPRESSED_PVRTC))\r
+               {\r
+                       os::Printer::log("PVRTC texture compression not available.", ELL_ERROR);\r
+                       return false;\r
+               }\r
+               else if (size.getOptimalSize(true, false) != size)\r
+               {\r
+                       os::Printer::log("Invalid size of image for PVRTC compressed texture, size of image must be power of two and squared.", ELL_ERROR);\r
+                       return false;\r
+               }\r
+               break;\r
+       case ECF_PVRTC2_ARGB2:\r
+       case ECF_PVRTC2_ARGB4:\r
+               if (!queryFeature(EVDF_TEXTURE_COMPRESSED_PVRTC2))\r
+               {\r
+                       os::Printer::log("PVRTC2 texture compression not available.", ELL_ERROR);\r
+                       return false;\r
+               }\r
+               break;\r
+       case ECF_ETC1:\r
+               if (!queryFeature(EVDF_TEXTURE_COMPRESSED_ETC1))\r
+               {\r
+                       os::Printer::log("ETC1 texture compression not available.", ELL_ERROR);\r
+                       return false;\r
+               }\r
+               break;\r
+       case ECF_ETC2_RGB:\r
+       case ECF_ETC2_ARGB:\r
+               if (!queryFeature(EVDF_TEXTURE_COMPRESSED_ETC2))\r
+               {\r
+                       os::Printer::log("ETC2 texture compression not available.", ELL_ERROR);\r
+                       return false;\r
+               }\r
+               break;\r
+       default:\r
+               break;\r
        }\r
-       else\r
-       {\r
-               status = false;\r
-       }\r
+       return true;\r
+}\r
+\r
+bool CNullDriver::checkImage(const core::array<IImage*>& image) const\r
+{\r
+       if (!image.size())\r
+               return false;\r
 \r
-       return status;\r
+       ECOLOR_FORMAT lastFormat = image[0]->getColorFormat();\r
+       core::dimension2d<u32> lastSize = image[0]->getDimension();\r
+\r
+       for (u32 i = 0; i < image.size(); ++i) {\r
+               ECOLOR_FORMAT format = image[i]->getColorFormat();\r
+               core::dimension2d<u32> size = image[i]->getDimension();\r
+\r
+               if (!checkImage(image[i]))\r
+                       return false;\r
+\r
+               if (format != lastFormat || size != lastSize)\r
+                       return false;\r
+       }\r
+       return true;\r
 }\r
 \r
 //! Enables or disables a texture creation flag.\r
index 95fc0d9e4120424d2155014c2d402b1df792fbfc..d3d933c6d1be0588da51daeb91eb9f79ff4c7214 100644 (file)
@@ -670,6 +670,8 @@ namespace video
                //! checks triangle count and print warning if wrong\r
                bool checkPrimitiveCount(u32 prmcnt) const;\r
 \r
+               bool checkImage(IImage *image) const;\r
+\r
                bool checkImage(const core::array<IImage*>& image) const;\r
 \r
                // adds a material renderer and drops it afterwards. To be used for internal creation\r