MCPcopy Create free account
hub / github.com/TorqueGameEngines/Torque3D / _buildGridMap

Method _buildGridMap

Engine/source/terrain/terrFile.cpp:93–254  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

91}
92
93void TerrainFile::_buildGridMap()
94{
95 // The grid level count is the same as the
96 // most significant bit of the size. While
97 // we loop we take the time to calculate the
98 // grid memory pool size.
99 mGridLevels = 0;
100 U32 size = mSize;
101 U32 poolSize = size * size;
102 while ( size >>= 1 )
103 {
104 poolSize += size * size;
105 mGridLevels++;
106 }
107
108 mGridMapPool.setSize( poolSize );
109 mGridMapPool.compact();
110 mGridMap.setSize( mGridLevels + 1 );
111 mGridMap.compact();
112
113 // Assign memory from the pool to each grid level.
114 TerrainSquare *grid = mGridMapPool.address();
115 for ( S32 i = mGridLevels; i >= 0; i-- )
116 {
117 mGridMap[i] = grid;
118 grid += 1 << ( 2 * ( mGridLevels - i ) );
119 }
120
121 for( S32 i = mGridLevels; i >= 0; i-- )
122 {
123 S32 squareCount = 1 << ( mGridLevels - i );
124 S32 squareSize = mSize / squareCount;
125
126 for ( S32 squareX = 0; squareX < squareCount; squareX++ )
127 {
128 for ( S32 squareY = 0; squareY < squareCount; squareY++ )
129 {
130 U16 min = 0xFFFF;
131 U16 max = 0;
132 U16 mindev45 = 0;
133 U16 mindev135 = 0;
134
135 // determine max error for both possible splits.
136
137 const Point3F p1(0, 0, getHeight(squareX * squareSize, squareY * squareSize));
138 const Point3F p2(0, (F32)squareSize, getHeight(squareX * squareSize, squareY * squareSize + squareSize));
139 const Point3F p3((F32)squareSize, (F32)squareSize, getHeight(squareX * squareSize + squareSize, squareY * squareSize + squareSize));
140 const Point3F p4((F32)squareSize, 0, getHeight(squareX * squareSize + squareSize, squareY * squareSize));
141
142 // pl1, pl2 = split45, pl3, pl4 = split135
143 const PlaneF pl1(p1, p2, p3);
144 const PlaneF pl2(p1, p3, p4);
145 const PlaneF pl3(p1, p2, p4);
146 const PlaneF pl4(p2, p3, p4);
147
148 bool parentSplit45 = false;
149 TerrainSquare *parent = NULL;
150 if ( i < mGridLevels )

Callers 1

loadMethod · 0.80

Calls 6

calcDevFunction · 0.85
UmaxFunction · 0.85
getHeightFunction · 0.50
setSizeMethod · 0.45
compactMethod · 0.45
addressMethod · 0.45

Tested by

no test coverage detected