@@ -156,7 +156,6 @@ void Extractor::save(QString output, nx::Signature &signature) {
156156 header.n_patches = patches.size ();
157157 header.n_textures = textures.size ();
158158
159-
160159 quint64 size = sizeof (nx::Header) +
161160 nodes.size ()*sizeof (nx::Node) +
162161 patches.size ()*sizeof (nx::Patch) +
@@ -170,9 +169,12 @@ void Extractor::save(QString output, nx::Signature &signature) {
170169 // TODO should actually remove textures not used anymore.
171170
172171 file.write ((char *)&header, sizeof (header));
173- file.write ((char *)&*nodes.begin (), sizeof (nx::Node)*nodes.size ());
174- file.write ((char *)&*patches.begin (), sizeof (nx::Patch)*patches.size ());
175- file.write ((char *)&*textures.begin (), sizeof (nx::Texture)*textures.size ());
172+ if (!nodes.empty ())
173+ file.write ((char *)&*nodes.begin (), sizeof (nx::Node)*nodes.size ());
174+ if (!patches.empty ())
175+ file.write ((char *)&*patches.begin (), sizeof (nx::Patch)*patches.size ());
176+ if (!textures.empty ())
177+ file.write ((char *)&*textures.begin (), sizeof (nx::Texture)*textures.size ());
176178 file.seek (size);
177179
178180 for (uint i = 0 ; i < node_remap.size ()-1 ; i++) {
@@ -224,9 +226,12 @@ void Extractor::save(QString output, nx::Signature &signature) {
224226 }
225227
226228 file.seek (sizeof (nx::Header));
227- file.write ((char *)&*nodes.begin (), sizeof (nx::Node)*nodes.size ());
228- file.write ((char *)&*patches.begin (), sizeof (nx::Patch)*patches.size ());
229- file.write ((char *)&*textures.begin (), sizeof (nx::Texture)*textures.size ());
229+ if (!nodes.empty ())
230+ file.write ((char *)&*nodes.begin (), sizeof (nx::Node)*nodes.size ());
231+ if (!patches.empty ())
232+ file.write ((char *)&*patches.begin (), sizeof (nx::Patch)*patches.size ());
233+ if (!textures.empty ())
234+ file.write ((char *)&*textures.begin (), sizeof (nx::Texture)*textures.size ());
230235 file.close ();
231236}
232237
@@ -285,7 +290,8 @@ void Extractor::compress(QFile &file, nx::Signature &signature, nx::Node &node,
285290 // cout << "C size: " << coder.color_size << endl;
286291 // cout << "I size: " << coder.face_size << endl;
287292
288- file.write ((char *)&*coder.stream .buffer , coder.stream .size ());
293+ if (coder.stream .size () > 0 )
294+ file.write ((char *)&*coder.stream .buffer , coder.stream .size ());
289295 // padding
290296 quint64 size = pad (file.pos ()) - file.pos ();
291297 char tmp[NEXUS_PADDING ];
@@ -349,8 +355,8 @@ void Extractor::compress(QFile &file, nx::Signature &signature, nx::Node &node,
349355 //cout << "Face bpv; " << 8.0f*encoder.index.size/nvert << " size: " << encoder.index.size << endl; */
350356
351357
352-
353- file.write ((char *)&*encoder.stream .data (), encoder.stream .size ());
358+ if (encoder. stream . size () > 0 )
359+ file.write ((char *)&*encoder.stream .data (), encoder.stream .size ());
354360 quint64 size = pad (file.pos ()) - file.pos ();
355361 char tmp[NEXUS_PADDING ];
356362 file.write (tmp, size);
0 commit comments