Commit 03da02bd authored by hybrid's avatar hybrid

Move color check method to IImage to make it publicly available.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@2551 dfc29bdd-3216-0410-991c-e03cc46cb475
parent bd482eda
...@@ -142,7 +142,8 @@ public: ...@@ -142,7 +142,8 @@ public:
//! fills the surface with black or white //! fills the surface with black or white
virtual void fill(const SColor &color) =0; virtual void fill(const SColor &color) =0;
static u32 getBitsPerPixelFromFormat(ECOLOR_FORMAT format) //! get the amount of Bits per Pixel of the given color format
static u32 getBitsPerPixelFromFormat(const ECOLOR_FORMAT format)
{ {
switch(format) switch(format)
{ {
...@@ -171,6 +172,24 @@ public: ...@@ -171,6 +172,24 @@ public:
} }
} }
//! test if the color format is only viable for RenderTarget textures
/** Since we don't have support for e.g. floating point iimage formats
one should test if the color format can be used for arbitrary usage, or
if it is restricted to RTTs. */
static bool isRenderTargetOnlyFormat(const ECOLOR_FORMAT format)
{
switch(format)
{
case ECF_A1R5G5B5:
case ECF_R5G6B5:
case ECF_R8G8B8:
case ECF_A8R8G8B8:
return false;
default:
return true;
}
}
}; };
} // end namespace video } // end namespace video
......
...@@ -449,7 +449,6 @@ video::ITexture* CNullDriver::loadTextureFromFile(io::IReadFile* file, const cor ...@@ -449,7 +449,6 @@ video::ITexture* CNullDriver::loadTextureFromFile(io::IReadFile* file, const cor
} }
//! adds a surface, not loaded or created by the Irrlicht Engine //! adds a surface, not loaded or created by the Irrlicht Engine
void CNullDriver::addTexture(video::ITexture* texture) void CNullDriver::addTexture(video::ITexture* texture)
{ {
...@@ -471,7 +470,6 @@ void CNullDriver::addTexture(video::ITexture* texture) ...@@ -471,7 +470,6 @@ void CNullDriver::addTexture(video::ITexture* texture)
} }
//! looks if the image is already loaded //! looks if the image is already loaded
video::ITexture* CNullDriver::findTexture(const core::string<c16>& filename) video::ITexture* CNullDriver::findTexture(const core::string<c16>& filename)
{ {
...@@ -487,7 +485,6 @@ video::ITexture* CNullDriver::findTexture(const core::string<c16>& filename) ...@@ -487,7 +485,6 @@ video::ITexture* CNullDriver::findTexture(const core::string<c16>& filename)
} }
//! Creates a texture from a loaded IImage. //! Creates a texture from a loaded IImage.
ITexture* CNullDriver::addTexture(const core::string<c16>& name, IImage* image) ITexture* CNullDriver::addTexture(const core::string<c16>& name, IImage* image)
{ {
...@@ -504,12 +501,11 @@ ITexture* CNullDriver::addTexture(const core::string<c16>& name, IImage* image) ...@@ -504,12 +501,11 @@ ITexture* CNullDriver::addTexture(const core::string<c16>& name, IImage* image)
} }
//! creates a Texture //! creates a Texture
ITexture* CNullDriver::addTexture(const core::dimension2d<u32>& size, ITexture* CNullDriver::addTexture(const core::dimension2d<u32>& size,
const core::string<c16>& name, ECOLOR_FORMAT format) const core::string<c16>& name, ECOLOR_FORMAT format)
{ {
if(getRenderTargetOnlyFormat(format)) if(IImage::isRenderTargetOnlyFormat(format))
{ {
os::Printer::log("Could not create ITexture, format only supported for render target textures.", ELL_WARNING); os::Printer::log("Could not create ITexture, format only supported for render target textures.", ELL_WARNING);
return 0; return 0;
...@@ -1345,7 +1341,7 @@ IImage* CNullDriver::createImageFromData(ECOLOR_FORMAT format, ...@@ -1345,7 +1341,7 @@ IImage* CNullDriver::createImageFromData(ECOLOR_FORMAT format,
void *data, bool ownForeignMemory, void *data, bool ownForeignMemory,
bool deleteMemory) bool deleteMemory)
{ {
if(getRenderTargetOnlyFormat(format)) if(IImage::isRenderTargetOnlyFormat(format))
{ {
os::Printer::log("Could not create IImage, format only supported for render target textures.", ELL_WARNING); os::Printer::log("Could not create IImage, format only supported for render target textures.", ELL_WARNING);
return 0; return 0;
...@@ -1358,7 +1354,7 @@ IImage* CNullDriver::createImageFromData(ECOLOR_FORMAT format, ...@@ -1358,7 +1354,7 @@ IImage* CNullDriver::createImageFromData(ECOLOR_FORMAT format,
//! Creates an empty software image. //! Creates an empty software image.
IImage* CNullDriver::createImage(ECOLOR_FORMAT format, const core::dimension2d<u32>& size) IImage* CNullDriver::createImage(ECOLOR_FORMAT format, const core::dimension2d<u32>& size)
{ {
if(getRenderTargetOnlyFormat(format)) if(IImage::isRenderTargetOnlyFormat(format))
{ {
os::Printer::log("Could not create IImage, format only supported for render target textures.", ELL_WARNING); os::Printer::log("Could not create IImage, format only supported for render target textures.", ELL_WARNING);
return 0; return 0;
...@@ -1371,7 +1367,7 @@ IImage* CNullDriver::createImage(ECOLOR_FORMAT format, const core::dimension2d<u ...@@ -1371,7 +1367,7 @@ IImage* CNullDriver::createImage(ECOLOR_FORMAT format, const core::dimension2d<u
//! Creates a software image from another image. //! Creates a software image from another image.
IImage* CNullDriver::createImage(ECOLOR_FORMAT format, IImage *imageToCopy) IImage* CNullDriver::createImage(ECOLOR_FORMAT format, IImage *imageToCopy)
{ {
if(getRenderTargetOnlyFormat(format)) if(IImage::isRenderTargetOnlyFormat(format))
{ {
os::Printer::log("Could not create IImage, format only supported for render target textures.", ELL_WARNING); os::Printer::log("Could not create IImage, format only supported for render target textures.", ELL_WARNING);
return 0; return 0;
......
...@@ -600,20 +600,6 @@ namespace video ...@@ -600,20 +600,6 @@ namespace video
//! THIS METHOD HAS TO BE OVERRIDDEN BY DERIVED DRIVERS WITH OWN TEXTURES //! THIS METHOD HAS TO BE OVERRIDDEN BY DERIVED DRIVERS WITH OWN TEXTURES
virtual video::ITexture* createDeviceDependentTexture(IImage* surface, const core::string<c16>& name); virtual video::ITexture* createDeviceDependentTexture(IImage* surface, const core::string<c16>& name);
virtual bool getRenderTargetOnlyFormat(const ECOLOR_FORMAT format) const
{
switch(format)
{
case ECF_A1R5G5B5:
case ECF_R5G6B5:
case ECF_R8G8B8:
case ECF_A8R8G8B8:
return false;
default:
return true;
}
}
//! checks triangle count and print warning if wrong //! checks triangle count and print warning if wrong
bool checkPrimitiveCount(u32 prmcnt) const; bool checkPrimitiveCount(u32 prmcnt) const;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment