|
IrrlichtEngine
|
00001 // Copyright (C) 2002-2011 Nikolaus Gebhardt 00002 // This file is part of the "Irrlicht Engine". 00003 // For conditions of distribution and use, see copyright notice in irrlicht.h 00004 00005 #ifndef __I_TEXTURE_H_INCLUDED__ 00006 #define __I_TEXTURE_H_INCLUDED__ 00007 00008 #include "IReferenceCounted.h" 00009 #include "IImage.h" 00010 #include "dimension2d.h" 00011 #include "EDriverTypes.h" 00012 #include "path.h" 00013 #include "matrix4.h" 00014 00015 namespace irr 00016 { 00017 namespace video 00018 { 00019 00020 00022 enum E_TEXTURE_CREATION_FLAG 00023 { 00032 ETCF_ALWAYS_16_BIT = 0x00000001, 00033 00041 ETCF_ALWAYS_32_BIT = 0x00000002, 00042 00049 ETCF_OPTIMIZED_FOR_QUALITY = 0x00000004, 00050 00056 ETCF_OPTIMIZED_FOR_SPEED = 0x00000008, 00057 00059 ETCF_CREATE_MIP_MAPS = 0x00000010, 00060 00062 ETCF_NO_ALPHA_CHANNEL = 0x00000020, 00063 00065 00066 ETCF_ALLOW_NON_POWER_2 = 0x00000040, 00067 00070 ETCF_FORCE_32_BIT_DO_NOT_USE = 0x7fffffff 00071 }; 00072 00074 enum E_TEXTURE_LOCK_MODE 00075 { 00077 ETLM_READ_WRITE = 0, 00078 00080 00081 ETLM_READ_ONLY, 00082 00084 00086 ETLM_WRITE_ONLY 00087 }; 00088 00090 00098 class ITexture : public virtual IReferenceCounted 00099 { 00100 public: 00101 00103 ITexture(const io::path& name) : NamedPath(name) 00104 { 00105 } 00106 00108 00127 virtual void* lock(E_TEXTURE_LOCK_MODE mode=ETLM_READ_WRITE, u32 mipmapLevel=0) = 0; 00128 00130 00132 virtual void unlock() = 0; 00133 00135 00142 virtual const core::dimension2d<u32>& getOriginalSize() const = 0; 00143 00145 00146 virtual const core::dimension2d<u32>& getSize() const = 0; 00147 00149 00153 virtual E_DRIVER_TYPE getDriverType() const = 0; 00154 00156 00157 virtual ECOLOR_FORMAT getColorFormat() const = 0; 00158 00160 00163 virtual u32 getPitch() const = 0; 00164 00166 00167 virtual bool hasMipMaps() const { return false; } 00168 00170 virtual bool hasAlpha() const { 00171 return getColorFormat () == video::ECF_A8R8G8B8 || getColorFormat () == video::ECF_A1R5G5B5; 00172 } 00173 00175 00181 virtual void regenerateMipMapLevels(void* mipmapData=0) = 0; 00182 00184 00188 virtual bool isRenderTarget() const { return false; } 00189 00191 const io::SNamedPath& getName() const { return NamedPath; } 00192 00193 protected: 00194 00196 00198 inline E_TEXTURE_CREATION_FLAG getTextureFormatFromFlags(u32 flags) 00199 { 00200 if (flags & ETCF_OPTIMIZED_FOR_SPEED) 00201 return ETCF_OPTIMIZED_FOR_SPEED; 00202 if (flags & ETCF_ALWAYS_16_BIT) 00203 return ETCF_ALWAYS_16_BIT; 00204 if (flags & ETCF_ALWAYS_32_BIT) 00205 return ETCF_ALWAYS_32_BIT; 00206 if (flags & ETCF_OPTIMIZED_FOR_QUALITY) 00207 return ETCF_OPTIMIZED_FOR_QUALITY; 00208 return ETCF_OPTIMIZED_FOR_SPEED; 00209 } 00210 00211 io::SNamedPath NamedPath; 00212 }; 00213 00214 00215 } // end namespace video 00216 } // end namespace irr 00217 00218 #endif 00219