MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/PhysX / load

Method load

physx/source/geomutils/src/hf/GuHeightField.cpp:213–276  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

211}
212
213bool Gu::HeightField::load(PxInputStream& stream)
214{
215 // release old memory
216 releaseMemory();
217
218 // Import header
219 PxU32 version;
220 bool endian;
221 if(!readHeader('H', 'F', 'H', 'F', version, endian, stream))
222 return false;
223
224 // load mData
225 mData.rows = readDword(endian, stream);
226 mData.columns = readDword(endian, stream);
227 mData.rowLimit = readFloat(endian, stream);
228 mData.colLimit = readFloat(endian, stream);
229 mData.nbColumns = readFloat(endian, stream);
230 const float thickness = readFloat(endian, stream);
231 PX_UNUSED(thickness);
232 mData.convexEdgeThreshold = readFloat(endian, stream);
233
234 PxU16 flags = readWord(endian, stream);
235 mData.flags = PxHeightFieldFlags(flags);
236
237 PxU32 format = readDword(endian, stream);
238 mData.format = PxHeightFieldFormat::Enum(format);
239
240 PxBounds3 minMaxBounds;
241 minMaxBounds.minimum.x = readFloat(endian, stream);
242 minMaxBounds.minimum.y = readFloat(endian, stream);
243 minMaxBounds.minimum.z = readFloat(endian, stream);
244 minMaxBounds.maximum.x = readFloat(endian, stream);
245 minMaxBounds.maximum.y = readFloat(endian, stream);
246 minMaxBounds.maximum.z = readFloat(endian, stream);
247 mData.mAABB = CenterExtents(minMaxBounds);
248
249 mSampleStride = readDword(endian, stream);
250 mNbSamples = readDword(endian, stream);
251 mMinHeight = readFloat(endian, stream);
252 mMaxHeight = readFloat(endian, stream);
253
254 // allocate height samples
255 mData.samples = NULL;
256 const PxU32 nbVerts = mData.rows * mData.columns;
257 if (nbVerts > 0)
258 {
259 mData.samples = reinterpret_cast<PxHeightFieldSample*>(PX_ALLOC(nbVerts*sizeof(PxHeightFieldSample), "PxHeightFieldSample"));
260 if (mData.samples == NULL)
261 {
262 Ps::getFoundation().error(PxErrorCode::eOUT_OF_MEMORY, __FILE__, __LINE__, "Gu::HeightField::load: PX_ALLOC failed!");
263 return false;
264 }
265 stream.read(mData.samples, mNbSamples*sizeof(PxHeightFieldSample));
266 if (endian)
267 for(PxU32 i = 0; i < mNbSamples; i++)
268 {
269 PxHeightFieldSample& s = mData.samples[i];
270 PX_ASSERT(sizeof(PxU16) == sizeof(s.height));

Callers

nothing calls this directly

Calls 10

readDwordFunction · 0.85
PX_UNUSEDFunction · 0.85
readWordFunction · 0.85
CenterExtentsClass · 0.85
errorMethod · 0.80
EnumEnum · 0.70
readHeaderFunction · 0.50
readFloatFunction · 0.50
flipFunction · 0.50
readMethod · 0.45

Tested by

no test coverage detected