|
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_IMAGE_H_INCLUDED__ 00006 #define __I_IMAGE_H_INCLUDED__ 00007 00008 #include "IReferenceCounted.h" 00009 #include "position2d.h" 00010 #include "rect.h" 00011 #include "SColor.h" 00012 00013 namespace irr 00014 { 00015 namespace video 00016 { 00017 00019 00022 class IImage : public virtual IReferenceCounted 00023 { 00024 public: 00025 00027 00032 virtual void* lock() = 0; 00033 00035 00037 virtual void unlock() = 0; 00038 00040 virtual const core::dimension2d<u32>& getDimension() const = 0; 00041 00043 virtual u32 getBitsPerPixel() const = 0; 00044 00046 virtual u32 getBytesPerPixel() const = 0; 00047 00049 virtual u32 getImageDataSizeInBytes() const = 0; 00050 00052 virtual u32 getImageDataSizeInPixels() const = 0; 00053 00055 virtual SColor getPixel(u32 x, u32 y) const = 0; 00056 00058 virtual void setPixel(u32 x, u32 y, const SColor &color, bool blend = false ) = 0; 00059 00061 virtual ECOLOR_FORMAT getColorFormat() const = 0; 00062 00064 virtual u32 getRedMask() const = 0; 00065 00067 virtual u32 getGreenMask() const = 0; 00068 00070 virtual u32 getBlueMask() const = 0; 00071 00073 virtual u32 getAlphaMask() const = 0; 00074 00076 virtual u32 getPitch() const =0; 00077 00079 virtual void copyToScaling(void* target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) =0; 00080 00082 virtual void copyToScaling(IImage* target) =0; 00083 00085 virtual void copyTo(IImage* target, const core::position2d<s32>& pos=core::position2d<s32>(0,0)) =0; 00086 00088 virtual void copyTo(IImage* target, const core::position2d<s32>& pos, const core::rect<s32>& sourceRect, const core::rect<s32>* clipRect=0) =0; 00089 00091 virtual void copyToWithAlpha(IImage* target, const core::position2d<s32>& pos, 00092 const core::rect<s32>& sourceRect, const SColor &color, 00093 const core::rect<s32>* clipRect = 0) =0; 00094 00096 virtual void copyToScalingBoxFilter(IImage* target, s32 bias = 0, bool blend = false) = 0; 00097 00099 virtual void fill(const SColor &color) =0; 00100 00102 static u32 getBitsPerPixelFromFormat(const ECOLOR_FORMAT format) 00103 { 00104 switch(format) 00105 { 00106 case ECF_A1R5G5B5: 00107 return 16; 00108 case ECF_R5G6B5: 00109 return 16; 00110 case ECF_R8G8B8: 00111 return 24; 00112 case ECF_A8R8G8B8: 00113 return 32; 00114 case ECF_R16F: 00115 return 16; 00116 case ECF_G16R16F: 00117 return 32; 00118 case ECF_A16B16G16R16F: 00119 return 64; 00120 case ECF_R32F: 00121 return 32; 00122 case ECF_G32R32F: 00123 return 64; 00124 case ECF_A32B32G32R32F: 00125 return 128; 00126 default: 00127 return 0; 00128 } 00129 } 00130 00132 00135 static bool isRenderTargetOnlyFormat(const ECOLOR_FORMAT format) 00136 { 00137 switch(format) 00138 { 00139 case ECF_A1R5G5B5: 00140 case ECF_R5G6B5: 00141 case ECF_R8G8B8: 00142 case ECF_A8R8G8B8: 00143 return false; 00144 default: 00145 return true; 00146 } 00147 } 00148 00149 }; 00150 00151 } // end namespace video 00152 } // end namespace irr 00153 00154 #endif 00155