Merge branch 'main/rendor-staging' into fixes
[ryzomcore.git] / nel / src / 3d / tile_lumel.cpp
blob7eaa80199c062658eb83e81f89b697c489c1c3ec
1 // NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
2 // Copyright (C) 2010 Winch Gate Property Limited
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU Affero General Public License as
6 // published by the Free Software Foundation, either version 3 of the
7 // License, or (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU Affero General Public License for more details.
14 // You should have received a copy of the GNU Affero General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
17 #include "std3d.h"
19 #include "nel/3d/tile_lumel.h"
21 using namespace NLMISC;
23 #ifdef DEBUG_NEW
24 #define new DEBUG_NEW
25 #endif
27 namespace NL3D
31 // ***************************************************************************
32 void CTileLumel::createUncompressed (uint8 interpolated, uint8 shaded)
34 // Shading
35 Shaded=shaded;
37 // Same color ?
38 if (interpolated!=shaded)
40 // Compute compressed value
41 sint temp=((shaded<<3)/(sint)(interpolated?interpolated:1));
42 clamp (temp, 0, 15);
44 // After decompression
45 uint decompressed=(((uint)interpolated*((uint)temp))>>3)+4;
46 if (decompressed>255)
47 decompressed=255;
49 // Need to compress ?
50 if (abs((sint)shaded-(sint)decompressed)>=abs((sint)shaded-(sint)interpolated))
52 // Shadow not present
53 _ShadowValue=0xff;
55 else
57 // Shadow
58 _ShadowValue=temp;
61 else
63 // Shadow not present
64 _ShadowValue=0xff;
68 // ***************************************************************************
69 void CTileLumel::pack (CStreamBit& stream) const
71 // There is shadow here ?
72 if (isShadowed ())
74 // Put a true
75 stream.pushBackBool(true);
77 // Read the shadow value
78 stream.pushBack4bits(_ShadowValue);
80 else
81 // Put a false
82 stream.pushBackBool(false);
86 } // NL3D
89 /* End of tile_lumel.h */