-typedef const mdlTriangle_t* mdlTriangleIterator;
-
-void MDLSurface_read( Surface& surface, const byte* buffer, const char* name ){
- mdlHeader_t header;
-
- PointerInputStream inputStream( buffer );
- istream_read_mdlHeader( inputStream, header );
-
- for ( int i = 0; i < header.numskins; ++i )
- {
- switch ( istream_read_int32_le( inputStream ) )
- {
- case MDL_SKIN_SINGLE:
- inputStream.seek( header.skinwidth * header.skinheight );
- break;
- case MDL_SKIN_GROUP:
- int numskins = istream_read_int32_le( inputStream );
- inputStream.seek( numskins * ( 4 + ( header.skinwidth * header.skinheight ) ) );
- break;
- }
- }
-
- Array<mdlSt_t> mdlSts( header.numverts );
- for ( Array<mdlSt_t>::iterator i = mdlSts.begin(); i != mdlSts.end(); ++i )
- {
- ( *i ).onseam = istream_read_int32_le( inputStream );
- ( *i ).s = istream_read_int32_le( inputStream );
- ( *i ).t = istream_read_int32_le( inputStream );
- }
-
- Array<mdlTriangle_t> mdlTriangles( header.numtris );
- for ( Array<mdlTriangle_t>::iterator i = mdlTriangles.begin(); i != mdlTriangles.end(); ++i )
- {
- ( *i ).facesfront = istream_read_int32_le( inputStream );
- ( *i ).vertindex[0] = istream_read_int32_le( inputStream );
- ( *i ).vertindex[1] = istream_read_int32_le( inputStream );
- ( *i ).vertindex[2] = istream_read_int32_le( inputStream );
- }
-
- {
- bool found = false;
- for ( int i = 0; i < header.numframes && found == false; i++ )
- {
- switch ( istream_read_int32_le( inputStream ) )
- {
- case MDL_FRAME_SINGLE:
- inputStream.seek( MDL_FRAME_SIZE );
- found = true;
- break;
- case MDL_FRAME_GROUP:
- int numframes = istream_read_int32_le( inputStream );
- inputStream.seek( ( MDL_XYZNORMAL_SIZE * 2 ) + ( numframes * 4 ) );
- found = true;
- break;
- }
- }
- }
-
- Array<mdlXyzNormal_t> mdlXyzNormals( header.numtris );
- for ( Array<mdlXyzNormal_t>::iterator i = mdlXyzNormals.begin(); i != mdlXyzNormals.end(); ++i )
- {
- inputStream.read( ( *i ).v, 3 );
- inputStream.read( &( *i ).lightnormalindex, 1 );
- }
-
- {
- VertexBuffer<mdlVertex_t> mdl_vertices;
-
- {
- UniqueVertexBuffer<mdlVertex_t> inserter( mdl_vertices );
- for ( Array<mdlTriangle_t>::iterator i = mdlTriangles.begin(); i != mdlTriangles.end(); ++i )
- {
- surface.indices().insert( inserter.insert( mdlVertex_t( ( *i ).vertindex[0], ( *i ).facesfront ) ) );
- surface.indices().insert( inserter.insert( mdlVertex_t( ( *i ).vertindex[1], ( *i ).facesfront ) ) );
- surface.indices().insert( inserter.insert( mdlVertex_t( ( *i ).vertindex[2], ( *i ).facesfront ) ) );
- }
- }
-
- {
- surface.vertices().reserve( mdl_vertices.size() );
-
- for ( VertexBuffer<mdlVertex_t>::iterator i = mdl_vertices.begin(); i != mdl_vertices.end(); ++i )
- {
- surface.vertices().push_back( MDLVertex_construct( header, mdlXyzNormals[( *i ).m_vertindex], mdlSts[( *i ).m_vertindex], ( *i ).m_facesfront == MDL_FACES_FRONT ) );
- }
- }
- }
-
- surface.setShader( name );
- surface.updateAABB();
+typedef const mdlTriangle_t *mdlTriangleIterator;
+
+void MDLSurface_read(Surface &surface, const byte *buffer, const char *name)
+{
+ mdlHeader_t header;
+
+ PointerInputStream inputStream(buffer);
+ istream_read_mdlHeader(inputStream, header);
+
+ for (int i = 0; i < header.numskins; ++i) {
+ switch (istream_read_int32_le(inputStream)) {
+ case MDL_SKIN_SINGLE:
+ inputStream.seek(header.skinwidth * header.skinheight);
+ break;
+ case MDL_SKIN_GROUP:
+ int numskins = istream_read_int32_le(inputStream);
+ inputStream.seek(numskins * (4 + (header.skinwidth * header.skinheight)));
+ break;
+ }
+ }
+
+ Array<mdlSt_t> mdlSts(header.numverts);
+ for (Array<mdlSt_t>::iterator i = mdlSts.begin(); i != mdlSts.end(); ++i) {
+ (*i).onseam = istream_read_int32_le(inputStream);
+ (*i).s = istream_read_int32_le(inputStream);
+ (*i).t = istream_read_int32_le(inputStream);
+ }
+
+ Array<mdlTriangle_t> mdlTriangles(header.numtris);
+ for (Array<mdlTriangle_t>::iterator i = mdlTriangles.begin(); i != mdlTriangles.end(); ++i) {
+ (*i).facesfront = istream_read_int32_le(inputStream);
+ (*i).vertindex[0] = istream_read_int32_le(inputStream);
+ (*i).vertindex[1] = istream_read_int32_le(inputStream);
+ (*i).vertindex[2] = istream_read_int32_le(inputStream);
+ }
+
+ {
+ bool found = false;
+ for (int i = 0; i < header.numframes && found == false; i++) {
+ switch (istream_read_int32_le(inputStream)) {
+ case MDL_FRAME_SINGLE:
+ inputStream.seek(MDL_FRAME_SIZE);
+ found = true;
+ break;
+ case MDL_FRAME_GROUP:
+ int numframes = istream_read_int32_le(inputStream);
+ inputStream.seek((MDL_XYZNORMAL_SIZE * 2) + (numframes * 4));
+ found = true;
+ break;
+ }
+ }
+ }
+
+ Array<mdlXyzNormal_t> mdlXyzNormals(header.numtris);
+ for (Array<mdlXyzNormal_t>::iterator i = mdlXyzNormals.begin(); i != mdlXyzNormals.end(); ++i) {
+ inputStream.read((*i).v, 3);
+ inputStream.read(&(*i).lightnormalindex, 1);
+ }
+
+ {
+ VertexBuffer<mdlVertex_t> mdl_vertices;
+
+ {
+ UniqueVertexBuffer<mdlVertex_t> inserter(mdl_vertices);
+ for (Array<mdlTriangle_t>::iterator i = mdlTriangles.begin(); i != mdlTriangles.end(); ++i) {
+ surface.indices().insert(inserter.insert(mdlVertex_t((*i).vertindex[0], (*i).facesfront)));
+ surface.indices().insert(inserter.insert(mdlVertex_t((*i).vertindex[1], (*i).facesfront)));
+ surface.indices().insert(inserter.insert(mdlVertex_t((*i).vertindex[2], (*i).facesfront)));
+ }
+ }
+
+ {
+ surface.vertices().reserve(mdl_vertices.size());
+
+ for (VertexBuffer<mdlVertex_t>::iterator i = mdl_vertices.begin(); i != mdl_vertices.end(); ++i) {
+ surface.vertices().push_back(
+ MDLVertex_construct(header, mdlXyzNormals[(*i).m_vertindex], mdlSts[(*i).m_vertindex],
+ (*i).m_facesfront == MDL_FACES_FRONT));
+ }
+ }
+ }
+
+ surface.setShader(name);
+ surface.updateAABB();