\return The current texture creation flag enabled mode. */\r
virtual bool getTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag) const =0;\r
\r
- //! Creates a software images from a file.\r
- /** No hardware texture will be created for those images. This\r
- method is useful for example if you want to read a heightmap\r
- for a terrain renderer.\r
- \param filename Name of the file from which the images are created.\r
- \param type Pointer to E_TEXTURE_TYPE where a recommended type of the texture will be stored.\r
- \return The array of created images.\r
- If you no longer need those images, you should call IImage::drop() on each of them.\r
- See IReferenceCounted::drop() for more information. */\r
- virtual core::array<IImage*> createImagesFromFile(const io::path& filename, E_TEXTURE_TYPE* type = 0) = 0;\r
-\r
- //! Creates a software images from a file.\r
- /** No hardware texture will be created for those images. This\r
- method is useful for example if you want to read a heightmap\r
- for a terrain renderer.\r
- \param file File from which the image is created.\r
- \param type Pointer to E_TEXTURE_TYPE where a recommended type of the texture will be stored.\r
- \return The array of created images.\r
- If you no longer need those images, you should call IImage::drop() on each of them.\r
- See IReferenceCounted::drop() for more information. */\r
- virtual core::array<IImage*> createImagesFromFile(io::IReadFile* file, E_TEXTURE_TYPE* type = 0) = 0;\r
-\r
//! Creates a software image from a file.\r
/** No hardware texture will be created for this image. This\r
method is useful for example if you want to read a heightmap\r
\return The created image.\r
If you no longer need the image, you should call IImage::drop().\r
See IReferenceCounted::drop() for more information. */\r
- IImage* createImageFromFile(const io::path& filename)\r
- {\r
- core::array<IImage*> imageArray = createImagesFromFile(filename);\r
-\r
- for (u32 i = 1; i < imageArray.size(); ++i)\r
- imageArray[i]->drop();\r
-\r
- return (imageArray.size() > 0) ? imageArray[0] : 0;\r
- }\r
+ virtual IImage* createImageFromFile(const io::path& filename) = 0;\r
\r
//! Creates a software image from a file.\r
/** No hardware texture will be created for this image. This\r
\return The created image.\r
If you no longer need the image, you should call IImage::drop().\r
See IReferenceCounted::drop() for more information. */\r
- IImage* createImageFromFile(io::IReadFile* file)\r
- {\r
- core::array<IImage*> imageArray = createImagesFromFile(file);\r
-\r
- for (u32 i = 1; i < imageArray.size(); ++i)\r
- imageArray[i]->drop();\r
-\r
- return (imageArray.size() > 0) ? imageArray[0] : 0;\r
- }\r
+ virtual IImage* createImageFromFile(io::IReadFile* file) = 0;\r
\r
//! Writes the provided image to a file.\r
/** Requires that there is a suitable image writer registered\r
//! opens the file and loads it into the surface\r
video::ITexture* CNullDriver::loadTextureFromFile(io::IReadFile* file, const io::path& hashName )\r
{\r
- ITexture* texture = 0;\r
-\r
- E_TEXTURE_TYPE type = ETT_2D;\r
+ ITexture *texture = nullptr;\r
\r
- core::array<IImage*> imageArray = createImagesFromFile(file, &type);\r
-\r
- if (checkImage(imageArray))\r
- {\r
- switch (type)\r
- {\r
- case ETT_2D:\r
- texture = createDeviceDependentTexture(hashName.size() ? hashName : file->getFileName(), imageArray[0]);\r
- break;\r
- case ETT_CUBEMAP:\r
- if (imageArray.size() >= 6 && imageArray[0] && imageArray[1] && imageArray[2] && imageArray[3] && imageArray[4] && imageArray[5])\r
- {\r
- texture = createDeviceDependentTextureCubemap(hashName.size() ? hashName : file->getFileName(), imageArray);\r
- }\r
- break;\r
- default:\r
- _IRR_DEBUG_BREAK_IF(true);\r
- break;\r
- }\r
+ IImage *image = createImageFromFile(file);\r
+ if (!image)\r
+ return nullptr;\r
\r
+ core::array<IImage*> imageArray;\r
+ imageArray.push_back(image);\r
+ if (checkImage(imageArray)) {\r
+ texture = createDeviceDependentTexture(hashName.size() ? hashName : file->getFileName(), image);\r
if (texture)\r
os::Printer::log("Loaded texture", file->getFileName(), ELL_DEBUG);\r
}\r
\r
- for (u32 i = 0; i < imageArray.size(); ++i)\r
- {\r
- if (imageArray[i])\r
- imageArray[i]->drop();\r
- }\r
+ image->drop();\r
\r
return texture;\r
}\r
return (TextureCreationFlags & flag)!=0;\r
}\r
\r
-core::array<IImage*> CNullDriver::createImagesFromFile(const io::path& filename, E_TEXTURE_TYPE* type)\r
+IImage *CNullDriver::createImageFromFile(const io::path& filename)\r
{\r
- // TO-DO -> use 'move' feature from C++11 standard.\r
+ if (!filename.size())\r
+ return nullptr;\r
\r
- core::array<IImage*> imageArray;\r
-\r
- if (filename.size() > 0)\r
- {\r
- io::IReadFile* file = FileSystem->createAndOpenFile(filename);\r
-\r
- if (file)\r
- {\r
- imageArray = createImagesFromFile(file, type);\r
- file->drop();\r
- }\r
- else\r
- os::Printer::log("Could not open file of image", filename, ELL_WARNING);\r
+ io::IReadFile* file = FileSystem->createAndOpenFile(filename);\r
+ if (!file) {\r
+ os::Printer::log("Could not open file of image", filename, ELL_WARNING);\r
+ return nullptr;\r
}\r
\r
- return imageArray;\r
+ IImage *image = createImageFromFile(file);\r
+ file->drop();\r
+ return image;\r
}\r
\r
-core::array<IImage*> CNullDriver::createImagesFromFile(io::IReadFile* file, E_TEXTURE_TYPE* type)\r
+IImage *CNullDriver::createImageFromFile(io::IReadFile* file)\r
{\r
- // TO-DO -> use 'move' feature from C++11 standard.\r
-\r
- core::array<IImage*> imageArray;\r
-\r
if (!file)\r
- return imageArray;\r
+ return nullptr;\r
\r
// try to load file based on file extension\r
for (int i = SurfaceLoader.size() - 1; i >= 0; --i) {\r
continue;\r
\r
file->seek(0); // reset file position which might have changed due to previous loadImage calls\r
- if (IImage *image = SurfaceLoader[i]->loadImage(file)) {\r
- imageArray.push_back(image);\r
- return imageArray;\r
- }\r
+ if (IImage *image = SurfaceLoader[i]->loadImage(file))\r
+ return image;\r
}\r
\r
// try to load file based on what is in it\r
continue;\r
\r
file->seek(0);\r
- if (IImage *image = SurfaceLoader[i]->loadImage(file)) {\r
- imageArray.push_back(image);\r
- return imageArray;\r
- }\r
+ if (IImage *image = SurfaceLoader[i]->loadImage(file))\r
+ return image;\r
}\r
\r
- return imageArray;\r
+ return nullptr;\r
}\r
\r
\r
//! Returns if a texture creation flag is enabled or disabled.\r
bool getTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag) const override;\r
\r
- core::array<IImage*> createImagesFromFile(const io::path& filename, E_TEXTURE_TYPE* type = 0) override;\r
+ IImage *createImageFromFile(const io::path& filename) override;\r
\r
- core::array<IImage*> createImagesFromFile(io::IReadFile* file, E_TEXTURE_TYPE* type = 0) override;\r
+ IImage *createImageFromFile(io::IReadFile* file) override;\r
\r
//! Creates a software image from a byte array.\r
/** \param useForeignMemory: If true, the image will use the data pointer\r