#include <texture_far.h>
Inheritance diagram for NL3D::CTextureFar:
TODO: keeping the far texture level1 alive when the tile pass in level0 (tile mode), don't erase it. TODO: add an hysteresis to avoid swap of far texture on boundaries of levels TODO: set the upload format in rgba565
Nevrax France
Definition at line 85 of file texture_far.h.
Public Types | |
enum | TMagFilter { Nearest = 0, Linear, MagFilterCount } |
enum | TMinFilter { NearestMipMapOff = 0, NearestMipMapNearest, NearestMipMapLinear, LinearMipMapOff, LinearMipMapNearest, LinearMipMapLinear, MinFilterCount } |
enum | TType { RGBA = 0, Luminance, Alpha, AlphaLuminance, DXTC1, DXTC1Alpha, DXTC3, DXTC5, DsDt, ModeCount, DonTKnow = 0xffffffff } |
enum | TUploadFormat { Auto = 0, RGBA8888, RGBA4444, RGBA5551, RGB888, RGB565, DXTC1, DXTC1Alpha, DXTC3, DXTC5, Luminance, Alpha, AlphaLuminance, DsDt, UploadFormatCount } |
enum | TWrapMode { Repeat = 0, Clamp, WrapModeCount } |
Public Member Functions | |
void | allocatePatch (CPatch *pPatch, uint farIndex, float &farUScale, float &farVScale, float &farUBias, float &farVBias, bool &bRot) |
virtual bool | allowDegradation () const |
Does this texture allow the driver to degrade. | |
void | blend (CBitmap &Bm0, CBitmap &Bm1, uint16 factor, bool inputBitmapIsMutable=false) |
bool | blit (const CBitmap *src, sint32 x, sint32 y) |
void | buildMipMaps () |
virtual ITexture * | buildNonSelectableVersion (uint index) |
void | clearTouched (void) |
bool | convertToType (TType type) |
CTextureFar () | |
Constructor. | |
virtual void | doGenerate (bool async=false) |
bool | endPatchULTouch () const |
void | flipH () |
void | flipV () |
void | generate (bool async=false) |
virtual std::string | getClassName ()=0 |
CRGBAF | getColor (float x, float y) const |
virtual uint32 | getHeight (uint32 numMipMap=0) const |
uint32 | getMipMapCount () const |
CTextureFar * | getNextUL () const |
For lighting update, get Next (CiruclarList). If ==this, then list is empty. | |
CRGBA | getPixelColor (sint x, sint y, uint32 numMipMap=0) const |
TType | getPixelFormat () const |
const sint & | getRefCount () const |
bool | getReleasable () const |
virtual std::string | getShareName () const |
uint32 | getSize (uint32 numMipMap=0) const |
virtual uint32 | getWidth (uint32 numMipMap=0) const |
bool | isAllInvalidated () const |
virtual bool | isBumpMap () const |
bool | isGrayscaleAsAlpha () const |
virtual bool | isSelectable () const |
Test wether this texture is selectable. | |
void | linkBeforeUL (CTextureFar *textNext) |
For lighting update, insert this before textNext (CiruclarList). textNext must be !NULL. | |
uint8 | load (NLMISC::IStream &f, uint mipMapSkip=0) |
void | loadGrayscaleAsAlpha (bool loadAsAlpha) |
void | makeDummy () |
virtual void | release () |
void | releaseDriverSetup () |
Release the Driver info for this texture (if any). Call it with care. | |
void | releaseMipMaps () |
void | removePatch (CPatch *pPatch, uint farIndex) |
void | resample (sint32 nNewWidth, sint32 nNewHeight) |
void | reset (TType type=RGBA) |
void | resize (sint32 nNewWidth, sint32 nNewHeight, TType newType=DonTKnow, bool resetTo0=true) |
void | resizeMipMap (uint32 numMipMap, sint32 nNewWidth, sint32 nNewHeight, bool resetTo0=true) |
void | rot90CCW () |
void | rot90CW () |
void | rotateCCW () |
virtual void | selectTexture (uint index) |
void | setMipMapCount (uint32 mmc) |
void | setReleasable (bool r) |
bool | setupedIntoDriver () const |
void | startPatchULTouch () |
virtual bool | supportSharing () const |
void | touch () |
bool | touched (void) |
uint | touchPatchULAndNext () |
void | touchRect (const NLMISC::CRect &rect) |
sint | tryAllocatePatch (CPatch *pPatch, uint farIndex) |
void | unlinkUL () |
For lighting update, unlink (CiruclarList). | |
void | validateGenerateFlag () |
bool | writeJPG (NLMISC::IStream &f, uint8 quality=80) |
bool | writeTGA (NLMISC::IStream &f, uint32 d, bool upsideDown=false) |
virtual | ~CTextureFar () |
Static Public Member Functions | |
void | loadSize (const std::string &path, uint32 &retWidth, uint32 &retHeight) |
void | loadSize (NLMISC::IStream &f, uint32 &width, uint32 &height) |
Data Fields | |
CTileFarBank * | _Bank |
A pointer on the far bank. | |
std::list< NLMISC::CRect > | _ListInvalidRect |
sint | crefs |
CPtrInfo * | pinfo |
enum NLMISC::CBitmap::TType | PixelFormat |
NLMISC::CRefPtr< CTextureDrvShare > | TextureDrvShare |
Static Public Attributes | |
const uint32 | bitPerPixels [ModeCount] |
const uint32 | DXTC1HEADER = NL_MAKEFOURCC('D','X', 'T', '1') |
const uint32 | DXTC3HEADER = NL_MAKEFOURCC('D','X', 'T', '3') |
const uint32 | DXTC5HEADER = NL_MAKEFOURCC('D','X', 'T', '5') |
CPtrInfo | NullPtrInfo |
Protected Attributes | |
CObjectVector< uint8 > | _Data [MAX_MIPMAP] |
uint32 | _Height |
bool | _LoadGrayscaleAsAlpha |
uint8 | _MipMapCount |
bool | _Touched |
uint32 | _Width |
Private Types | |
typedef std::map< CPatchIdent, CVector2s > | TPatchToPosMap |
typedef std::map< CVector2s, CPatchIdent > | TPosToPatchMap |
Private Member Functions | |
uint | getFreeListId (uint width, uint height) |
bool | getUpperSize (uint &width, uint &height) |
NLMISC_DECLARE_CLASS (CTextureFar) | |
void | rebuildPatch (const CVector2s texturePos, const CPatchIdent &pid) |
void | recursSplitNext (uint width, uint height) |
virtual void | serial (NLMISC::IStream &f) throw (NLMISC::EStream) |
From IStreamable. | |
Private Attributes | |
std::list< CVector2s > | _FreeSpaces [(4+NL_NUM_PIXELS_ON_FAR_TILE_EDGE_SHIFT)*4] |
TPatchToPosMap::iterator | _ItULPatch |
TPatchToPosMap | _PatchToPosMap |
TPosToPatchMap | _PosToPatchMap |
CTextureFar * | _ULNext |
CTextureFar * | _ULPrec |
UpdateLighting. CiruclarList. | |
Static Private Attributes | |
NLMISC::CRGBA | _LightmapExpanded [] |
uint8 | _LumelExpanded [] |
NLMISC::CRGBA | _TileTLIColors [] |
Friends | |
struct | CPtrInfo |
|
Map of Patchs stored in this texture Far. Should be == to _WidthPatches*_HeightPatches Definition at line 176 of file texture_far.h. |
|
Definition at line 177 of file texture_far.h. |
|
Magnification mode. Same behavior as OpenGL. Definition at line 148 of file texture.h. Referenced by NL3D::ITexture::getMagFilter().
00149 { 00150 Nearest=0, 00151 Linear, 00152 00153 MagFilterCount 00154 }; |
|
Minifying mode. Same behavior as OpenGL. If the bitmap has no mipmap, and mipmap is required, then mipmaps are computed.
Definition at line 159 of file texture.h. Referenced by NL3D::ITexture::getMinFilter().
00160 { 00161 NearestMipMapOff=0, 00162 NearestMipMapNearest, 00163 NearestMipMapLinear, 00164 LinearMipMapOff, 00165 LinearMipMapNearest, 00166 LinearMipMapLinear, 00167 00168 MinFilterCount 00169 }; |
|
Definition at line 234 of file bitmap.h.
00235 { 00236 RGBA=0, 00237 Luminance, 00238 Alpha, 00239 AlphaLuminance, 00240 DXTC1, 00241 DXTC1Alpha, 00242 DXTC3, 00243 DXTC5, 00244 DsDt, 00245 ModeCount, 00246 DonTKnow=0xffffffff 00247 } PixelFormat; |
|
Definition at line 125 of file texture.h. Referenced by NL3D::ITexture::getUploadFormat().
00126 { 00127 Auto= 0, 00128 RGBA8888, 00129 RGBA4444, 00130 RGBA5551, 00131 RGB888, 00132 RGB565, 00133 DXTC1, 00134 DXTC1Alpha, 00135 DXTC3, 00136 DXTC5, 00137 Luminance, 00138 Alpha, 00139 AlphaLuminance, 00140 DsDt, 00141 UploadFormatCount 00142 }; |
|
Definition at line 117 of file texture.h.
00118 { 00119 Repeat= 0, 00120 Clamp, 00121 00122 WrapModeCount 00123 }; |
|
Constructor.
Definition at line 48 of file texture_far.cpp. References _FreeSpaces, _ItULPatch, _PatchToPosMap, _ULNext, _ULPrec, getFreeListId(), NL_MAX_FAR_PATCH_EDGE, NL_MAX_TILES_BY_PATCH_EDGE, NL_NUM_FAR_BIGGEST_PATCH_PER_EDGE, nlctassert, NL3D::ITexture::setFilterMode(), NL3D::ITexture::setReleasable(), NL3D::ITexture::setUploadFormat(), NL3D::ITexture::setWrapS(), NL3D::ITexture::setWrapT(), uint, NL3D::CTextureFar::CVector2s::x, and NL3D::CTextureFar::CVector2s::y.
00049 { 00050 /* NB: define Values work only if NL_MAX_TILES_BY_PATCH_EDGE is 16. 00051 Else must change NL_MAX_FAR_EDGE and NL_NUM_RECTANGLE_RATIO 00052 */ 00053 nlctassert(NL_MAX_TILES_BY_PATCH_EDGE==16); 00054 00055 // This texture is releasable. It doesn't stays in standard memory after been uploaded into video memory. 00056 setReleasable (true); 00057 00058 // Init upload format 16 bits 00059 setUploadFormat(RGB565); 00060 00061 // Set filter mode. No mipmap! 00062 setFilterMode (Linear, LinearMipMapOff); 00063 00064 // Wrap 00065 setWrapS (Clamp); 00066 setWrapT (Clamp); 00067 00068 // init update Lighting 00069 _ULPrec= this; 00070 _ULNext= this; 00071 00072 // Start With All Patch of Max Far (64x64) Frees! 00073 uint freeListId= getFreeListId(NL_MAX_FAR_PATCH_EDGE, NL_MAX_FAR_PATCH_EDGE); 00074 for(uint i=0;i<NL_NUM_FAR_BIGGEST_PATCH_PER_EDGE;i++) 00075 { 00076 for(uint j=0;j<NL_NUM_FAR_BIGGEST_PATCH_PER_EDGE;j++) 00077 { 00078 CVector2s pos; 00079 pos.x= i*NL_MAX_FAR_PATCH_EDGE; 00080 pos.y= j*NL_MAX_FAR_PATCH_EDGE; 00081 00082 // add this place to the free list. 00083 _FreeSpaces[freeListId].push_back(pos); 00084 } 00085 } 00086 00087 // reset 00088 _ItULPatch= _PatchToPosMap.end(); 00089 } |
|
Definition at line 92 of file texture_far.cpp. References _ULNext, _ULPrec, and nlassert.
00093 { 00094 // verify the textureFar is correctly unlinked from any ciruclar list. 00095 nlassert(_ULPrec==this && _ULNext==this); 00096 } |
|
Allocate a patch in the CTextureFar, according to its size. nlstop if fails. Must call before tryAllocate()
Definition at line 276 of file texture_far.cpp. References _FreeSpaces, _PatchToPosMap, _PosToPatchMap, NL3D::CTextureFar::CPatchIdent::FarIndex, getFreeListId(), NL3D::CPatch::getOrderS(), NL3D::CPatch::getOrderT(), height, NL_FAR_TEXTURE_EDGE_SIZE, NL_NUM_PIXELS_ON_FAR_TILE_EDGE, nlassert, NL3D::CTextureFar::CPatchIdent::Patch, recursSplitNext(), uint, and width. Referenced by NL3D::CLandscape::getFarRenderPass().
00277 { 00278 // get the size of the subtexture to allocate 00279 uint width=(pPatch->getOrderS ()*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(farIndex-1); 00280 uint height=(pPatch->getOrderT ()*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(farIndex-1); 00281 00282 // make width the biggest 00283 if(width<height) 00284 swap(width, height); 00285 00286 // get where to find a subtexture 00287 uint freeListId= getFreeListId(width, height); 00288 00289 // if free list is empty, must split bigger patch... 00290 if(_FreeSpaces[freeListId].empty()) 00291 { 00292 // try to get a bigger subtexture and split it. 00293 recursSplitNext(width, height); 00294 } 00295 00296 // now the list should have som free space. 00297 nlassert( !_FreeSpaces[freeListId].empty() ); 00298 CVector2s pos= _FreeSpaces[freeListId].front(); 00299 00300 // Allocate. Add this entry to the maps 00301 CPatchIdent pid; 00302 pid.Patch= pPatch; 00303 pid.FarIndex= farIndex; 00304 // verify not already here. 00305 nlassert( _PatchToPosMap.find(pid) == _PatchToPosMap.end() ); 00306 _PatchToPosMap[pid]= pos; 00307 _PosToPatchMap[pos]= pid; 00308 00309 // remove from free list. 00310 _FreeSpaces[freeListId].pop_front(); 00311 00312 // Invalidate the rectangle 00313 CRect rect (pos.x, pos.y, width, height); 00314 ITexture::touchRect (rect); 00315 00316 // ** Return some values 00317 00318 // Rotation flag 00319 bRot = ( pPatch->getOrderS() < pPatch->getOrderT() ); 00320 00321 // Scale is the same for all 00322 farUScale=(float)(width-1)/(float)NL_FAR_TEXTURE_EDGE_SIZE; 00323 farVScale=(float)(height-1)/(float)NL_FAR_TEXTURE_EDGE_SIZE; 00324 00325 // UBias is the same for all 00326 farUBias=((float)pos.x+0.5f)/(float)NL_FAR_TEXTURE_EDGE_SIZE; 00327 00328 // UBias is the same for all 00329 farVBias=((float)pos.y+0.5f)/(float)NL_FAR_TEXTURE_EDGE_SIZE; 00330 } |
|
Does this texture allow the driver to degrade.
Reimplemented in NL3D::CTextureFile, and NL3D::CTextureMem. Definition at line 352 of file texture.h. Referenced by NL3D::CDriverGL::getGlTextureFormat(), NL3D::CDriverGL::setupTextureEx(), and NL3D::CDriverGL::uploadTexture().
00352 { return false; } |
|
Set this bitmap as the result of the blend bewteen 2 bitmap REQUIRE : - Bm0 and Bm1 should have the same size.
Definition at line 2817 of file bitmap.cpp. References NLMISC::CBitmap::_Data, NLMISC::CBitmap::_Height, NLMISC::CBitmap::_Width, NLMISC::CBitmap::convertToRGBA(), nlassert, NLMISC::CBitmap::PixelFormat, NLMISC::CBitmap::resize(), NLMISC::CBitmap::RGBA, uint, uint16, uint64, and uint8.
02818 { 02819 nlassert(factor <= 256); 02820 02821 nlassert(Bm0._Width != 0 && Bm0._Height != 0 02822 && Bm1._Width != 0 && Bm1._Height != 0); 02823 02824 nlassert(Bm0._Width == Bm1._Width); // the bitmap should have the same size 02825 nlassert(Bm0._Height == Bm1._Height); 02826 02827 const CBitmap *nBm0, *nBm1; // pointer to the bitmap that is used for blending, or to a copy is a conversion wa required 02828 02829 CBitmap cp0, cp1; // these bitmap are copies of Bm1 and Bm0 if a conversion was needed 02830 02831 if (Bm0.PixelFormat != RGBA) 02832 { 02833 if (inputBitmapIsMutable) 02834 { 02835 Bm0.convertToRGBA(); 02836 nBm0 = &Bm0; 02837 } 02838 else 02839 { 02840 cp0 = Bm0; 02841 cp0.convertToRGBA(); 02842 nBm0 = &cp0; 02843 } 02844 } 02845 else 02846 { 02847 nBm0 = &Bm0; 02848 } 02849 02850 02851 if (Bm1.PixelFormat != RGBA) 02852 { 02853 if (inputBitmapIsMutable) 02854 { 02855 Bm1.convertToRGBA(); 02856 nBm1 = &Bm1; 02857 } 02858 else 02859 { 02860 cp1 = Bm1; 02861 cp1.convertToRGBA(); 02862 nBm1 = &cp1; 02863 } 02864 } 02865 else 02866 { 02867 nBm1 = &Bm1; 02868 } 02869 02870 this->resize(Bm0._Width, Bm0._Height, RGBA); 02871 02872 uint numPix = _Width * _Height; // 4 component per pixels 02873 02874 02875 const uint8 *src0 = &(nBm0->_Data[0][0]); 02876 const uint8 *src1 = &(nBm1->_Data[0][0]); 02877 uint8 *dest = &(this->_Data[0][0]); 02878 02879 02880 #ifdef NL_OS_WINDOWS 02881 if (CSystemInfo::hasMMX()) 02882 { 02883 // On a P4 2GHz, with a 256x256 texture, I got the following results : 02884 // without mmx : 5.2 ms 02885 // with mmx : 1.7 ms 02886 // I'm sure this can be further optimized.. 02887 02888 uint numPixLeft = numPix & 1; // process 2 pixels at once, so special case for odd number 02889 numPix = numPix & ~1; 02890 // do fast blend with mmx 02891 uint64 blendFactor0; 02892 uint64 blendFactor1; 02893 uint16 *bf0 = (uint16 *) &blendFactor0; 02894 uint16 *bf1 = (uint16 *) &blendFactor1; 02895 bf0[0] = bf0[1] = bf0[2] = bf0[3] = factor; 02896 bf1[0] = bf1[1] = bf1[2] = bf1[3] = 256 - factor; 02897 __asm 02898 { 02899 mov esi, src0 02900 mov eax, src1 02901 mov edi, dest 02902 mov ebx, -8 02903 mov ecx, numPix 02904 shr ecx, 1 // process pixels 2 by 2 02905 movq mm1, blendFactor0 02906 movq mm0, blendFactor1 02907 02908 myLoop: 02909 pxor mm6, mm6 02910 lea ebx, [ebx + 8] // points next location 02911 pxor mm7, mm7 02912 movq mm2, [esi + ebx] 02913 movq mm3, [eax + ebx] 02914 // do blend 02915 punpckhbw mm7, mm2 // mm7 contains src0 color 0 in high bytes 02916 punpckhbw mm6, mm3 // mm6 contains src1 color 0 in high bytes 02917 psrl mm7, 1 02918 pxor mm4, mm4 // mm4 = 0 02919 psrl mm6, 1 02920 pmulhw mm7, mm0 // src0 = src0 * blendFactor 02921 pxor mm5, mm5 // mm5 = 0 02922 pmulhw mm6, mm1 // src1 = src1 * (1 - blendfactor) 02923 punpcklbw mm4, mm2 // mm4 contains src0 color 1 in high bytes 02924 paddusw mm6, mm7 // mm6 = src0[0] blended with src1[0] 02925 psrl mm4, 1 02926 punpcklbw mm5, mm3 // mm4 contains src1 color 1 in high bytes 02927 psll mm6, 1 02928 psrl mm5, 1 02929 pmulhw mm4, mm0 // src0 = src0 * blendFactor 02930 pmulhw mm5, mm1 // src1 = src1 * (1 - blendfactor) 02931 paddusw mm4, mm5 // mm6 = src0[1] blended with src1[1] 02932 psll mm4, 1 02933 // pack result 02934 packuswb mm4, mm6 02935 dec ecx 02936 movq [edi + ebx], mm4 // store result 02937 jne myLoop 02938 emms 02939 } 02940 if (numPixLeft) 02941 { 02942 // case of odd number of pixels 02943 src0 += 4 * numPix; 02944 src1 += 4 * numPix; 02945 dest += 4 * numPix; 02946 uint blendFact = (uint) factor; 02947 uint invblendFact = 256 - blendFact; 02948 *dest = (uint8) (((blendFact * *src1) + (invblendFact * *src0)) >> 8); 02949 *(dest + 1) = (uint8) (((blendFact * *(src1 + 1)) + (invblendFact * *(src0 + 1))) >> 8); 02950 *(dest + 2) = (uint8) (((blendFact * *(src1 + 2)) + (invblendFact * *(src0 + 2))) >> 8); 02951 *(dest + 3) = (uint8) (((blendFact * *(src1 + 3)) + (invblendFact * *(src0 + 3))) >> 8); 02952 } 02953 } 02954 else 02955 #endif //#ifdef NL_OS_WINDOWS 02956 { 02957 uint8 *endPix = dest + (numPix << 2); 02958 // no mmx version 02959 uint blendFact = (uint) factor; 02960 uint invblendFact = 256 - blendFact; 02961 do 02962 { 02964 *dest = (uint8) (((blendFact * *src1) + (invblendFact * *src0)) >> 8); 02965 *(dest + 1) = (uint8) (((blendFact * *(src1 + 1)) + (invblendFact * *(src0 + 1))) >> 8); 02966 *(dest + 2) = (uint8) (((blendFact * *(src1 + 2)) + (invblendFact * *(src0 + 2))) >> 8); 02967 *(dest + 3) = (uint8) (((blendFact * *(src1 + 3)) + (invblendFact * *(src0 + 3))) >> 8); 02968 02969 src0 = src0 + 4; 02970 src1 = src1 + 4; 02971 dest = dest + 4; 02972 } 02973 while (dest != endPix); 02974 } 02975 } |
|
Perform a simple blit from the source to this bitmap at the (x, y) pos The dimension of the original bitmap are preserved For now, this texture and the source must have the same format With DXTC format, the dest coordinates must be a multiple of 4 mipmap are not rebuild when present
Definition at line 2332 of file bitmap.cpp. References NLMISC::CBitmap::bitPerPixels, NLMISC::CBitmap::DonTKnow, height, nlassert, NLMISC::CBitmap::PixelFormat, sint, sint32, src, uint, uint8, width, x, and y. Referenced by NL3D::CTextureGrouped::doGenerate(), and NL3D::CCoarseMeshBuild::expand().
02333 { 02334 02335 nlassert(this->PixelFormat == src->PixelFormat); 02336 if (this->PixelFormat != src->PixelFormat) 02337 { 02338 return false; 02339 } 02340 02341 02342 // check for dxtc use 02343 02344 const bool useDXTC = PixelFormat == DXTC1 || PixelFormat == DXTC1Alpha || PixelFormat == DXTC3 || PixelFormat == DXTC5; 02345 02346 // number of bits for a 4x4 pix block 02347 const uint dxtcNumBits = PixelFormat == DXTC1 || PixelFormat == DXTC1Alpha ? 64 : 128; 02348 02349 02350 if (useDXTC) 02351 { 02352 // blit pos must be multiple of 4 02353 02354 nlassert(! (x & 3 || y & 3) ); 02355 if (x & 3 || y & 3) return false; 02356 02357 } 02358 02359 nlassert(PixelFormat != DonTKnow); 02360 02361 // the width to copy 02362 sint width = src->_Width; 02363 // the height to copy 02364 sint height = src->_Height; 02365 02366 uint destStartX, destStartY; 02367 uint srcStartX, srcStartY; 02368 02369 02370 // clip against left 02371 if (x < 0) 02372 { 02373 width += x; 02374 if (width <= 0) return true; 02375 destStartX = 0; 02376 srcStartX = -x; 02377 } 02378 else 02379 { 02380 destStartX = x; 02381 srcStartX = 0; 02382 } 02383 02384 // clip against top 02385 if (y < 0) 02386 { 02387 height += y; 02388 if (height <= 0) return true; 02389 srcStartY = -y; 02390 destStartY = 0; 02391 } 02392 else 02393 { 02394 destStartY = y; 02395 srcStartY = 0; 02396 } 02397 02398 // clip against right 02399 if ((destStartX + width - 1) >= _Width) 02400 { 02401 width = _Width - destStartX; 02402 if (width <= 0) return true; 02403 } 02404 02405 // clip against bottom 02406 if ((destStartY + height - 1) >= _Height) 02407 { 02408 height = _Height - destStartY; 02409 if (width <= 0) return true; 02410 } 02411 02412 02413 // divide all distance by 4 when using DXTC 02414 if (useDXTC) 02415 { 02416 destStartX >>= 2; 02417 destStartY >>= 2; 02418 srcStartX >>= 2; 02419 srcStartY >>= 2; 02420 width >>= 2; 02421 height >>= 2; 02422 } 02423 02424 02425 // bytes per pixs is for either one pixel or 16 (a 4x4 block in DXTC) 02426 const uint bytePerPixs = ( useDXTC ? dxtcNumBits : bitPerPixels[PixelFormat] ) >> 3 /* divide by 8 to get the number of bytes */; 02427 02428 02429 const uint destRealWidth = useDXTC ? (_Width >> 2) : _Width; 02430 const uint srcRealWidth = useDXTC ? (src->_Width >> 2) : src->_Width; 02431 02432 02433 // size to go to the next line in the destination 02434 const uint destStride = destRealWidth * bytePerPixs; 02435 02436 // size to go to the next line in the source 02437 const uint srcStride = srcRealWidth * bytePerPixs; 02438 02439 // length in bytes of a line to copy 02440 const uint lineLength = width * bytePerPixs; 02441 02442 02443 uint8 *destPos = &(_Data[0][0]) + destStride * destStartY + bytePerPixs * destStartX; 02444 const uint8 *srcPos = &(src->_Data[0][0]) + srcStride * srcStartY + bytePerPixs * srcStartX; 02445 02446 // copy each hline 02447 for (sint k = 0; k < height; ++k) 02448 { 02449 ::memcpy(destPos, srcPos, lineLength); 02450 destPos += destStride; 02451 srcPos += srcStride; 02452 } 02453 02454 02455 return true; 02456 } |
|
Build the mipmaps of the bitmap if they don't exist. Work only in RGBA mode...
Definition at line 1422 of file bitmap.cpp. References NLMISC::CBitmap::_MipMapCount, NLMISC::CRGBA::A, NLMISC::CRGBA::B, NLMISC::CRGBA::G, NLMISC::isPowerOf2(), NLMISC::CBitmap::PixelFormat, NLMISC::CRGBA::R, NLMISC::CObjectVector< uint8 >::resize(), NLMISC::CBitmap::RGBA, sint, uint32, and w. Referenced by NL3D::CHLSColorTexture::addMask(), NL3D::CTextureMem::doGenerate(), NLMISC::CBitmap::flipH(), NLMISC::CBitmap::flipV(), NLMISC::CBitmap::resample(), NLMISC::CBitmap::rot90CCW(), NLMISC::CBitmap::rot90CW(), and NL3D::CDriverGL::setupTextureEx().
01423 { 01424 uint32 i,j; 01425 01426 if(PixelFormat!=RGBA) return; 01427 if(_MipMapCount!=1) return; 01428 if(!NLMISC::isPowerOf2(_Width)) return; 01429 if(!NLMISC::isPowerOf2(_Height)) return; 01430 01431 uint32 w = _Width; 01432 uint32 h = _Height; 01433 01434 while(w>1 || h>1) 01435 { 01436 uint32 precw = w; 01437 uint32 prech = h; 01438 w = (w+1)/2; 01439 h = (h+1)/2; 01440 uint32 mulw= precw/w; 01441 uint32 mulh= prech/h; 01442 01443 _Data[_MipMapCount].resize(w*h*4); 01444 01445 01446 NLMISC::CRGBA *pRgba = (NLMISC::CRGBA*)&_Data[_MipMapCount][0]; 01447 NLMISC::CRGBA *pRgbaPrev = (NLMISC::CRGBA*)&_Data[_MipMapCount-1][0]; 01448 for(i=0; i<h; i++) 01449 { 01450 sint i0= mulh*i; 01451 sint i1= mulh*i+1; 01452 if(mulh==1) 01453 i1=i0; 01454 i0*=precw; 01455 i1*=precw; 01456 for(j=0; j<w; j++) 01457 { 01458 sint j0= mulw*j; 01459 sint j1= mulw*j+1; 01460 if(mulh==1) 01461 j1=j0; 01462 CRGBA &c0= pRgbaPrev[i0+j0]; 01463 CRGBA &c1= pRgbaPrev[i0+j1]; 01464 CRGBA &c2= pRgbaPrev[i1+j0]; 01465 CRGBA &c3= pRgbaPrev[i1+j1]; 01466 pRgba[i*w + j].R = (c0.R + 01467 c1.R + 01468 c2.R + 01469 c3.R + 2 ) /4; 01470 pRgba[i*w + j].G = (c0.G + 01471 c1.G + 01472 c2.G + 01473 c3.G + 2 ) /4; 01474 pRgba[i*w + j].B = (c0.B + 01475 c1.B + 01476 c2.B + 01477 c3.B + 2 ) /4; 01478 pRgba[i*w + j].A = (c0.A + 01479 c1.A + 01480 c2.A + 01481 c3.A + 2 ) /4; 01482 } 01483 } 01484 01485 _MipMapCount++; 01486 } 01487 } |
|
If this texture is selectable, build a non selectable version of this texture that is setupped with the given slot. NB : If this texture is selectable, you are ensured that the return pointer is not 'this' Reimplemented in NL3D::CTextureCube, and NL3D::CTextureMultiFile. Definition at line 368 of file texture.h. Referenced by NL3D::CMeshBaseInstance::selectTextureSet().
00368 { return this; } |
|
Definition at line 448 of file texture.h. References NL3D::ITexture::_ListInvalidRect. Referenced by NL3D::CDriverGL::setupTextureEx().
00449 { 00450 _Touched=false; 00451 _ListInvalidRect.clear(); 00452 } |
|
|
Generate the texture. See ITexture::doGenerate().
Implements NL3D::ITexture. Definition at line 420 of file texture_far.cpp. References _PosToPatchMap, NL_FAR_TEXTURE_EDGE_SIZE, rebuildPatch(), and uint16.
00421 { 00422 // Resize. But don't need to fill with 0!! 00423 CBitmap::resize (NL_FAR_TEXTURE_EDGE_SIZE, NL_FAR_TEXTURE_EDGE_SIZE, RGBA, false); 00424 00425 // Rectangle invalidate ? 00426 if (_ListInvalidRect.begin()!=_ListInvalidRect.end()) 00427 { 00428 // Yes, rebuild only those rectangles. 00429 00430 // For each rectangle to compute 00431 std::list<NLMISC::CRect>::iterator ite=_ListInvalidRect.begin(); 00432 while (ite!=_ListInvalidRect.end()) 00433 { 00434 // Get the PatchIdent. 00435 CVector2s pos((uint16)ite->left(), (uint16)ite->top()); 00436 TPosToPatchMap::iterator itPosToPid= _PosToPatchMap.find( pos ); 00437 // If the patch is still here... 00438 if( itPosToPid!=_PosToPatchMap.end() ) 00439 { 00440 // ReBuild the rectangle. 00441 rebuildPatch (pos, itPosToPid->second); 00442 } 00443 00444 // Next rectangle 00445 ite++; 00446 } 00447 } 00448 else 00449 { 00450 // Parse all existing Patchs. 00451 TPosToPatchMap::iterator itPosToPid= _PosToPatchMap.begin(); 00452 while( itPosToPid!= _PosToPatchMap.end() ) 00453 { 00454 // ReBuild the rectangle. 00455 rebuildPatch (itPosToPid->first, itPosToPid->second); 00456 00457 itPosToPid++; 00458 } 00459 } 00460 } |
|
Definition at line 411 of file texture_far.cpp. References _ItULPatch, and _PatchToPosMap. Referenced by NL3D::CLandscape::updateLightingTextureFar().
00412 { 00413 return _ItULPatch == _PatchToPosMap.end(); 00414 } |
|
Horizontal flip (all the columns are flipped) Definition at line 2682 of file bitmap.cpp. References NLMISC::CBitmap::_MipMapCount, NLMISC::CBitmap::buildMipMaps(), NLMISC::CBitmap::getHeight(), NLMISC::CBitmap::getWidth(), NLMISC::CBitmap::PixelFormat, NLMISC::CBitmap::releaseMipMaps(), NLMISC::CBitmap::RGBA, and sint32.
02683 { 02684 if (PixelFormat != RGBA) 02685 return; 02686 02687 sint32 nWidth = getWidth(0); 02688 sint32 nHeight = getHeight(0); 02689 sint32 i, j; 02690 NLMISC::CRGBA *pBitmap = (NLMISC::CRGBA*)&_Data[0][0]; 02691 bool needRebuild = false; 02692 CRGBA temp; 02693 02694 if(_MipMapCount>1) 02695 needRebuild = true; 02696 releaseMipMaps(); 02697 02698 for( i = 0; i < nHeight; ++i ) 02699 for( j = 0; j < nWidth/2; ++j ) 02700 { 02701 temp = pBitmap[i*nWidth+j]; 02702 pBitmap[i*nWidth+j] = pBitmap[i*nWidth+nWidth-j-1]; 02703 pBitmap[i*nWidth+nWidth-j-1] = temp; 02704 } 02705 02706 // Rebuilding mipmaps 02707 if(needRebuild) 02708 { 02709 buildMipMaps(); 02710 } 02711 } |
|
Vertical flip (all the rows are flipped) Definition at line 2714 of file bitmap.cpp. References NLMISC::CBitmap::_MipMapCount, NLMISC::CBitmap::buildMipMaps(), NLMISC::CBitmap::getHeight(), NLMISC::CBitmap::getWidth(), NLMISC::CBitmap::PixelFormat, NLMISC::CBitmap::releaseMipMaps(), NLMISC::CBitmap::RGBA, and sint32.
02715 { 02716 if (PixelFormat != RGBA) 02717 return; 02718 02719 sint32 nWidth = getWidth(0); 02720 sint32 nHeight = getHeight(0); 02721 sint32 i, j; 02722 NLMISC::CRGBA *pBitmap = (NLMISC::CRGBA*)&_Data[0][0]; 02723 bool needRebuild = false; 02724 CRGBA temp; 02725 02726 if(_MipMapCount>1) 02727 needRebuild = true; 02728 releaseMipMaps(); 02729 02730 for( j = 0; j < nHeight/2; ++j ) 02731 for( i = 0; i < nWidth; ++i ) 02732 { 02733 temp = pBitmap[j*nWidth+i]; 02734 pBitmap[j*nWidth+i] = pBitmap[(nHeight-j-1)*nWidth+i]; 02735 pBitmap[(nHeight-j-1)*nWidth+i] = temp; 02736 } 02737 02738 // Rebuilding mipmaps 02739 if(needRebuild) 02740 { 02741 buildMipMaps(); 02742 } 02743 } |
|
Generate the texture pixels. This method is called by the driver when it needs to generate pixels of the texture. If the texture is used for the first time or if it is touched, the driver will call this method. For exemple, a texture file will load the bitmap in this method. If the invalidate rect list is empty, generate() rebuild all the texture. If the invalidate rect list is not empty, generate() rebuilds only the invalidate rectangles in the list. Don't clear the touch flag or the invalid rectangle list until updating the texture in generate(). It's the generate()'s caller jobs. After generation, if the texture is releasable, the driver will release the texture by calling release(). NB: a flag is maintained to see if the generated bitmap is coherent with texture description (see touch*()). So if you do {generate(); generate();}, you only get 1 real bitmap generation... If, after the doGenerate, the bitmap format is compressed (DXTC) and no mipmaps have been generated, the mipmap are disabled beacause the user probably don't want the driver to unpacks the texture, generates the mipmaps and repacks the dxtc texture (that takes a lot of CPU time).
Definition at line 309 of file texture.h. References NL3D::ITexture::_GoodGenerate, and NL3D::ITexture::doGenerate(). Referenced by NL3D::CShadowMapManager::allocateTexture(), NL3D::CCoarseMeshBuild::buildBitmap(), NL3D::CTextureCube::doGenerate(), NL3D::CZoneLighter::getTexture(), NL3D::GetTextureSize(), NL3D::CTileBank::getTileNoiseMap(), NL3D::CZoneLighter::lightWater(), NL3D::CAsyncFileManager3D::CTextureLoad::run(), NL3D::CAsyncFileManager3D::CMeshLoad::run(), NL3D::CPSMultiTexturedParticle::setupMaterial(), and NL3D::CDriverGL::setupTextureEx().
00310 { 00311 if(!_GoodGenerate) 00312 { 00313 doGenerate(async); 00314 _GoodGenerate=true; 00315 } 00316 } |
|
Implemented in NLAIAGENT::CNumericIndex, NLAIC::IPointerGestion, NLAIC::CIdentType, and CAutomataDesc. Referenced by NLMISC::CClassRegistry::checkObject(), and NL3D::GetTextureSize(). |
|
Get the color in the bitmap given a pixel size The mipmaps must be built. If not just return the bilinear at the given point. The input x and y must be clamped between 0 and 1 Definition at line 2470 of file bitmap.cpp. References NLMISC::CRGBAF::A, NLMISC::CRGBAF::B, NLMISC::CRGBAF::G, NLMISC::CBitmap::getColorInterp(), NLMISC::CBitmap::getHeight(), NLMISC::CBitmap::getPixelColor(), NLMISC::CBitmap::getPixels(), NLMISC::CBitmap::getWidth(), nlassert, NLMISC::CBitmap::PixelFormat, NLMISC::CRGBAF::R, NLMISC::CBitmap::RGBA, sint32, uint32, x, and y.
02471 { 02472 if (x < 0.0f) x = 0.0f; 02473 if (x > 1.0f) x = 1.0f; 02474 if (y < 0.0f) y = 0.0f; 02475 if (y > 1.0f) y = 1.0f; 02476 02477 sint32 nWidth = getWidth(0); 02478 sint32 nHeight = getHeight(0); 02479 02480 if (nWidth == 0 || nHeight == 0) return CRGBAF(0, 0, 0, 0); 02481 02482 const CObjectVector<uint8> &rBitmap = getPixels(0); 02483 sint32 nX[4], nY[4]; 02484 02485 x *= nWidth-1; 02486 y *= nHeight-1; 02487 02488 // Integer part of (x,y) 02489 //nX[0] = ((sint32)floor(x-0.5f)); 02490 //nY[0] = ((sint32)floor(y-0.5f)); 02491 nX[0] = ((sint32)floor(x)); 02492 nY[0] = ((sint32)floor(y)); 02493 02494 nX[1] = (nX[0] < (nWidth-1) ? nX[0]+1 : nX[0]); 02495 nY[1] = nY[0]; 02496 02497 nX[2] = nX[0]; 02498 nY[2] = (nY[0] < (nHeight-1) ? nY[0]+1 : nY[0]); 02499 02500 nX[3] = nX[1]; 02501 nY[3] = nY[2]; 02502 02503 uint32 i; 02504 02505 for (i = 0; i < 4; ++i) 02506 { 02507 nlassert (nX[i] >= 0); 02508 nlassert (nY[i] >= 0 ); 02509 nlassert (nX[i] < nWidth); 02510 nlassert (nY[i] < nHeight); 02511 } 02512 02513 // Decimal part of (x,y) 02514 x = x - (float)nX[0]; 02515 y = y - (float)nY[0]; 02516 02517 switch (this->PixelFormat) 02518 { 02519 case RGBA: 02520 case DXTC1: 02521 case DXTC1Alpha: 02522 case DXTC3: 02523 case DXTC5: 02524 { 02525 CRGBAF finalVal; 02526 CRGBA val[4]; 02527 02528 if (this->PixelFormat == RGBA) 02529 { 02530 for (i = 0; i < 4; ++i) 02531 { 02532 val[i] = CRGBA (rBitmap[(nX[i]+nY[i]*nWidth)*4+0], 02533 rBitmap[(nX[i]+nY[i]*nWidth)*4+1], 02534 rBitmap[(nX[i]+nY[i]*nWidth)*4+2], 02535 rBitmap[(nX[i]+nY[i]*nWidth)*4+3]); 02536 } 02537 } 02538 else 02539 { 02540 // slower version : get from DXT 02541 for (i = 0; i < 4; ++i) 02542 { 02543 val[i] = getPixelColor(nX[i], nY[i]); 02544 } 02545 } 02546 02547 finalVal.R = getColorInterp (x, y, val[0].R, val[1].R, val[2].R, val[3].R); 02548 finalVal.G = getColorInterp (x, y, val[0].G, val[1].G, val[2].G, val[3].G); 02549 finalVal.B = getColorInterp (x, y, val[0].B, val[1].B, val[2].B, val[3].B); 02550 finalVal.A = getColorInterp (x, y, val[0].A, val[1].A, val[2].A, val[3].A); 02551 finalVal /= 255.f; 02552 02553 return finalVal; 02554 } 02555 break; 02556 case Alpha: 02557 case Luminance: 02558 { 02559 02560 float finalVal; 02561 float val[4]; 02562 02563 for (i = 0; i < 4; ++i) 02564 val[i] = rBitmap[(nX[i]+nY[i]*nWidth)]; 02565 02566 finalVal = getColorInterp (x, y, val[0], val[1], val[2], val[3]); 02567 finalVal /= 255.f; 02568 02569 if (this->PixelFormat == Alpha) 02570 return CRGBAF (1.f, 1.f, 1.f, finalVal); 02571 else // Luminance 02572 return CRGBAF (finalVal, finalVal, finalVal, 1.f); 02573 } 02574 break; 02575 default: break; 02576 } 02577 02578 return CRGBAF (0.0f, 0.0f, 0.0f, 0.0f); 02579 } |
|
Definition at line 128 of file texture_far.cpp. References NLMISC::getPowerOf2(), height, NLMISC::isPowerOf2(), NL_MAX_FAR_PATCH_EDGE, NL_NUM_FAR_PATCH_EDGE_LEVEL, NL_NUM_FAR_RECTANGLE_RATIO, nlassert, uint, and width. Referenced by allocatePatch(), CTextureFar(), recursSplitNext(), removePatch(), and tryAllocatePatch().
00129 { 00130 nlassert(width>=height); 00131 nlassert(isPowerOf2(width)); 00132 nlassert(isPowerOf2(height)); 00133 nlassert(width<=NL_MAX_FAR_PATCH_EDGE); 00134 00135 // compute the level index 00136 uint sizeIndex= getPowerOf2(NL_MAX_FAR_PATCH_EDGE / width); 00137 nlassert(sizeIndex < NL_NUM_FAR_PATCH_EDGE_LEVEL); 00138 00139 // Compute the aspect ratio index. 00140 uint aspectRatioIndex= getPowerOf2(width/height); 00141 nlassert(aspectRatioIndex < NL_NUM_FAR_RECTANGLE_RATIO ); 00142 00143 return sizeIndex*NL_NUM_FAR_RECTANGLE_RATIO + aspectRatioIndex; 00144 } |
|
Return the image height, or a mipmap height.
Definition at line 1388 of file bitmap.cpp. Referenced by NL3D::CHLSColorTexture::addMask(), NL3D::CLodCharacterTmpBitmap::build(), NL3D::CCoarseMeshBuild::buildBitmap(), NL3D::CTextureFile::buildBitmapFromFile(), NL3D::CFontManager::computeString(), NL3D::CFastHLSModifier::convertDDSBitmap(), draw2dLine(), NL3D::CCoarseMeshBuild::expand(), NL3D::CDriverGL::fillBuffer(), NLMISC::CBitmap::flipH(), NLMISC::CBitmap::flipV(), NL3D::CPatchDLMContext::generate(), NLMISC::CBitmap::getColor(), NLMISC::CBitmap::getDXTC1Texel(), NLMISC::CBitmap::getDXTC3Texel(), NLMISC::CBitmap::getDXTC5Texel(), NLMISC::CBitmap::getRGBAPixel(), NLMISC::CBitmap::getSize(), NL3D::GetTextureSize(), NL3D::CTileBank::getTileNoiseMap(), NL3D::CZoneLighter::lightWater(), NL3D::CShapeBank::processWSUploadTexture(), RenderTriangle(), NLMISC::CBitmap::rot90CCW(), NLMISC::CBitmap::rot90CW(), NL3D::CHLSColorTexture::setBitmap(), NL3D::CDriverGL::setupTextureEx(), NL3D::CDriverGL::uploadTexture(), and NL3D::CAsyncTextureManager::uploadTexturePart().
|
|
Definition at line 214 of file texture.h. References NL3D::ITexture::_MagFilter, and NL3D::ITexture::TMagFilter. Referenced by NL3D::CDriverGL::activateTexture(), and NL3D::CDriverGL::setupTextureEx().
00214 {return _MagFilter;}
|
|
Definition at line 215 of file texture.h. References NL3D::ITexture::_MinFilter, and NL3D::ITexture::TMinFilter. Referenced by NL3D::CDriverGL::activateTexture(), and NL3D::CDriverGL::setupTextureEx().
00215 {return _MinFilter;}
|
|
Return the number of mipmaps. Level0 is a mipmap...
Definition at line 369 of file bitmap.h. References NLMISC::CBitmap::_MipMapCount, and uint32. Referenced by NL3D::CHLSColorTexture::addMask(), NL3D::CShapeBank::processWSUploadTexture(), NL3D::CHLSColorTexture::setBitmap(), NL3D::CDriverGL::setupTextureEx(), NL3D::CDriverGL::uploadTexture(), NL3D::CAsyncTextureManager::uploadTexturePart(), and NL3D::CAsyncTextureManager::validDXTCMipMap().
00370 { 00371 return _MipMapCount; 00372 } |
|
For lighting update, get Next (CiruclarList). If ==this, then list is empty.
Definition at line 139 of file texture_far.h. References _ULNext. Referenced by NL3D::CLandscape::clearFarRenderPass(), and NL3D::CLandscape::updateLightingTextureFar().
00139 {return _ULNext;} |
|
Get the pixel at the given coorrdinate. Works in RGBA and DXTC modes. Outside of the bitmap it returns Black (or if mipmap is not found) Definition at line 3134 of file bitmap.cpp. References NLMISC::CBitmap::getDXTC1Texel(), NLMISC::CBitmap::getDXTC3Texel(), NLMISC::CBitmap::getDXTC5Texel(), NLMISC::CBitmap::getRGBAPixel(), nlstop, NLMISC::CBitmap::PixelFormat, NLMISC::CBitmap::RGBA, sint, uint32, x, and y. Referenced by NLMISC::CBitmap::getColor().
03135 { 03136 03137 switch (PixelFormat) 03138 { 03139 case RGBA: 03140 return getRGBAPixel(x, y, numMipMap); 03141 case DXTC1: 03142 case DXTC1Alpha: 03143 return getDXTC1Texel(x, y, numMipMap); 03144 case DXTC3: 03145 return getDXTC3Texel(x, y, numMipMap); 03146 case DXTC5: 03147 return getDXTC5Texel(x, y, numMipMap); 03148 default: 03149 nlstop; 03150 break; 03151 } 03152 return CRGBA::Black; 03153 } |
|
Return the format of pixels stored at the present time in the object buffer.
Definition at line 335 of file bitmap.h. References NLMISC::CBitmap::PixelFormat. Referenced by NL3D::CFastHLSModifier::convertDDSBitmap(), NL3D::CFastHLSModifier::convertRGBABitmap(), NL3D::CTextureGrouped::doGenerate(), NL3D::CDriverGL::fillBuffer(), NL3D::getGlSrcTextureFormat(), NL3D::CDriverGL::getGlTextureFormat(), NL3D::CShapeBank::processWSUploadTexture(), rebuildPatch(), NL3D::CHLSColorTexture::setBitmap(), NL3D::CDriverGL::setupTextureEx(), NL3D::CAsyncTextureManager::update(), NL3D::CDriverGL::uploadTexture(), NL3D::CAsyncTextureManager::uploadTexturePart(), and NL3D::CAsyncTextureManager::validDXTCMipMap().
00336 { 00337 return PixelFormat; 00338 } |
|
Definition at line 313 of file bitmap.h. References uint32.
00314 { 00315 //nlassert (numMipMap<=_MipMapCount); 00316 return _Data[numMipMap]; 00317 } |
|
Return the pixels buffer of the image, or of one of its mipmap. Return a reference of an array in pixel format get with getPixelFormat().
Definition at line 308 of file bitmap.h. References uint32. Referenced by NL3D::CHLSColorTexture::addMask(), NL3D::CLodCharacterTmpBitmap::build(), NL3D::CTextureFile::buildBitmapFromFile(), NL3D::CHLSColorTexture::buildColorVersion(), NL3D::CFastHLSModifier::convertDDSBitmapDXTC1Or1A(), NL3D::CFastHLSModifier::convertDDSBitmapDXTC3Or5(), NL3D::CFastHLSModifier::convertRGBABitmap(), NL3D::CTextureDLM::copyRect(), NL3D::CTextureFont::CTextureFont(), NL3D::CTextureMem::doGenerate(), NL3D::CTextureEmboss::doGenerate(), NL3D::CTextureBump::doGenerate(), draw2dLine(), NL3D::CTextureFont::dumpTextureFont(), NL3D::CCoarseMeshBuild::expand(), NL3D::CDriverGL::fillBuffer(), NL3D::CTextureDLM::fillRect(), NL3D::CDriverGL::getBufferPart(), NLMISC::CBitmap::getColor(), NLMISC::CBitmap::getDXTC1Texel(), NLMISC::CBitmap::getDXTC3Texel(), NLMISC::CBitmap::getDXTC5Texel(), NLMISC::CBitmap::getRGBAPixel(), NL3D::CTileBank::getTileNoiseMap(), NL3D::CZoneLighter::lightWater(), NL3D::CTextureDLM::modulateAndfillRect565(), NL3D::CTextureDLM::modulateAndfillRect8888(), NL3D::CTextureDLM::modulateConstantAndfillRect(), rebuildPatch(), RenderTriangle(), NL3D::CHLSColorTexture::setBitmap(), NL3D::CDriverGL::setupTextureEx(), and NL3D::CDriverGL::uploadTexture().
00309 { 00310 //nlassert (numMipMap<=_MipMapCount); 00311 return _Data[numMipMap]; 00312 } |
|
Definition at line 70 of file smart_ptr.h. References NLMISC::CRefCount::crefs, and sint.
00071 { 00072 return crefs; 00073 } |
|
Return whether texture can be released. If it returns true, the driver will release the texture after generate it and upload it into the videomemory by calling release(). If it returns false, the driver won't release the texture.
Definition at line 267 of file texture.h. References NL3D::ITexture::_Releasable. Referenced by NL3D::CTextureBump::getNormalizationFactor(), NL3D::GetTextureSize(), NL3D::CShapeBank::processWSUploadTexture(), NL3D::CDriverGL::setupTextureEx(), and NL3D::CAsyncTextureManager::uploadTexturePart().
00267 { return _Releasable; }
|
|
Return the Unique ident/name of the texture, used for Driver sharing caps. Deriver should add a prefix for their texture type. eg "file::pipoland", "noise::4-4-2" etc.... Reimplemented in NL3D::CTextureBlend, NL3D::CTextureBump, NL3D::CTextureCube, NL3D::CTextureEmboss, NL3D::CTextureFile, NL3D::CTextureGrouped, NL3D::CTextureMem, and NL3D::CTextureMultiFile. Definition at line 338 of file texture.h. Referenced by NL3D::CCoarseMeshBuild::buildBitmap(), NL3D::CZoneLighter::getTexture(), NL3D::IDriver::getTextureShareName(), NL3D::CCoarseMeshBuild::remapCoordinates(), and NL3D::CAsyncFileManager3D::CMeshLoad::run().
00338 {return std::string();}
|
|
Return the size (in pixels) of the image: <=> getHeight()*getWidth().
Definition at line 1412 of file bitmap.cpp. References NLMISC::CBitmap::getHeight(), NLMISC::CBitmap::getWidth(), and uint32. Referenced by NL3D::CShapeBank::processWSUploadTexture(), NL3D::CDriverGL::setupTextureEx(), NL3D::CAsyncTextureManager::update(), and NL3D::CAsyncTextureManager::uploadTexturePart().
|
|
Definition at line 212 of file texture.h. References NL3D::ITexture::_UploadFormat, and NL3D::ITexture::TUploadFormat. Referenced by NL3D::CTextureBump::doGenerate(), NL3D::CDriverGL::getGlTextureFormat(), and NL3D::IDriver::getTextureShareName().
00212 {return _UploadFormat;}
|
|
Definition at line 148 of file texture_far.cpp. References height, NLMISC::isPowerOf2(), NL_MAX_FAR_PATCH_EDGE, nlassert, uint, and width. Referenced by recursSplitNext(), and tryAllocatePatch().
00149 { 00150 nlassert(width>=height); 00151 nlassert(isPowerOf2(width)); 00152 nlassert(isPowerOf2(height)); 00153 00154 // if height is smaller than widht, then reduce the ratio 00155 if(width>height) 00156 { 00157 height*= 2; 00158 return true; 00159 } 00160 else 00161 { 00162 // else raise up to the next square level, if possible 00163 if(width<NL_MAX_FAR_PATCH_EDGE) 00164 { 00165 width*= 2; 00166 height*= 2; 00167 return true; 00168 } 00169 else 00170 return false; 00171 } 00172 } |
|
Return the image width, or a mipmap width.
Definition at line 1363 of file bitmap.cpp. Referenced by NL3D::CHLSColorTexture::addMask(), NL3D::CShadowMapManager::allocateTexture(), NL3D::CLodCharacterTmpBitmap::build(), NL3D::CCoarseMeshBuild::buildBitmap(), NL3D::CTextureFile::buildBitmapFromFile(), NL3D::CFontManager::computeString(), NL3D::CFastHLSModifier::convertDDSBitmap(), NL3D::CTextureDLM::copyRect(), draw2dLine(), NL3D::CCoarseMeshBuild::expand(), NL3D::CDriverGL::fillBuffer(), NL3D::CTextureDLM::fillRect(), NLMISC::CBitmap::flipH(), NLMISC::CBitmap::flipV(), NL3D::CPatchDLMContext::generate(), NLMISC::CBitmap::getColor(), NLMISC::CBitmap::getDXTC1Texel(), NLMISC::CBitmap::getDXTC3Texel(), NLMISC::CBitmap::getDXTC5Texel(), NLMISC::CBitmap::getRGBAPixel(), NLMISC::CBitmap::getSize(), NL3D::GetTextureSize(), NL3D::CTileBank::getTileNoiseMap(), NL3D::CZoneLighter::lightWater(), NL3D::CTextureDLM::modulateAndfillRect565(), NL3D::CTextureDLM::modulateAndfillRect8888(), NL3D::CTextureDLM::modulateConstantAndfillRect(), NL3D::CShapeBank::processWSUploadTexture(), RenderTriangle(), NLMISC::CBitmap::rot90CCW(), NLMISC::CBitmap::rot90CW(), NL3D::CHLSColorTexture::setBitmap(), NL3D::CDriverGL::setupTextureEx(), NL3D::CDriverGL::uploadTexture(), and NL3D::CAsyncTextureManager::uploadTexturePart().
|
|
Definition at line 204 of file texture.h. References NL3D::ITexture::_WrapS. Referenced by NL3D::CDriverGL::activateTexture(), NL3D::CZoneLighter::getTexture(), and NL3D::CDriverGL::setupTextureEx().
00204 {return _WrapS;}
|
|
Definition at line 205 of file texture.h. References NL3D::ITexture::_WrapT. Referenced by NL3D::CDriverGL::activateTexture(), NL3D::CZoneLighter::getTexture(), and NL3D::CDriverGL::setupTextureEx().
00205 {return _WrapT;}
|
|
Return true if ALL the texture is invalidate, else return false. Definition at line 428 of file texture.h. References NL3D::ITexture::_ListInvalidRect. Referenced by NL3D::CDriverGL::setupTextureEx(), and NL3D::ITexture::touchRect().
00429 { 00430 return _Touched&&(_ListInvalidRect.begin()==_ListInvalidRect.end()); 00431 } |
|
Reimplemented in NL3D::CTextureBump. Definition at line 380 of file texture.h. Referenced by NL3D::CDriverGL::setupWaterPassARB(), NL3D::CDriverGL::setupWaterPassNV20(), and NL3D::CDriverGL::setupWaterPassR200().
00380 { return false; } |
|
Tell if the bitmap loads grayscale bitmap as alpha or luminance format.
Definition at line 483 of file bitmap.h. References NLMISC::CBitmap::_LoadGrayscaleAsAlpha.
00484 { 00485 return _LoadGrayscaleAsAlpha; 00486 } |
|
Test wether this texture is selectable.
Reimplemented in NL3D::CTextureCube, and NL3D::CTextureMultiFile. Definition at line 363 of file texture.h. Referenced by NL3D::CMeshBaseInstance::selectTextureSet().
00363 { return false; } |
|
Does this texture is a cube texture.
Reimplemented in NL3D::CTextureCube. Definition at line 376 of file texture.h. Referenced by NL3D::CDriverGL::activateTexture(), NL3D::convTexAddr(), NL3D::CDriverGL::copyFrameBufferToTexture(), NL3D::CShapeBank::processWSUploadTexture(), NL3D::CDriverGL::setTextureEnvFunction(), NL3D::CDriverGL::setupTextureEx(), NL3D::CDriverGL::uploadTexture(), and NL3D::CDriverGL::uploadTextureCube().
00376 { return false; } |
|
For lighting update, insert this before textNext (CiruclarList). textNext must be !NULL.
Definition at line 100 of file texture_far.cpp. References _ULNext, _ULPrec, and nlassert. Referenced by NL3D::CLandscape::getFarRenderPass().
00101 { 00102 nlassert(textNext); 00103 00104 // first, unlink others from me. NB: works even if _ULPrec==_ULNext==this. 00105 _ULNext->_ULPrec= _ULPrec; 00106 _ULPrec->_ULNext= _ULNext; 00107 // link to igNext. 00108 _ULNext= textNext; 00109 _ULPrec= textNext->_ULPrec; 00110 // link others to me. 00111 _ULNext->_ULPrec= this; 00112 _ULPrec->_ULNext= this; 00113 } |
|
Read a bitmap(TGA or DDS) from an IStream. Bitmap supported are DDS (DXTC1, DXTC1 with Alpha, DXTC3, DXTC5, and uncompressed TGA (24 and 32 bits).
Definition at line 109 of file bitmap.cpp. References NLMISC::IStream::begin, NLMISC::DDS, depth, height, NLMISC::IStream::isReading(), nlassert, NLMISC::CBitmap::readDDS(), NLMISC::CBitmap::readTGA(), NLMISC::IStream::seek(), NLMISC::IStream::serial(), uint, uint16, uint32, uint8, and width. Referenced by NL3D::CTextureFile::buildBitmapFromFile(), and NL3D::CTextureMem::doGenerate().
00110 { 00111 nlassert(f.isReading()); 00112 00113 // testing if DDS 00114 uint32 fileType = 0;; 00115 f.serial(fileType); 00116 if(fileType == DDS) 00117 { 00118 #ifdef NEL_ALL_BITMAP_WHITE 00119 uint8 result = readDDS(f, mipMapSkip); 00120 MakeWhite (*this); 00121 return result; 00122 #else // NEL_ALL_BITMAP_WHITE 00123 return readDDS(f, mipMapSkip); 00124 #endif // NEL_ALL_BITMAP_WHITE 00125 } 00126 // assuming it's TGA 00127 else 00128 { 00129 NLMISC::IStream::TSeekOrigin origin= f.begin; 00130 if(!f.seek (0, origin)) 00131 { 00132 throw ESeekFailed(); 00133 } 00134 00135 // Reading header, 00136 // To make sure that the bitmap is TGA, we check imageType and imageDepth. 00137 uint8 lengthID; 00138 uint8 cMapType; 00139 uint8 imageType; 00140 uint16 tgaOrigin; 00141 uint16 length; 00142 uint8 depth; 00143 uint16 xOrg; 00144 uint16 yOrg; 00145 uint16 width; 00146 uint16 height; 00147 uint8 imageDepth; 00148 uint8 desc; 00149 00150 f.serial(lengthID); 00151 f.serial(cMapType); 00152 f.serial(imageType); 00153 if(imageType!=2 && imageType!=3 && imageType!=10 && imageType!=11) return 0; 00154 f.serial(tgaOrigin); 00155 f.serial(length); 00156 f.serial(depth); 00157 f.serial(xOrg); 00158 f.serial(yOrg); 00159 f.serial(width); 00160 f.serial(height); 00161 f.serial(imageDepth); 00162 if(imageDepth!=8 && imageDepth!=16 && imageDepth!=24 && imageDepth!=32) return 0; 00163 f.serial(desc); 00164 00165 if(!f.seek (0, origin)) 00166 { 00167 throw ESeekFailed(); 00168 } 00169 #ifdef NEL_ALL_BITMAP_WHITE 00170 uint8 result = readTGA(f); 00171 MakeWhite (*this); 00172 return result; 00173 #else // NEL_ALL_BITMAP_WHITE 00174 return readTGA(f); 00175 #endif // NEL_ALL_BITMAP_WHITE 00176 00177 } 00178 } |
|
Tell the bitmap to load grayscale bitmap as alpha or luminance format.
Definition at line 472 of file bitmap.h. References NLMISC::CBitmap::_LoadGrayscaleAsAlpha. Referenced by NL3D::CTextureFile::buildBitmapFromFile(), and NL3D::CTileBank::getTileNoiseMap().
00473 { 00474 _LoadGrayscaleAsAlpha=loadAsAlpha; 00475 } |
|
same than other loadSize(), but with a pathName.
Definition at line 2671 of file bitmap.cpp. References NLMISC::CBitmap::loadSize(), NLMISC::CIFile::open(), and uint32.
|
|
Determinate the bitmap size from a bitmap(TGA or DDS) from an IStream. load just header of the file. Bitmap supported are DDS (DXTC1, DXTC1 with Alpha, DXTC3, DXTC5, and uncompressed TGA (24 and 32 bits). NB: at the end, f is seeked to begin.
Definition at line 2582 of file bitmap.cpp. References NLMISC::DDS, DDSD_LINEARSIZE, depth, height, NLMISC::IStream::isReading(), nlassert, NLMISC::IStream::seek(), NLMISC::IStream::serial(), size, uint, uint16, uint32, uint8, and width. Referenced by NLMISC::CBitmap::loadSize().
02583 { 02584 retWidth= 0; 02585 retHeight= 0; 02586 02587 02588 nlassert(f.isReading()); 02589 02590 // testing if DDS 02591 uint32 fileType = 0; 02592 f.serial(fileType); 02593 if(fileType == DDS) 02594 { 02595 // read entire DDS header. 02596 uint32 size = 0; 02597 f.serial(size); // size in Bytes of header(without "DDS") 02598 uint32 * _DDSSurfaceDesc = new uint32[size]; 02599 std::auto_ptr<uint32> _DDSSurfaceDescAuto(_DDSSurfaceDesc); 02600 _DDSSurfaceDesc[0]= size; 02601 02602 for(uint i= 0; i<size/4 - 1; i++) 02603 { 02604 f.serial(_DDSSurfaceDesc[i+1]); 02605 } 02606 02607 // flags determines which members of the header structure contain valid data 02608 uint32 flags = _DDSSurfaceDesc[1]; 02609 02610 //verify if file have linearsize set 02611 if(!(flags & DDSD_LINEARSIZE)) 02612 { 02613 throw EDDSBadHeader(); 02614 } 02615 02616 //-------------- extracting and testing useful info 02617 retHeight = _DDSSurfaceDesc[2]; 02618 retWidth = _DDSSurfaceDesc[3]; 02619 } 02620 // assuming it's TGA 02621 else 02622 { 02623 if(!f.seek (0, NLMISC::IStream::begin)) 02624 { 02625 throw ESeekFailed(); 02626 } 02627 02628 // Reading header, 02629 // To make sure that the bitmap is TGA, we check imageType and imageDepth. 02630 uint8 lengthID; 02631 uint8 cMapType; 02632 uint8 imageType; 02633 uint16 tgaOrigin; 02634 uint16 length; 02635 uint8 depth; 02636 uint16 xOrg; 02637 uint16 yOrg; 02638 uint16 width; 02639 uint16 height; 02640 uint8 imageDepth; 02641 uint8 desc; 02642 02643 f.serial(lengthID); 02644 f.serial(cMapType); 02645 f.serial(imageType); 02646 if(imageType!=2 && imageType!=3 && imageType!=10 && imageType!=11) return; 02647 f.serial(tgaOrigin); 02648 f.serial(length); 02649 f.serial(depth); 02650 f.serial(xOrg); 02651 f.serial(yOrg); 02652 f.serial(width); 02653 f.serial(height); 02654 f.serial(imageDepth); 02655 if(imageDepth!=8 && imageDepth!=24 && imageDepth!=32) return; 02656 f.serial(desc); 02657 02658 // Ok, we have width and height. 02659 retWidth= width; 02660 retHeight= height; 02661 } 02662 02663 // reset stream. 02664 if(!f.seek (0, NLMISC::IStream::begin)) 02665 { 02666 throw ESeekFailed(); 02667 } 02668 } |
|
Make a dummy "?" texture. Usefull for file not found. Mode is rgba. Definition at line 184 of file bitmap.cpp. References NLMISC::CBitmap::_MipMapCount, NLMISC::CObjectVector< uint8 >::getPtr(), NLMISC::CBitmap::PixelFormat, NLMISC::CObjectVector< uint8 >::resize(), NLMISC::CBitmap::RGBA, NLMISC::CRGBA::set(), sint, and uint8. Referenced by NL3D::CTextureFile::buildBitmapFromFile(), NL3D::CreateDummyMesh(), NL3D::CTextureMultiFile::doGenerate(), NL3D::CTextureMem::doGenerate(), NL3D::CTextureGrouped::doGenerate(), NL3D::CTextureEmboss::doGenerate(), NL3D::CTextureBump::doGenerate(), and NL3D::CTextureBlend::doGenerate().
00185 { 00186 static const uint8 bitmap[1024]= { 00187 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 00188 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 00189 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00190 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00191 0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0, 00192 0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0, 00193 0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0, 00194 0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0, 00195 0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0, 00196 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00197 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00198 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00199 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00200 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00201 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00202 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 00203 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 00204 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 00205 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00206 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00207 0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0, 00208 0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0, 00209 0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0, 00210 0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0, 00211 0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0, 00212 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00213 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00214 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00215 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00216 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00217 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 00218 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 00219 }; 00220 00221 PixelFormat = RGBA; 00222 _MipMapCount = 1; 00223 _Width= 32; 00224 _Height= 32; 00225 _Data[0].resize(_Width*_Height*sizeof(NLMISC::CRGBA)); 00226 NLMISC::CRGBA *pix= (NLMISC::CRGBA*)(_Data[0].getPtr()); 00227 00228 for(sint i=0;i<(sint)(_Width*_Height);i++) 00229 { 00230 if(bitmap[i]) 00231 pix[i].set(255,255,255,255); 00232 else 00233 pix[i].set(0x80,0x80,0x80,0x40); 00234 } 00235 00236 } |
|
Definition at line 216 of file texture.h. References NL3D::ITexture::_MinFilter, NL3D::ITexture::LinearMipMapOff, and NL3D::ITexture::NearestMipMapOff. Referenced by NL3D::ITexture::mipMapOn(), and NL3D::ITexture::setFilterMode().
00216 {return _MinFilter==NearestMipMapOff || _MinFilter==LinearMipMapOff;} |
|
Definition at line 217 of file texture.h. References NL3D::ITexture::mipMapOff(). Referenced by NL3D::IDriver::getTextureShareName(), NL3D::CShapeBank::processWSUploadTexture(), NL3D::CDriverGL::setupTextureEx(), and NL3D::CDriverGL::uploadTexture().
00217 {return !mipMapOff();} |
|
|
|
Rebuild the patch passed in parameter Definition at line 465 of file texture_far.cpp. References _Bank, _LightmapExpanded, _LumelExpanded, _TileTLIColors, NL3D_CComputeTileFar::AsmMMX, NL3D_CExpandLightmap::ColorTile, NL3D::CPatch::computeCurrentTLILightmapDiv2(), NL3D_CComputeTileFar::DstDeltaX, NL3D_CComputeTileFar::DstDeltaY, NL3D_CComputeTileFar::DstPixels, NL3D_CExpandLightmap::DstPixels, NL3D::CTextureFar::CPatchIdent::FarIndex, NL3D::CZone::getLandscape(), NL3D::CPatch::getOrderS(), NL3D::CPatch::getOrderT(), NLMISC::CBitmap::getPixelFormat(), NL3D::CTileFarBank::CTileFar::getPixels(), NLMISC::CBitmap::getPixels(), NL3D::CLandscape::getStaticLight(), NL3D::CTileFarBank::getTile(), NL3D::CTileElement::getTile256Info(), NL3D::CTileElement::getTileOrient(), NL3D::CPatch::getZone(), NLMISC::CSystemInfo::hasMMX(), NL3D_CExpandLightmap::Height, NL3D::CTileFarBank::CTileFar::isFill(), NL3D_CExpandLightmap::LumelTile, NL3D_CExpandLightmap::MulFactor, NL3D_drawFarTileInFarTexture(), NL3D_drawFarTileInFarTextureAdditive(), NL3D_drawFarTileInFarTextureAdditiveAlpha(), NL3D_drawFarTileInFarTextureAlpha(), NL3D_expandLightmap(), NL_NUM_PIXELS_ON_FAR_TILE_EDGE, NL_TILE_ELM_LAYER_EMPTY, nlassert, nlwarning, NL3D::CTextureFar::CPatchIdent::Patch, s, sint, NL3D_CComputeTileFar::Size, size, NL3D_CComputeTileFar::SrcAdditivePixels, NL3D_CComputeTileFar::SrcDeltaX, NL3D_CComputeTileFar::SrcDeltaY, NL3D_CComputeTileFar::SrcDiffusePixels, NL3D_CComputeTileFar::SrcLightingDeltaY, NL3D_CComputeTileFar::SrcLightingPixels, NL3D_CExpandLightmap::StaticLightColor, t, NL3D::CTileElement::Tile, NL3D::CPatch::TileColors, NL3D::CPatch::Tiles, NL3D_CExpandLightmap::TLIColor, uint, uint8, NL3D::CPatch::unpackShadowMap(), NL3D_CExpandLightmap::Width, NL3D::CTextureFar::CVector2s::x, x, NL3D::CTextureFar::CVector2s::y, and y. Referenced by doGenerate().
00466 { 00467 uint x= texturePos.x; 00468 uint y= texturePos.y; 00469 00470 // Patch pointer 00471 CPatch* patch= pid.Patch; 00472 00473 // Check it exists 00474 nlassert (patch); 00475 00476 // get the order 00477 uint nS=patch->getOrderS(); 00478 uint nT=patch->getOrderT(); 00479 00480 // get the size of the texture to compute 00481 uint subTextWidth=(nS*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(pid.FarIndex-1); 00482 uint subTextHeight=(nT*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(pid.FarIndex-1); 00483 00484 // Check it is a 16 bits texture 00485 nlassert (getPixelFormat()==RGBA); 00486 00487 // Check pixels exist 00488 nlassert (getPixels().size()!=0); 00489 00490 // Base offset of the first pixel of the patch's texture 00491 uint nBaseOffset; 00492 00493 // Delta to add to the destination offset when walk for a pixel to the right in the source tile 00494 sint dstDeltaX; 00495 00496 // Delta to add to the destination offset when walk for a pixel to the bottom in the source tile 00497 sint dstDeltaY; 00498 00499 // larger than higher (regular) 00500 if (nS>=nT) 00501 { 00502 // Regular offset, top left 00503 nBaseOffset= x + y*_Width; 00504 00505 // Regular deltaX, to the right 00506 dstDeltaX=1; 00507 00508 // Regular deltaY, to the bottom 00509 dstDeltaY=_Width; 00510 } 00511 // higher than larger (goofy), the patch is stored with a rotation of 1 (to the left of course) 00512 else 00513 { 00514 // Goofy offset, bottom left 00515 nBaseOffset= x + y*_Width; 00516 nBaseOffset+=(subTextWidth-1)*_Width; 00517 00518 // Goofy deltaX, to the top 00519 dstDeltaX=-(sint)_Width; 00520 00521 // Goofy deltaY, to the right 00522 dstDeltaY=1; 00523 } 00524 00525 // Compute the order of the patch 00526 CTileFarBank::TFarOrder orderX=CTileFarBank::order0; 00527 uint tileSize=0; 00528 switch (pid.FarIndex) 00529 { 00530 case 3: 00531 // Ratio 1:4 00532 orderX=CTileFarBank::order2; 00533 tileSize=NL_NUM_PIXELS_ON_FAR_TILE_EDGE>>2; 00534 break; 00535 case 2: 00536 // Ratio 1:2 00537 orderX=CTileFarBank::order1; 00538 tileSize=NL_NUM_PIXELS_ON_FAR_TILE_EDGE>>1; 00539 break; 00540 case 1: 00541 // Ratio 1:1 00542 orderX=CTileFarBank::order0; 00543 tileSize=NL_NUM_PIXELS_ON_FAR_TILE_EDGE; 00544 break; 00545 default: 00546 // no!: must be one of the previous values 00547 nlassert (0); 00548 } 00549 00550 // Must have a far tile bank pointer set in the CFarTexture 00551 nlassert (_Bank); 00552 00553 // For all the tiles in the textures 00554 sint nTileInPatch=0; 00555 00556 // ** Fill the struct for the tile fill method for each layers 00557 NL3D_CComputeTileFar TileFar; 00558 TileFar.AsmMMX= false; 00559 #ifdef NL_OS_WINDOWS 00560 TileFar.AsmMMX= NLMISC::CSystemInfo::hasMMX(); 00561 #endif 00562 00563 // Destination pointer 00564 00565 // Destination delta 00566 TileFar.DstDeltaX=dstDeltaX; 00567 TileFar.DstDeltaY=dstDeltaY; 00568 00569 // ** Build expand lightmap.. 00570 NL3D_CExpandLightmap lightMap; 00571 00572 // Fill the structure 00573 lightMap.MulFactor=tileSize; 00574 lightMap.ColorTile=&patch->TileColors[0]; 00575 lightMap.Width=nS+1; 00576 lightMap.Height=nT+1; 00577 lightMap.StaticLightColor=patch->getZone()->getLandscape()->getStaticLight(); 00578 lightMap.DstPixels=_LightmapExpanded; 00579 // Compute current TLI colors. 00580 patch->computeCurrentTLILightmapDiv2(_TileTLIColors); 00581 lightMap.TLIColor= _TileTLIColors; 00582 00583 // Expand the shadowmap 00584 patch->unpackShadowMap (_LumelExpanded); 00585 lightMap.LumelTile=_LumelExpanded; 00586 00587 // Expand the patch lightmap now 00588 NL3D_expandLightmap (&lightMap); 00589 00590 // DeltaY for lightmap 00591 TileFar.SrcLightingDeltaY=nS*tileSize; 00592 00593 // Base Dst pointer on the tile line 00594 uint nBaseDstTileLine=nBaseOffset; 00595 for (uint t=0; t<nT; t++) 00596 { 00597 // Base Dst pointer on the tile 00598 uint nBaseDstTilePixels=nBaseDstTileLine; 00599 00600 // For each tile of the line 00601 for (uint s=0; s<nS; s++) 00602 { 00603 // Base pointer of the destination texture 00604 TileFar.DstPixels=(CRGBA*)&(getPixels()[0])+nBaseDstTilePixels; 00605 00606 // Lightmap pointer 00607 TileFar.SrcLightingPixels=_LightmapExpanded+(s*tileSize)+(t*nS*tileSize*tileSize); 00608 00609 // For each layer of the tile 00610 for (sint l=0; l<3; l++) 00611 { 00612 // Use of additive in this layer ? 00613 bool bAdditive=false; 00614 00615 // Size of the edge far tile 00616 TileFar.Size=tileSize; 00617 00618 // Get a tile element reference for this tile. 00619 const CTileElement &tileElm=patch->Tiles[nTileInPatch]; 00620 00621 // Check for 256 tiles... 00622 bool is256x256; 00623 uint8 uvOff; 00624 tileElm.getTile256Info(is256x256, uvOff); 00625 00626 // Get the tile number 00627 sint tile=tileElm.Tile[l]; 00628 00629 // Is the last layer ? 00630 bool lastLayer = ( (l == 2) || (tileElm.Tile[l+1] == NL_TILE_ELM_LAYER_EMPTY) ); 00631 00632 // Is an non-empty layer ? 00633 if (tile!=NL_TILE_ELM_LAYER_EMPTY) 00634 { 00635 // Get the read only pointer on the far tile 00636 const CTileFarBank::CTileFar* pTile=_Bank->getTile (tile); 00637 00638 // This pointer must not be null, else the farBank is not valid! 00639 if (pTile==NULL) 00640 nlwarning ("FarBank is not valid!"); 00641 00642 // If the tile exist 00643 if (pTile) 00644 { 00645 // Tile exist ? 00646 if (pTile->isFill (CTileFarBank::diffuse)) 00647 { 00648 // Get rotation of the tile in this layer 00649 sint nRot=tileElm.getTileOrient(l); 00650 00651 // Source pointer 00652 const CRGBA* pSrcDiffusePixels=pTile->getPixels (CTileFarBank::diffuse, orderX); 00653 const CRGBA* pSrcAdditivePixels=NULL; 00654 00655 // Additive ? 00656 if (pTile->isFill (CTileFarBank::additive)) 00657 { 00658 // Use it 00659 bAdditive=true; 00660 00661 // Get additive pointer 00662 pSrcAdditivePixels=pTile->getPixels (CTileFarBank::additive, orderX); 00663 } 00664 00665 // Source size 00666 sint sourceSize; 00667 00668 // Source offset (for 256) 00669 uint sourceOffset=0; 00670 00671 // 256 ? 00672 if (is256x256) 00673 { 00674 // On the left ? 00675 if (uvOff&0x02) 00676 sourceOffset+=tileSize; 00677 00678 // On the bottom ? 00679 if ((uvOff==1)||(uvOff==2)) 00680 sourceOffset+=2*tileSize*tileSize; 00681 00682 // Yes, 256 00683 sourceSize=tileSize<<1; 00684 } 00685 else 00686 { 00687 // No, 128 00688 sourceSize=tileSize; 00689 } 00690 00691 // Compute offset and deltas 00692 switch (nRot) 00693 { 00694 case 0: 00695 // Source pointers 00696 TileFar.SrcDiffusePixels=pSrcDiffusePixels+sourceOffset; 00697 TileFar.SrcAdditivePixels=pSrcAdditivePixels+sourceOffset; 00698 00699 // Source delta 00700 TileFar.SrcDeltaX=1; 00701 TileFar.SrcDeltaY=sourceSize; 00702 break; 00703 case 1: 00704 { 00705 // Source pointers 00706 uint newOffset=sourceOffset+(tileSize-1); 00707 TileFar.SrcDiffusePixels=pSrcDiffusePixels+newOffset; 00708 TileFar.SrcAdditivePixels=pSrcAdditivePixels+newOffset; 00709 00710 // Source delta 00711 TileFar.SrcDeltaX=sourceSize; 00712 TileFar.SrcDeltaY=-1; 00713 } 00714 break; 00715 case 2: 00716 { 00717 // Destination pointer 00718 uint newOffset=sourceOffset+(tileSize-1)*sourceSize+tileSize-1; 00719 TileFar.SrcDiffusePixels=pSrcDiffusePixels+newOffset; 00720 TileFar.SrcAdditivePixels=pSrcAdditivePixels+newOffset; 00721 00722 // Source delta 00723 TileFar.SrcDeltaX=-1; 00724 TileFar.SrcDeltaY=-sourceSize; 00725 } 00726 break; 00727 case 3: 00728 { 00729 // Destination pointer 00730 uint newOffset=sourceOffset+(tileSize-1)*sourceSize; 00731 TileFar.SrcDiffusePixels=pSrcDiffusePixels+newOffset; 00732 TileFar.SrcAdditivePixels=pSrcAdditivePixels+newOffset; 00733 00734 // Source delta 00735 TileFar.SrcDeltaX=-sourceSize; 00736 TileFar.SrcDeltaY=1; 00737 } 00738 break; 00739 } 00740 00741 // *** Draw the layer 00742 00743 // Alpha layer ? 00744 if (l>0) 00745 { 00746 // Additive layer ? 00747 if (bAdditive && lastLayer) 00748 NL3D_drawFarTileInFarTextureAdditiveAlpha (&TileFar); 00749 else // No additive layer 00750 NL3D_drawFarTileInFarTextureAlpha (&TileFar); 00751 } 00752 else // no alpha 00753 { 00754 // Additive layer ? 00755 if (bAdditive && lastLayer) 00756 NL3D_drawFarTileInFarTextureAdditive (&TileFar); 00757 else // No additive layer 00758 NL3D_drawFarTileInFarTexture (&TileFar); 00759 } 00760 } 00761 } 00762 } 00763 else 00764 // Stop, no more layer 00765 break; 00766 } 00767 00768 // Next tile 00769 nTileInPatch++; 00770 00771 // Next tile on the line 00772 nBaseDstTilePixels+=dstDeltaX*tileSize; 00773 } 00774 00775 // Next line of tiles 00776 nBaseDstTileLine+=dstDeltaY*tileSize; 00777 } 00778 00779 } |
|
Definition at line 212 of file texture_far.cpp. References _FreeSpaces, getFreeListId(), getUpperSize(), nlassert, nlverify, uint, NL3D::CTextureFar::CVector2s::x, and NL3D::CTextureFar::CVector2s::y. Referenced by allocatePatch().
00213 { 00214 // get the upper subTexture 00215 uint wup= wson, hup= hson; 00216 nlverify( getUpperSize(wup, hup) ); 00217 00218 // get the list id. 00219 uint fatherListId= getFreeListId(wup, hup); 00220 00221 // if must split bigger patch... 00222 if(_FreeSpaces[fatherListId].empty()) 00223 { 00224 // recurs, try to get a bigger subtexture and split it. 00225 recursSplitNext(wup, hup); 00226 } 00227 00228 // OK, now we should have a free entry. 00229 nlassert( !_FreeSpaces[fatherListId].empty() ); 00230 00231 // remove from free list, because it is split now! 00232 CVector2s fatherPos= _FreeSpaces[fatherListId].front(); 00233 _FreeSpaces[fatherListId].pop_front(); 00234 00235 // Create New free rectangles for sons 00236 uint sonListId= getFreeListId(wson, hson); 00237 CVector2s sonPos; 00238 00239 // if my son is a rectangle son 00240 if(wson>hson) 00241 { 00242 // Then Add 2 free Spaces! 00243 sonPos.x= fatherPos.x; 00244 // 1st. 00245 sonPos.y= fatherPos.y; 00246 _FreeSpaces[sonListId].push_back(sonPos); 00247 // 2nd. 00248 sonPos.y= fatherPos.y+hson; 00249 _FreeSpaces[sonListId].push_back(sonPos); 00250 } 00251 else 00252 { 00253 // Then Add 4 free Spaces! 00254 // 1st. 00255 sonPos.x= fatherPos.x; 00256 sonPos.y= fatherPos.y; 00257 _FreeSpaces[sonListId].push_back(sonPos); 00258 // 2nd. 00259 sonPos.x= fatherPos.x+wson; 00260 sonPos.y= fatherPos.y; 00261 _FreeSpaces[sonListId].push_back(sonPos); 00262 // 3rd. 00263 sonPos.x= fatherPos.x; 00264 sonPos.y= fatherPos.y+hson; 00265 _FreeSpaces[sonListId].push_back(sonPos); 00266 // 4th. 00267 sonPos.x= fatherPos.x+wson; 00268 sonPos.y= fatherPos.y+hson; 00269 _FreeSpaces[sonListId].push_back(sonPos); 00270 } 00271 00272 } |
|
Release the texure (free memory) Reimplemented in NL3D::CTextureBlend, NL3D::CTextureBump, NL3D::CTextureCube, NL3D::CTextureEmboss, and NL3D::CTextureGrouped. Definition at line 327 of file texture.h. References NL3D::ITexture::_GoodGenerate, and NLMISC::CBitmap::reset(). Referenced by NL3D::CZoneLighter::getTexture(), NL3D::GetTextureSize(), NL3D::CShapeBank::processWSUploadTexture(), NL3D::CDriverGL::setupTextureEx(), and NL3D::CAsyncTextureManager::update().
00327 { reset(); _GoodGenerate= false; } |
|
Release the Driver info for this texture (if any). Call it with care.
Definition at line 64 of file texture.cpp. References NLMISC::CRefPtr< CTextureDrvShare >::kill(), and NL3D::ITexture::TextureDrvShare. Referenced by NL3D::CMeshBaseInstance::isAsyncTextureReady(), and NL3D::ITexture::~ITexture().
00065 { 00066 // Must kill the drv mirror of this texture. 00067 TextureDrvShare.kill(); 00068 } |
|
Release the mipmaps of the bitmap if they exist. Work for any mode.
Definition at line 1493 of file bitmap.cpp. References NLMISC::CBitmap::_MipMapCount, NLMISC::contReset(), NLMISC::MAX_MIPMAP, and sint. Referenced by NL3D::CAsyncTextureManager::CTextureEntry::createCoarseBitmap(), NL3D::CTextureEmboss::doGenerate(), NL3D::CTextureBump::doGenerate(), NLMISC::CBitmap::flipH(), NLMISC::CBitmap::flipV(), NLMISC::CBitmap::resample(), NLMISC::CBitmap::resize(), NLMISC::CBitmap::rot90CCW(), NLMISC::CBitmap::rot90CW(), and NL3D::CDriverGL::setupTextureEx().
01494 { 01495 if(_MipMapCount<=1) return; 01496 01497 _MipMapCount=1; 01498 for(sint i=1;i<MAX_MIPMAP;i++) 01499 { 01500 NLMISC::contReset(_Data[i]); 01501 } 01502 } |
|
Remove a patch in the CTexture Far. Definition at line 335 of file texture_far.cpp. References _FreeSpaces, _ItULPatch, _PatchToPosMap, _PosToPatchMap, NL3D::CTextureFar::CPatchIdent::FarIndex, getFreeListId(), NL3D::CPatch::getOrderS(), NL3D::CPatch::getOrderT(), height, NL_NUM_PIXELS_ON_FAR_TILE_EDGE, nlassert, NL3D::CTextureFar::CPatchIdent::Patch, uint, and width. Referenced by NL3D::CLandscape::freeFarRenderPass().
00336 { 00337 // must be found 00338 CPatchIdent pid; 00339 pid.Patch= pPatch; 00340 pid.FarIndex= farIndex; 00341 TPatchToPosMap::iterator it= _PatchToPosMap.find(pid); 00342 nlassert( it != _PatchToPosMap.end() ); 00343 00344 // get the pos where this patch texture is stored 00345 CVector2s pos= it->second; 00346 00347 // If I erase the patch wihch must next UL, then update UL 00348 if( it == _ItULPatch ) 00349 _ItULPatch++; 00350 00351 // erase from the 1st map 00352 _PatchToPosMap.erase(it); 00353 00354 // erase from the second map 00355 _PosToPatchMap.erase(pos); 00356 00357 // Append to the free list. 00358 uint width=(pPatch->getOrderS ()*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(farIndex-1); 00359 uint height=(pPatch->getOrderT ()*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(farIndex-1); 00360 if(width<height) 00361 swap(width, height); 00362 uint freeListId= getFreeListId(width, height); 00363 _FreeSpaces[freeListId].push_back(pos); 00364 } |
|
Resample the bitmap. If mipmaps exist they are deleted, then rebuilt after resampling.
Definition at line 1508 of file bitmap.cpp. References NLMISC::CBitmap::_MipMapCount, NLMISC::CBitmap::buildMipMaps(), NLMISC::contReset(), nlassert, NLMISC::CBitmap::PixelFormat, NLMISC::CBitmap::releaseMipMaps(), NLMISC::CBitmap::resamplePicture32(), NLMISC::CObjectVector< T, EnableObjectBehavior >::resize(), NLMISC::CBitmap::RGBA, and sint32. Referenced by NL3D::CCoarseMeshBuild::buildBitmap(), and NL3D::CDriverGL::setupTextureEx().
01509 { 01510 nlassert(PixelFormat == RGBA); 01511 bool needRebuild = false; 01512 01513 // Deleting mipmaps 01514 if(_MipMapCount>1) 01515 needRebuild = true; 01516 releaseMipMaps(); 01517 01518 if(nNewWidth==0 || nNewHeight==0) 01519 { 01520 _Width = _Height = 0; 01521 return; 01522 } 01523 01524 CObjectVector<uint8> pDestui; 01525 pDestui.resize(nNewWidth*nNewHeight*4); 01526 NLMISC::CRGBA *pDestRgba = (NLMISC::CRGBA*)&pDestui[0]; 01527 01528 resamplePicture32 ((NLMISC::CRGBA*)&_Data[0][0], pDestRgba, _Width, _Height, nNewWidth, nNewHeight); 01529 NLMISC::contReset(_Data[0]); // free memory 01530 _Data[0] = pDestui; 01531 _Width= nNewWidth; 01532 _Height= nNewHeight; 01533 01534 // Rebuilding mipmaps 01535 if(needRebuild) 01536 { 01537 buildMipMaps(); 01538 } 01539 } |
|
Reset the buffer. Mipmaps are deleted and bitmap is not valid anymore.
Definition at line 1599 of file bitmap.cpp. References NLMISC::CBitmap::_MipMapCount, NLMISC::contReset(), NLMISC::CBitmap::PixelFormat, NLMISC::CObjectVector< uint8 >::resize(), type, and uint. Referenced by NL3D::CHLSColorTexture::buildColorVersion(), NL3D::CDriverGL::getBufferPart(), and NL3D::ITexture::release().
01600 { 01601 for(uint i=0; i<_MipMapCount; i++) 01602 { 01603 NLMISC::contReset(_Data[i]); 01604 _Data[i].resize(0); 01605 } 01606 _Width = _Height = 0; 01607 _MipMapCount= 1; 01608 01609 // Change pixel format 01610 PixelFormat=type; 01611 } |
|
Resize the bitmap. If mipmaps exist they are deleted and not rebuilt. This is not a crop. Pixels are lost after resize.
Definition at line 1545 of file bitmap.cpp. References NLMISC::CBitmap::DonTKnow, NLMISC::CBitmap::PixelFormat, NLMISC::CBitmap::releaseMipMaps(), NLMISC::CBitmap::resizeMipMap(), and sint32. Referenced by NLMISC::CBitmap::blend(), NL3D::CHLSColorTexture::buildColorVersion(), NL3D::CTextureFont::CTextureFont(), NL3D::CTextureMem::doGenerate(), NL3D::CTextureGrouped::doGenerate(), NL3D::CTextureCross::doGenerate(), NL3D::CTextureFont::dumpTextureFont(), NL3D::CCoarseMeshBuild::expand(), and NL3D::CDriverGL::getBufferPart().
01546 { 01547 // Deleting mipmaps 01548 releaseMipMaps(); 01549 01550 // Change type of bitmap ? 01551 if (newType!=DonTKnow) 01552 PixelFormat=newType; 01553 01554 _Width = nNewWidth; 01555 _Height = nNewHeight; 01556 01557 // resize the level 0 only. 01558 resizeMipMap(0, nNewWidth, nNewHeight, resetTo0); 01559 } |
|
ADVANCED USE Resize a single mipmap level. resize() should have been called before. This is not a crop. Pixels are lost after resize. No validity check is made. It is the user responsabitility fo setup correct mipmap size.
Definition at line 1565 of file bitmap.cpp. References NLMISC::CBitmap::bitPerPixels, NLMISC::contReset(), NLMISC::CObjectVector< uint8 >::fill(), NLMISC::MAX_MIPMAP, nlassert, NLMISC::CBitmap::PixelFormat, NLMISC::CObjectVector< uint8 >::resize(), sint32, and uint32. Referenced by NL3D::CHLSColorTexture::buildColorVersion(), and NLMISC::CBitmap::resize().
01566 { 01567 nlassert(numMipMap<MAX_MIPMAP); 01568 01569 // free memory 01570 NLMISC::contReset(_Data[numMipMap]); 01571 01572 // DXTC compressed?? 01573 //bool isDXTC= PixelFormat==DXTC1 || PixelFormat==DXTC1Alpha || PixelFormat==DXTC3 || PixelFormat==DXTC5; 01574 // if yes, must round up width and height to 4, for allocation 01575 nNewWidth= 4*((nNewWidth+3)/4); 01576 nNewHeight= 4*((nNewHeight+3)/4); 01577 01578 // resize the buffer 01579 _Data[numMipMap].resize (((uint32)(nNewWidth*nNewHeight)*bitPerPixels[PixelFormat])/8); 01580 01581 // Fill 0? 01582 if( resetTo0 ) 01583 _Data[numMipMap].fill(0); 01584 } |
|
Rotation of the bitmap of 90 degree in counter clockwise Definition at line 2781 of file bitmap.cpp. References NLMISC::CBitmap::_MipMapCount, NLMISC::CBitmap::buildMipMaps(), NLMISC::contReset(), NLMISC::CBitmap::getHeight(), NLMISC::CBitmap::getWidth(), NLMISC::CBitmap::PixelFormat, NLMISC::CBitmap::releaseMipMaps(), NLMISC::CObjectVector< T, EnableObjectBehavior >::resize(), NLMISC::CBitmap::RGBA, sint32, and uint32.
02782 { 02783 if (PixelFormat != RGBA) 02784 return; 02785 sint32 nWidth = getWidth(0); 02786 sint32 nHeight = getHeight(0); 02787 sint32 i, j; 02788 NLMISC::CRGBA *pSrcRgba = (NLMISC::CRGBA*)&_Data[0][0]; 02789 bool needRebuild = false; 02790 02791 if(_MipMapCount>1) 02792 needRebuild = true; 02793 releaseMipMaps(); 02794 02795 CObjectVector<uint8> pDestui; 02796 pDestui.resize(nWidth*nHeight*4); 02797 NLMISC::CRGBA *pDestRgba = (NLMISC::CRGBA*)&pDestui[0]; 02798 02799 for( j = 0; j < nHeight; ++j ) 02800 for( i = 0; i < nWidth; ++i ) 02801 pDestRgba[j+i*nHeight] = pSrcRgba[nWidth-1-i+j*nWidth]; 02802 02803 uint32 nTemp = _Width; 02804 _Width = _Height; 02805 _Height = nTemp; 02806 02807 NLMISC::contReset(_Data[0]); // free memory 02808 _Data[0] = pDestui; 02809 // Rebuilding mipmaps 02810 if(needRebuild) 02811 { 02812 buildMipMaps(); 02813 } 02814 } |
|
Rotation of the bitmap of 90 degree in clockwise Definition at line 2746 of file bitmap.cpp. References NLMISC::CBitmap::_MipMapCount, NLMISC::CBitmap::buildMipMaps(), NLMISC::contReset(), NLMISC::CBitmap::getHeight(), NLMISC::CBitmap::getWidth(), NLMISC::CBitmap::PixelFormat, NLMISC::CBitmap::releaseMipMaps(), NLMISC::CObjectVector< T, EnableObjectBehavior >::resize(), NLMISC::CBitmap::RGBA, sint32, and uint32.
02747 { 02748 if (PixelFormat != RGBA) 02749 return; 02750 sint32 nWidth = getWidth(0); 02751 sint32 nHeight = getHeight(0); 02752 sint32 i, j; 02753 NLMISC::CRGBA *pSrcRgba = (NLMISC::CRGBA*)&_Data[0][0]; 02754 bool needRebuild = false; 02755 02756 if(_MipMapCount>1) 02757 needRebuild = true; 02758 releaseMipMaps(); 02759 02760 CObjectVector<uint8> pDestui; 02761 pDestui.resize(nWidth*nHeight*4); 02762 NLMISC::CRGBA *pDestRgba = (NLMISC::CRGBA*)&pDestui[0]; 02763 02764 for( j = 0; j < nHeight; ++j ) 02765 for( i = 0; i < nWidth; ++i ) 02766 pDestRgba[j+i*nHeight] = pSrcRgba[i+(nHeight-1-j)*nWidth]; 02767 02768 uint32 nTemp = _Width; 02769 _Width = _Height; 02770 _Height = nTemp; 02771 02772 NLMISC::contReset(_Data[0]); // free memory 02773 _Data[0] = pDestui; 02774 // Rebuilding mipmaps 02775 if(needRebuild) 02776 { 02777 buildMipMaps(); 02778 } 02779 } |
|
Rotate a bitmap in CCW mode.
Definition at line 2306 of file bitmap.cpp. References NLMISC::CBitmap::PixelFormat, NLMISC::CBitmap::RGBA, NLMISC::rotateCCW(), uint16, and uint32.
02307 { 02308 // Copy the array 02309 CObjectVector<uint8> copy=_Data[0]; 02310 02311 switch (PixelFormat) 02312 { 02313 case RGBA: 02314 NLMISC::rotateCCW ((uint32*)&(_Data[0][0]), (uint32*)&(copy[0]), _Width, _Height); 02315 break; 02316 case Luminance: 02317 case Alpha: 02318 NLMISC::rotateCCW (&_Data[0][0], ©[0], _Width, _Height); 02319 break; 02320 case AlphaLuminance: 02321 NLMISC::rotateCCW ((uint16*)&(_Data[0][0]), (uint16*)&(copy[0]), _Width, _Height);; 02322 break; 02323 default: break; 02324 } 02325 02326 uint32 tmp=_Width; 02327 _Width=_Height; 02328 _Height=tmp; 02329 _Data[0]=copy; 02330 } |
|
Select a texture among several other (if this texture is a set of texture such as CTextureMultiFile) The default does nothing Reimplemented in NL3D::CTextureCube, and NL3D::CTextureMultiFile. Definition at line 360 of file texture.h. Referenced by NL3D::CCoarseMeshBuild::buildBitmap(), NL3D::CCoarseMeshBuild::remapCoordinates(), and NL3D::CAsyncFileManager3D::CMeshLoad::run().
00360 {} |
|
From IStreamable.
Reimplemented from NL3D::ITexture. Definition at line 197 of file texture_far.h.
00197 {}; |
|
Reimplemented in NL3D::CTextureBump. Definition at line 100 of file texture.cpp. References NL3D::ITexture::_MagFilter, NL3D::ITexture::_MinFilter, NL3D::ITexture::mipMapOff(), and NL3D::ITexture::touch(). Referenced by NL3D::CShadowMapManager::allocateTexture(), NL3D::CTextureDLM::CTextureDLM(), CTextureFar(), NL3D::CTextureFont::CTextureFont(), NL3D::CTextureGrouped::CTextureGrouped(), NL3D::CTextureNear::CTextureNear(), and NL3D::CVegetableManager::loadTexture().
|
|
ADVANCED USE To use in conjunction with resizeMipMap. Setup the correct total number of mipmap No validity check is made. It is the user responsabitility fo setup correct mipmap count. Definition at line 1590 of file bitmap.cpp. References NLMISC::CBitmap::_MipMapCount, uint32, and uint8. Referenced by NL3D::CHLSColorTexture::buildColorVersion().
01591 { 01592 _MipMapCount= uint8(mmc); 01593 } |
|
Set if texture can be released If it is true, the driver will release the texture after generating it and upload it into the videomemory by calling release(). If it is false, the driver won't release the texture.
Definition at line 278 of file texture.h. References NL3D::ITexture::_Releasable, and r. Referenced by NL3D::CShadowMapManager::allocateTexture(), NL3D::CTextureDLM::CTextureDLM(), CTextureFar(), NL3D::CTextureFont::CTextureFont(), NL3D::CTextureNear::CTextureNear(), NL3D::CShapeBank::processWSUploadTexture(), NL3D::CWaterPoolManager::releaseBlendTextures(), NL3D::CWaterPoolManager::setBlendFactor(), and NL3D::CAsyncTextureManager::uploadTexturePart().
00278 { _Releasable = r; } |
|
Tells if the texture has been setuped by the driver. Definition at line 343 of file texture.h. References NL3D::ITexture::TextureDrvShare.
00344 { 00345 return TextureDrvShare!=NULL; 00346 } |
|
Replace the uploaded format of the texture. If "Auto", the driver use CBitmap::getPixelFormat() to find the best associated pixelFormat. When no alpha is wanted (RGB, Luminance....), texture default output is 1.0. For "Alpha" mode, RGB output is (0,0,0). Definition at line 88 of file texture.cpp. References NL3D::ITexture::_UploadFormat, and NL3D::ITexture::touch(). Referenced by NL3D::CTextureDLM::CTextureDLM(), CTextureFar(), NL3D::CTextureFont::CTextureFont(), NL3D::CTextureNear::CTextureNear(), NL3D::CDriverGL::getSpecularCubeMap(), and NL3D::CDriverGL::setupWaterPassARB().
00089 { 00090 if(pf!=_UploadFormat) 00091 { 00092 _UploadFormat= pf; 00093 // All the texture may be reloaded... 00094 touch(); 00095 } 00096 } |
|
By default, parameters are:
NB: if multiple ITexture acces the same data via the sharing system (such as a CTextureFile), then:
Definition at line 202 of file texture.h. References NL3D::ITexture::_WrapS. Referenced by NL3D::CShadowMapManager::allocateTexture(), CTextureFar(), NL3D::CTextureFont::CTextureFont(), NL3D::CVegetableManager::loadTexture(), and NL3D::CSegRemanenceShape::setupMaterial().
00202 {_WrapS= mode;} |
|
Definition at line 203 of file texture.h. References NL3D::ITexture::_WrapT. Referenced by NL3D::CShadowMapManager::allocateTexture(), CTextureFar(), NL3D::CTextureFont::CTextureFont(), and NL3D::CVegetableManager::loadTexture().
00203 {_WrapT= mode;} |
|
Definition at line 404 of file texture_far.cpp. References _ItULPatch, and _PatchToPosMap. Referenced by NL3D::CLandscape::updateLightingTextureFar().
00405 { 00406 _ItULPatch= _PatchToPosMap.begin(); 00407 } |
|
Does this texture support sharing system. Reimplemented in NL3D::CTextureBlend, NL3D::CTextureBump, NL3D::CTextureCube, NL3D::CTextureEmboss, NL3D::CTextureFile, NL3D::CTextureGrouped, NL3D::CTextureMem, and NL3D::CTextureMultiFile. Definition at line 332 of file texture.h. Referenced by NL3D::CCoarseMeshBuild::buildBitmap(), NL3D::CZoneLighter::getTexture(), NL3D::CCoarseMeshBuild::remapCoordinates(), NL3D::CAsyncFileManager3D::CMeshLoad::run(), NL3D::CDriverGL::setupTextureEx(), and NL3D::ITexture::touchRect().
00332 {return false;} |
|
This method invalidates all the texture surface. When the driver calls generate, the texture will rebuild all the texture and the driver will update it.
Definition at line 227 of file texture.h. References NL3D::ITexture::_GoodGenerate, and NL3D::ITexture::_ListInvalidRect. Referenced by NL3D::CTextureFile::CTextureFile(), NL3D::ITexture::operator=(), NL3D::CTextureMultiFile::selectTexture(), NL3D::CTextureCube::selectTexture(), NL3D::CTextureEmboss::setAmbient(), NL3D::CTextureBlend::setBlendFactor(), NL3D::CTextureBlend::setBlendTexture(), NL3D::CTextureEmboss::setDiffuse(), NL3D::CTextureMultiFile::setFileName(), NL3D::CTextureFile::setFileName(), NL3D::ITexture::setFilterMode(), NL3D::CTextureEmboss::setHeightMap(), NL3D::CTextureBump::setHeightMap(), NL3D::CTextureEmboss::setLightDir(), NL3D::CTextureEmboss::setSlopeFactor(), NL3D::CTextureGrouped::setTextures(), and NL3D::ITexture::setUploadFormat().
00228 { 00229 _ListInvalidRect.clear (); 00230 _Touched=true; 00231 _GoodGenerate= false; 00232 } |
|
This method return the touched flag. If it is true, the driver will call generate to rebuild the texture.
Definition at line 438 of file texture.h. Referenced by NL3D::CDriverGL::setupTextureEx().
00439 { 00440 return _Touched; 00441 } |
|
Touch a patch (call touchRect()) and iterate to next .
Definition at line 368 of file texture_far.cpp. References _ItULPatch, _PatchToPosMap, NL3D::CPatch::getOrderS(), NL3D::CPatch::getOrderT(), height, NL_NUM_PIXELS_ON_FAR_TILE_EDGE, uint, width, x, and y. Referenced by NL3D::CLandscape::updateLightingTextureFar().
00369 { 00370 // if there is still a patch here 00371 if( _ItULPatch!=_PatchToPosMap.end() ) 00372 { 00373 // Position of the invalide rectangle 00374 int x = _ItULPatch->second.x; 00375 int y = _ItULPatch->second.y; 00376 uint farIndex= _ItULPatch->first.FarIndex; 00377 CPatch *pPatch= _ItULPatch->first.Patch; 00378 00379 // recompute the correct size. 00380 uint width=(pPatch->getOrderS ()*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(farIndex-1); 00381 uint height=(pPatch->getOrderT ()*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(farIndex-1); 00382 if(width<height) 00383 swap(width, height); 00384 00385 // Invalidate the associated rectangle 00386 CRect rect (x, y, width, height); 00387 ITexture::touchRect (rect); 00388 00389 // Go next. 00390 _ItULPatch++; 00391 00392 // return number of pixels touched 00393 return width * height; 00394 } 00395 else 00396 { 00397 // no touch 00398 return 0; 00399 } 00400 } |
|
This method invalidates a rectangle of the texture surface. When the driver calls generate, the texture could rebuild only this part of texture and the driver will update only those rectangles. This method is incompatible with textures which support sharing (see class description).
Definition at line 242 of file texture.h. References NL3D::ITexture::_GoodGenerate, NL3D::ITexture::_ListInvalidRect, NL3D::ITexture::isAllInvalidated(), nlassert, and NL3D::ITexture::supportSharing(). Referenced by NL3D::CTextureFont::getLetterInfo().
00243 { 00244 // The texture must not support sharing.... 00245 nlassert(!supportSharing()); 00246 // Don't invalidate the rectangle if the full texture is already invalidated. 00247 if (!isAllInvalidated ()) 00248 { 00249 // Add the region to invalidate list 00250 _ListInvalidRect.push_back (rect); 00251 // Touch flag 00252 _Touched=true; 00253 } 00254 00255 _GoodGenerate= false; 00256 } |
|
Try to allocate a patch. return -1 if error (not enough space) return 0 if OK, and success to allocate a place without splitting any square else return the size of the max space to split (eg if must a split a 32x32 to allocate a 16x8) Definition at line 176 of file texture_far.cpp. References _FreeSpaces, getFreeListId(), NL3D::CPatch::getOrderS(), NL3D::CPatch::getOrderT(), getUpperSize(), height, NL_NUM_PIXELS_ON_FAR_TILE_EDGE, sint, uint, and width. Referenced by NL3D::CLandscape::getFarRenderPass().
00177 { 00178 // get the size of the subtexture to allocate 00179 uint width=(pPatch->getOrderS ()*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(farIndex-1); 00180 uint height=(pPatch->getOrderT ()*NL_NUM_PIXELS_ON_FAR_TILE_EDGE)>>(farIndex-1); 00181 00182 // make width the biggest 00183 if(width<height) 00184 swap(width, height); 00185 00186 // get where to find a subtexture 00187 uint freeListId= getFreeListId(width, height); 00188 00189 // if some place, ok! 00190 if(!_FreeSpaces[freeListId].empty()) 00191 return 0; 00192 else 00193 { 00194 // try to get the next size 00195 while( getUpperSize(width, height) ) 00196 { 00197 freeListId= getFreeListId(width, height); 00198 // if some subtexture free 00199 if(!_FreeSpaces[freeListId].empty()) 00200 { 00201 // Ok! return the size of this texture we must split 00202 return width*height; 00203 } 00204 } 00205 00206 // fail => no more space => -1 00207 return -1; 00208 } 00209 } |
|
For lighting update, unlink (CiruclarList).
Definition at line 116 of file texture_far.cpp. References _ULNext, and _ULPrec. Referenced by NL3D::CLandscape::clearFarRenderPass().
|
|
Advanced. erase the _GoodGenerate=true. Special if you want to setup directly the bitmap without using generate(). USE IT WITH CARE!! (used by the CAsyncTextureManager) Definition at line 322 of file texture.h. References NL3D::ITexture::_GoodGenerate.
00322 {_GoodGenerate=true;}
|
|
Write a JPG from the object pixels buffer. If the current pixel format is not rgba then the method does nothing If the pixel format is Alpha then we save in 8 bpp
Definition at line 620 of file bitmap.h. References nlwarning, and uint8.
00621 { 00622 nlwarning ("You must put #define USE_JPEG before all include in the file where you call writeJPG() if you want jpeg support"); 00623 return false; 00624 } |
|
Write a TGA (24 or 32 bits) from the object pixels buffer. If the current pixel format is not rgba then the method does nothing If the pixel format is Alpha then we save in 8 bpp
Definition at line 2139 of file bitmap.cpp. References depth, height, NLMISC::IStream::isReading(), NLMISC::CBitmap::PixelFormat, r, NLMISC::CBitmap::RGBA, NLMISC::IStream::serial(), sint32, uint16, uint32, uint8, width, x, and y. Referenced by NL3D::CTextureFont::dumpTextureFont(), NL3D::CZoneLighter::lightWater(), and NL3D::CNELU::screenshot().
02140 { 02141 if(f.isReading()) return false; 02142 if(d!=24 && d!=32 && d!=16 && d!=8) return false; 02143 if ((PixelFormat != RGBA)&&(PixelFormat != Alpha)&&(PixelFormat != Luminance)) return false; 02144 if ((PixelFormat == Alpha) && (d != 8)) return false; 02145 if ((PixelFormat == Luminance) && (d != 8)) return false; 02146 02147 sint32 i,j,x,y; 02148 uint8 * scanline; 02149 uint8 r,g,b,a; 02150 02151 uint8 lengthID = 0; 02152 uint8 cMapType = 0; 02153 uint8 imageType = 2; 02154 uint16 origin = 0; 02155 uint16 length = 0; 02156 uint8 depth = 0; 02157 uint16 xOrg = 0; 02158 uint16 yOrg = 0; 02159 uint16 width = (uint16)_Width; 02160 uint16 height = (uint16)_Height; 02161 uint8 imageDepth = (uint8)d; 02162 uint8 desc = 0; 02163 if (upsideDown) 02164 desc |= 1<<5; 02165 02166 if ((PixelFormat == Alpha) || (PixelFormat == Luminance)) 02167 imageType = 3; // Uncompressed grayscale 02168 02169 f.serial(lengthID); 02170 f.serial(cMapType); 02171 f.serial(imageType); 02172 f.serial(origin); 02173 f.serial(length); 02174 f.serial(depth); 02175 f.serial(xOrg); 02176 f.serial(yOrg); 02177 f.serial(width); 02178 f.serial(height); 02179 f.serial(imageDepth); 02180 f.serial(desc); 02181 02182 if ((PixelFormat == Alpha)||(PixelFormat == Luminance)) 02183 scanline = new uint8[width]; 02184 else 02185 scanline = new uint8[width*4]; 02186 if(!scanline) 02187 { 02188 throw EAllocationFailure(); 02189 } 02190 02191 for(y=0; y<(sint32)height; y++) 02192 { 02193 02194 uint32 k=0; 02195 if (PixelFormat == Alpha) 02196 { 02197 for(i=0; i<width; ++i) // Alpha 02198 { 02199 scanline[k++] = _Data[0][(height-y-1)*width + i]; 02200 } 02201 } 02202 else if (PixelFormat == Luminance) 02203 { 02204 for(i=0; i<width; ++i) // Luminance 02205 { 02206 scanline[k++] = _Data[0][(height-y-1)*width + i]; 02207 } 02208 } 02209 else 02210 { 02211 for(i=0; i<width*4; i+=4) // 4:RGBA 02212 { 02213 if(d==16) 02214 { 02215 for(j=0; j<(sint32)4; j++) 02216 { 02217 scanline[k++] = _Data[0][(height-y-1)*width*4 + i + j]; 02218 } 02219 } 02220 else 02221 { 02222 for(j=0; j<(sint32)d/8; j++) 02223 { 02224 scanline[k++] = _Data[0][(height-y-1)*width*4 + i + j]; 02225 } 02226 } 02227 } 02228 } 02229 02230 if(d==16) 02231 { 02232 for(x=0; x<(sint32)width; x++) 02233 { 02234 r = scanline[x*4+0]; 02235 g = scanline[x*4+1]; 02236 b = scanline[x*4+2]; 02237 int rr = r >>3; 02238 int gg = g >>3; 02239 int bb = b >>3; 02240 uint16 c16 = (rr<<10) | (gg<<5) | bb; 02241 scanline[x*2+0] = c16&0xff; 02242 scanline[x*2+1] = c16>>8; 02243 } 02244 } 02245 if(d==24) 02246 { 02247 for(x=0; x<(sint32)width; x++) 02248 { 02249 r = scanline[x*3+0]; 02250 g = scanline[x*3+1]; 02251 b = scanline[x*3+2]; 02252 scanline[x*3+0] = b; 02253 scanline[x*3+1] = g; 02254 scanline[x*3+2] = r; 02255 } 02256 } 02257 if(d==32) 02258 { 02259 for(x=0; x<(sint32)width; x++) 02260 { 02261 r = scanline[x*4+0]; 02262 g = scanline[x*4+1]; 02263 b = scanline[x*4+2]; 02264 a= scanline[x*4+3]; 02265 scanline[x*4+0] = b; 02266 scanline[x*4+1] = g; 02267 scanline[x*4+2] = r; 02268 scanline[x*4+3] = a; 02269 } 02270 } 02271 02272 int finaleSize=width*d/8; 02273 for(i=0; i<finaleSize; i++) 02274 { 02275 f.serial(scanline[i]); 02276 } 02277 } 02278 delete scanline; 02279 return true; 02280 } |
|
Definition at line 67 of file smart_ptr.h. |
|
A pointer on the far bank.
Definition at line 143 of file texture_far.h. Referenced by rebuildPatch(). |
|
Reimplemented in NL3D::CTextureMem. Definition at line 90 of file bitmap.h. Referenced by NLMISC::CBitmap::blend(). |
|
Lists of empty Space. One for each possible size (64x64, 64x8 etc, but not 64x4 since not possible...) Definition at line 183 of file texture_far.h. Referenced by allocatePatch(), CTextureFar(), recursSplitNext(), removePatch(), and tryAllocatePatch(). |
|
Definition at line 96 of file bitmap.h. Referenced by NLMISC::CBitmap::blend(). |
|
Definition at line 210 of file texture_far.h. Referenced by CTextureFar(), endPatchULTouch(), removePatch(), startPatchULTouch(), and touchPatchULAndNext(). |
|
Definition at line 43 of file texture_far.cpp. Referenced by rebuildPatch(). |
|
List of invalided rectangle. If the list is empty, generate() will rebuild all the texture.
Definition at line 422 of file texture.h. Referenced by NL3D::ITexture::clearTouched(), NL3D::ITexture::isAllInvalidated(), NL3D::CDriverGL::setupTextureEx(), NL3D::ITexture::touch(), and NL3D::ITexture::touchRect(). |
|
Definition at line 94 of file bitmap.h. Referenced by NLMISC::CBitmap::CBitmap(), NLMISC::CBitmap::isGrayscaleAsAlpha(), NLMISC::CBitmap::loadGrayscaleAsAlpha(), and NLMISC::CBitmap::readTGA(). |
|
Definition at line 44 of file texture_far.cpp. Referenced by rebuildPatch(). |
|
Definition at line 93 of file bitmap.h. Referenced by NLMISC::CBitmap::alphaLuminanceToAlpha(), NLMISC::CBitmap::alphaLuminanceToLuminance(), NLMISC::CBitmap::alphaLuminanceToRGBA(), NLMISC::CBitmap::alphaToAlphaLuminance(), NLMISC::CBitmap::alphaToRGBA(), NLMISC::CBitmap::buildMipMaps(), NLMISC::CBitmap::CBitmap(), NLMISC::CBitmap::decompressDXT1(), NLMISC::CBitmap::decompressDXT3(), NLMISC::CBitmap::decompressDXT5(), NLMISC::CBitmap::flipH(), NLMISC::CBitmap::flipV(), NLMISC::CBitmap::getMipMapCount(), NLMISC::CBitmap::luminanceToAlpha(), NLMISC::CBitmap::luminanceToAlphaLuminance(), NLMISC::CBitmap::luminanceToRGBA(), NLMISC::CBitmap::makeDummy(), NLMISC::CBitmap::readDDS(), NLMISC::CBitmap::readTGA(), NLMISC::CBitmap::releaseMipMaps(), NLMISC::CBitmap::resample(), NLMISC::CBitmap::reset(), NLMISC::CBitmap::rgbaToAlpha(), NLMISC::CBitmap::rgbaToAlphaLuminance(), NLMISC::CBitmap::rgbaToLuminance(), NLMISC::CBitmap::rot90CCW(), NLMISC::CBitmap::rot90CW(), and NLMISC::CBitmap::setMipMapCount(). |
|
Definition at line 178 of file texture_far.h. Referenced by allocatePatch(), CTextureFar(), endPatchULTouch(), removePatch(), startPatchULTouch(), and touchPatchULAndNext(). |
|
Definition at line 179 of file texture_far.h. Referenced by allocatePatch(), doGenerate(), and removePatch(). |
|
Definition at line 45 of file texture_far.cpp. Referenced by rebuildPatch(). |
|
|
|
Definition at line 208 of file texture_far.h. Referenced by CTextureFar(), getNextUL(), linkBeforeUL(), unlinkUL(), and ~CTextureFar(). |
|
UpdateLighting. CiruclarList.
Definition at line 207 of file texture_far.h. Referenced by CTextureFar(), linkBeforeUL(), unlinkUL(), and ~CTextureFar(). |
|
Definition at line 95 of file bitmap.h. Referenced by NLMISC::CBitmap::blend(). |
|
Initial value: { 32, 8, 8, 16, 4, 4, 8, 8, 16 } Definition at line 70 of file bitmap.cpp. Referenced by NLMISC::CBitmap::blit(), and NLMISC::CBitmap::resizeMipMap(). |
|
Definition at line 79 of file smart_ptr.h. Referenced by NLMISC::CRefCount::CRefCount(), NLMISC::CRefCount::getRefCount(), and NLMISC::CRefCount::~CRefCount(). |
|
Definition at line 83 of file bitmap.cpp. Referenced by NLMISC::CBitmap::readDDS(). |
|
Definition at line 84 of file bitmap.cpp. Referenced by NLMISC::CBitmap::readDDS(). |
|
Definition at line 85 of file bitmap.cpp. Referenced by NLMISC::CBitmap::readDDS(). |
|
Referenced by NLMISC::CRefCount::CRefCount(). |
|
Definition at line 80 of file smart_ptr.h. Referenced by NLMISC::CRefCount::CRefCount(), and NLMISC::CRefCount::~CRefCount(). |
|
Referenced by NLMISC::CBitmap::alphaLuminanceToAlpha(), NLMISC::CBitmap::alphaLuminanceToLuminance(), NLMISC::CBitmap::alphaLuminanceToRGBA(), NLMISC::CBitmap::alphaToAlphaLuminance(), NLMISC::CBitmap::alphaToLuminance(), NLMISC::CBitmap::alphaToRGBA(), NLMISC::CBitmap::blend(), NLMISC::CBitmap::blit(), NL3D::CTextureFile::buildBitmapFromFile(), NLMISC::CBitmap::buildMipMaps(), NLMISC::CBitmap::CBitmap(), NLMISC::CBitmap::convertToAlpha(), NLMISC::CBitmap::convertToAlphaLuminance(), NLMISC::CBitmap::convertToLuminance(), NLMISC::CBitmap::convertToRGBA(), NLMISC::CBitmap::convertToType(), NLMISC::CBitmap::decompressDXT1(), NLMISC::CBitmap::decompressDXT3(), NLMISC::CBitmap::decompressDXT5(), NLMISC::CBitmap::flipH(), NLMISC::CBitmap::flipV(), NLMISC::CBitmap::getColor(), NLMISC::CBitmap::getPixelColor(), NLMISC::CBitmap::getPixelFormat(), NLMISC::CBitmap::luminanceToAlpha(), NLMISC::CBitmap::luminanceToAlphaLuminance(), NLMISC::CBitmap::luminanceToRGBA(), NLMISC::CBitmap::makeDummy(), NLMISC::CBitmap::readDDS(), NLMISC::CBitmap::readTGA(), NLMISC::CBitmap::resample(), NLMISC::CBitmap::reset(), NLMISC::CBitmap::resize(), NLMISC::CBitmap::resizeMipMap(), NLMISC::CBitmap::rgbaToAlpha(), NLMISC::CBitmap::rgbaToAlphaLuminance(), NLMISC::CBitmap::rgbaToLuminance(), NLMISC::CBitmap::rot90CCW(), NLMISC::CBitmap::rot90CW(), NLMISC::CBitmap::rotateCCW(), NL3D::sameDXTCFormat(), and NLMISC::CBitmap::writeTGA(). |
|
Definition at line 416 of file texture.h. Referenced by NL3D::CDriverGL::copyFrameBufferToTexture(), NL3D::getTextureGl(), NL3D::CDriverGL::getTextureHandle(), NL3D::ITexture::releaseDriverSetup(), NL3D::ITexture::setupedIntoDriver(), NL3D::CDriverGL::setupTextureEx(), NL3D::CDriverGL::uploadTexture(), and NL3D::CDriverGL::uploadTextureCube(). |