]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - plugins/md3model/md3.cpp
Revert partially (auto) "reformat code! now the code is only ugly on the *inside*"
[xonotic/netradiant.git] / plugins / md3model / md3.cpp
index 3c5c50602463a1acdb9aa8f9a64be1c46a233af3..0b459827144b16da77cb380eba25c97a43426d71 100644 (file)
@@ -42,59 +42,56 @@ const int MAX_QPATH = 64;
    ========================================================================
  */
 
-const unsigned char MD3_IDENT[4] = {'I', 'D', 'P', '3',};
+const unsigned char MD3_IDENT[4] = { 'I', 'D', 'P', '3', };
 const int MD3_VERSION = 15;
 
 // limits
-const int MD3_MAX_LODS = 4;
-const int MD3_MAX_TRIANGLES = 8192;    // per surface
-const int MD3_MAX_VERTS = 4096;    // per surface
-const int MD3_MAX_SHADERS = 256;     // per surface
-const int MD3_MAX_FRAMES = 1024;    // per model
-const int MD3_MAX_SURFACES = 32;      // per model
-const int MD3_MAX_TAGS = 16;      // per frame
+const int MD3_MAX_LODS        = 4;
+const int MD3_MAX_TRIANGLES   = 8192;    // per surface
+const int MD3_MAX_VERTS       = 4096;    // per surface
+const int MD3_MAX_SHADERS     = 256;     // per surface
+const int MD3_MAX_FRAMES      = 1024;    // per model
+const int MD3_MAX_SURFACES    = 32;      // per model
+const int MD3_MAX_TAGS        = 16;      // per frame
 
 // vertex scales
-const float MD3_XYZ_SCALE = (1.f / 64);
+const float MD3_XYZ_SCALE = ( 1.f / 64 );
 
 typedef float float3[3];
 
-void istream_read_float3(PointerInputStream &inputStream, float3 f)
-{
-    f[0] = istream_read_float32_le(inputStream);
-    f[1] = istream_read_float32_le(inputStream);
-    f[2] = istream_read_float32_le(inputStream);
+void istream_read_float3( PointerInputStream& inputStream, float3 f ){
+       f[0] = istream_read_float32_le( inputStream );
+       f[1] = istream_read_float32_le( inputStream );
+       f[2] = istream_read_float32_le( inputStream );
 }
 
 typedef struct md3Frame_s {
-    float3 bounds[2];
-    float3 localOrigin;
-    float radius;
-    char name[16];
+       float3 bounds[2];
+       float3 localOrigin;
+       float radius;
+       char name[16];
 } md3Frame_t;
 
-void istream_read_md3Frame(PointerInputStream &inputStream, md3Frame_t &frame)
-{
-    istream_read_float3(inputStream, frame.bounds[0]);
-    istream_read_float3(inputStream, frame.bounds[1]);
-    istream_read_float3(inputStream, frame.localOrigin);
-    frame.radius = istream_read_float32_le(inputStream);
-    inputStream.read(reinterpret_cast<unsigned char *>( frame.name ), 16);
+void istream_read_md3Frame( PointerInputStream& inputStream, md3Frame_t& frame ){
+       istream_read_float3( inputStream, frame.bounds[0] );
+       istream_read_float3( inputStream, frame.bounds[1] );
+       istream_read_float3( inputStream, frame.localOrigin );
+       frame.radius = istream_read_float32_le( inputStream );
+       inputStream.read( reinterpret_cast<unsigned char*>( frame.name ), 16 );
 }
 
 typedef struct md3Tag_s {
-    char name[MAX_QPATH];           // tag name
-    float3 origin;
-    float3 axis[3];
+       char name[MAX_QPATH];           // tag name
+       float3 origin;
+       float3 axis[3];
 } md3Tag_t;
 
-void istream_read_md3Shader(PointerInputStream &inputStream, md3Tag_t &tag)
-{
-    inputStream.read(reinterpret_cast<unsigned char *>( tag.name ), MAX_QPATH);
-    istream_read_float3(inputStream, tag.origin);
-    istream_read_float3(inputStream, tag.axis[0]);
-    istream_read_float3(inputStream, tag.axis[1]);
-    istream_read_float3(inputStream, tag.axis[2]);
+void istream_read_md3Shader( PointerInputStream& inputStream, md3Tag_t& tag ){
+       inputStream.read( reinterpret_cast<unsigned char*>( tag.name ), MAX_QPATH );
+       istream_read_float3( inputStream, tag.origin );
+       istream_read_float3( inputStream, tag.axis[0] );
+       istream_read_float3( inputStream, tag.axis[1] );
+       istream_read_float3( inputStream, tag.axis[2] );
 }
 
 /*
@@ -108,227 +105,219 @@ void istream_read_md3Shader(PointerInputStream &inputStream, md3Tag_t &tag)
 ** XyzNormals          sizeof( md3XyzNormal_t ) * numVerts * numFrames
 */
 typedef struct {
-    char ident[4];              //
+       char ident[4];              //
 
-    char name[MAX_QPATH]; // polyset name
+       char name[MAX_QPATH]; // polyset name
 
-    int flags;
-    int numFrames; // all surfaces in a model should have the same
+       int flags;
+       int numFrames; // all surfaces in a model should have the same
 
-    int numShaders; // all surfaces in a model should have the same
-    int numVerts;
+       int numShaders; // all surfaces in a model should have the same
+       int numVerts;
 
-    int numTriangles;
-    int ofsTriangles;
+       int numTriangles;
+       int ofsTriangles;
 
-    int ofsShaders; // offset from start of md3Surface_t
-    int ofsSt; // texture coords are common for all frames
-    int ofsXyzNormals; // numVerts * numFrames
+       int ofsShaders; // offset from start of md3Surface_t
+       int ofsSt; // texture coords are common for all frames
+       int ofsXyzNormals; // numVerts * numFrames
 
-    int ofsEnd; // next surface follows
+       int ofsEnd; // next surface follows
 } md3Surface_t;
 
-void istream_read_md3Surface(PointerInputStream &inputStream, md3Surface_t &surface)
-{
-    inputStream.read(reinterpret_cast<unsigned char *>( surface.ident ), 4);
-    inputStream.read(reinterpret_cast<unsigned char *>( surface.name ), MAX_QPATH);
-    surface.flags = istream_read_int32_le(inputStream);
-    surface.numFrames = istream_read_int32_le(inputStream);
-    surface.numShaders = istream_read_int32_le(inputStream);
-    surface.numVerts = istream_read_int32_le(inputStream);
-    surface.numTriangles = istream_read_int32_le(inputStream);
-    surface.ofsTriangles = istream_read_int32_le(inputStream);
-    surface.ofsShaders = istream_read_int32_le(inputStream);
-    surface.ofsSt = istream_read_int32_le(inputStream);
-    surface.ofsXyzNormals = istream_read_int32_le(inputStream);
-    surface.ofsEnd = istream_read_int32_le(inputStream);
+void istream_read_md3Surface( PointerInputStream& inputStream, md3Surface_t& surface ){
+       inputStream.read( reinterpret_cast<unsigned char*>( surface.ident ), 4 );
+       inputStream.read( reinterpret_cast<unsigned char*>( surface.name ), MAX_QPATH );
+       surface.flags = istream_read_int32_le( inputStream );
+       surface.numFrames = istream_read_int32_le( inputStream );
+       surface.numShaders = istream_read_int32_le( inputStream );
+       surface.numVerts = istream_read_int32_le( inputStream );
+       surface.numTriangles = istream_read_int32_le( inputStream );
+       surface.ofsTriangles = istream_read_int32_le( inputStream );
+       surface.ofsShaders = istream_read_int32_le( inputStream );
+       surface.ofsSt = istream_read_int32_le( inputStream );
+       surface.ofsXyzNormals = istream_read_int32_le( inputStream );
+       surface.ofsEnd = istream_read_int32_le( inputStream );
 }
 
 typedef struct {
-    char name[MAX_QPATH];
-    int shaderIndex;                // for in-game use
+       char name[MAX_QPATH];
+       int shaderIndex;                // for in-game use
 } md3Shader_t;
 
-void istream_read_md3Shader(PointerInputStream &inputStream, md3Shader_t &shader)
-{
-    inputStream.read(reinterpret_cast<unsigned char *>( shader.name ), MAX_QPATH);
-    shader.shaderIndex = istream_read_int32_le(inputStream);
+void istream_read_md3Shader( PointerInputStream& inputStream, md3Shader_t& shader ){
+       inputStream.read( reinterpret_cast<unsigned char*>( shader.name ), MAX_QPATH );
+       shader.shaderIndex = istream_read_int32_le( inputStream );
 }
 
 typedef struct {
-    int indexes[3];
+       int indexes[3];
 } md3Triangle_t;
 
-void istream_read_md3Triangle(PointerInputStream &inputStream, md3Triangle_t &triangle)
-{
-    triangle.indexes[0] = istream_read_int32_le(inputStream);
-    triangle.indexes[1] = istream_read_int32_le(inputStream);
-    triangle.indexes[2] = istream_read_int32_le(inputStream);
+void istream_read_md3Triangle( PointerInputStream& inputStream, md3Triangle_t& triangle ){
+       triangle.indexes[0] = istream_read_int32_le( inputStream );
+       triangle.indexes[1] = istream_read_int32_le( inputStream );
+       triangle.indexes[2] = istream_read_int32_le( inputStream );
 }
 
 typedef struct {
-    float st[2];
+       float st[2];
 } md3St_t;
 
-void istream_read_md3St(PointerInputStream &inputStream, md3St_t &st)
-{
-    st.st[0] = istream_read_float32_le(inputStream);
-    st.st[1] = istream_read_float32_le(inputStream);
+void istream_read_md3St( PointerInputStream& inputStream, md3St_t& st ){
+       st.st[0] = istream_read_float32_le( inputStream );
+       st.st[1] = istream_read_float32_le( inputStream );
 }
 
 typedef struct {
-    short xyz[3];
-    short normal;
+       short xyz[3];
+       short normal;
 } md3XyzNormal_t;
 
-void istream_read_md3XyzNormal(PointerInputStream &inputStream, md3XyzNormal_t &xyz)
-{
-    xyz.xyz[0] = istream_read_int16_le(inputStream);
-    xyz.xyz[1] = istream_read_int16_le(inputStream);
-    xyz.xyz[2] = istream_read_int16_le(inputStream);
-    xyz.normal = istream_read_int16_le(inputStream);
+void istream_read_md3XyzNormal( PointerInputStream& inputStream, md3XyzNormal_t& xyz ){
+       xyz.xyz[0] = istream_read_int16_le( inputStream );
+       xyz.xyz[1] = istream_read_int16_le( inputStream );
+       xyz.xyz[2] = istream_read_int16_le( inputStream );
+       xyz.normal = istream_read_int16_le( inputStream );
 }
 
 typedef struct {
-    char ident[4];
-    int version;
+       char ident[4];
+       int version;
 
-    char name[MAX_QPATH];           // model name
+       char name[MAX_QPATH];           // model name
 
-    int flags;
+       int flags;
 
-    int numFrames;
-    int numTags;
-    int numSurfaces;
+       int numFrames;
+       int numTags;
+       int numSurfaces;
 
-    int numSkins;
+       int numSkins;
 
-    int ofsFrames;                  // offset for first frame
-    int ofsTags;                    // numFrames * numTags
-    int ofsSurfaces;                // first surface, others follow
+       int ofsFrames;                  // offset for first frame
+       int ofsTags;                    // numFrames * numTags
+       int ofsSurfaces;                // first surface, others follow
 
-    int ofsEnd;                     // end of file
+       int ofsEnd;                     // end of file
 } md3Header_t;
 
-void istream_read_md3Header(PointerInputStream &inputStream, md3Header_t &header)
-{
-    inputStream.read(reinterpret_cast<unsigned char *>( header.ident ), 4);
-    header.version = istream_read_int32_le(inputStream);
-    inputStream.read(reinterpret_cast<unsigned char *>( header.name ), MAX_QPATH);
-    header.flags = istream_read_int32_le(inputStream);
-    header.numFrames = istream_read_int32_le(inputStream);
-    header.numTags = istream_read_int32_le(inputStream);
-    header.numSurfaces = istream_read_int32_le(inputStream);
-    header.numSkins = istream_read_int32_le(inputStream);
-    header.ofsFrames = istream_read_int32_le(inputStream);
-    header.ofsTags = istream_read_int32_le(inputStream);
-    header.ofsSurfaces = istream_read_int32_le(inputStream);
-    header.ofsEnd = istream_read_int32_le(inputStream);
+void istream_read_md3Header( PointerInputStream& inputStream, md3Header_t& header ){
+       inputStream.read( reinterpret_cast<unsigned char*>( header.ident ), 4 );
+       header.version = istream_read_int32_le( inputStream );
+       inputStream.read( reinterpret_cast<unsigned char*>( header.name ), MAX_QPATH );
+       header.flags = istream_read_int32_le( inputStream );
+       header.numFrames = istream_read_int32_le( inputStream );
+       header.numTags = istream_read_int32_le( inputStream );
+       header.numSurfaces = istream_read_int32_le( inputStream );
+       header.numSkins = istream_read_int32_le( inputStream );
+       header.ofsFrames = istream_read_int32_le( inputStream );
+       header.ofsTags = istream_read_int32_le( inputStream );
+       header.ofsSurfaces = istream_read_int32_le( inputStream );
+       header.ofsEnd = istream_read_int32_le( inputStream );
 }
 
-int MD3Surface_read(Surface &surface, unsigned char *buffer)
-{
-    md3Surface_t md3Surface;
-    {
-        PointerInputStream inputStream(buffer);
-        istream_read_md3Surface(inputStream, md3Surface);
-    }
-
-    {
-        surface.vertices().reserve(md3Surface.numVerts);
-
-        PointerInputStream xyzNormalStream(buffer + md3Surface.ofsXyzNormals);
-        PointerInputStream stStream(buffer + md3Surface.ofsSt);
-
-        // read verts into vertex array - xyz, st, normal
-        for (int i = 0; i < md3Surface.numVerts; i++) {
-            md3XyzNormal_t md3Xyz;
-            istream_read_md3XyzNormal(xyzNormalStream, md3Xyz);
-
-            md3St_t md3St;
-            istream_read_md3St(stStream, md3St);
-
-            surface.vertices().push_back(
-                    ArbitraryMeshVertex(
-                            Vertex3f(md3Xyz.xyz[0] * MD3_XYZ_SCALE, md3Xyz.xyz[1] * MD3_XYZ_SCALE,
-                                     md3Xyz.xyz[2] * MD3_XYZ_SCALE),
-                            DecodeNormal(reinterpret_cast<byte *>( &md3Xyz.normal )),
-                            TexCoord2f(md3St.st[0], md3St.st[1])
-                    )
-            );
-        }
-    }
-
-    {
-        surface.indices().reserve(md3Surface.numTriangles * 3);
-
-        PointerInputStream inputStream(buffer + md3Surface.ofsTriangles);
-        for (int i = 0; i < md3Surface.numTriangles; i++) {
-            md3Triangle_t md3Triangle;
-            istream_read_md3Triangle(inputStream, md3Triangle);
-            surface.indices().insert(md3Triangle.indexes[0]);
-            surface.indices().insert(md3Triangle.indexes[1]);
-            surface.indices().insert(md3Triangle.indexes[2]);
-        }
-    }
-
-    {
-        md3Shader_t md3Shader;
-        {
-            PointerInputStream inputStream(buffer + md3Surface.ofsShaders);
-            istream_read_md3Shader(inputStream, md3Shader);
-        }
-        surface.setShader(md3Shader.name);
-    }
-
-    surface.updateAABB();
-
-    return md3Surface.ofsEnd;
+int MD3Surface_read( Surface& surface, unsigned char* buffer ){
+       md3Surface_t md3Surface;
+       {
+               PointerInputStream inputStream( buffer );
+               istream_read_md3Surface( inputStream, md3Surface );
+       }
+
+       {
+               surface.vertices().reserve( md3Surface.numVerts );
+
+               PointerInputStream xyzNormalStream( buffer + md3Surface.ofsXyzNormals );
+               PointerInputStream stStream( buffer + md3Surface.ofsSt );
+
+               // read verts into vertex array - xyz, st, normal
+               for ( int i = 0; i < md3Surface.numVerts; i++ )
+               {
+                       md3XyzNormal_t md3Xyz;
+                       istream_read_md3XyzNormal( xyzNormalStream, md3Xyz );
+
+                       md3St_t md3St;
+                       istream_read_md3St( stStream, md3St );
+
+                       surface.vertices().push_back(
+                               ArbitraryMeshVertex(
+                                       Vertex3f( md3Xyz.xyz[0] * MD3_XYZ_SCALE, md3Xyz.xyz[1] * MD3_XYZ_SCALE, md3Xyz.xyz[2] * MD3_XYZ_SCALE ),
+                                       DecodeNormal( reinterpret_cast<byte*>( &md3Xyz.normal ) ),
+                                       TexCoord2f( md3St.st[0], md3St.st[1] )
+                                       )
+                               );
+               }
+       }
+
+       {
+               surface.indices().reserve( md3Surface.numTriangles * 3 );
+
+               PointerInputStream inputStream( buffer + md3Surface.ofsTriangles );
+               for ( int i = 0; i < md3Surface.numTriangles; i++ )
+               {
+                       md3Triangle_t md3Triangle;
+                       istream_read_md3Triangle( inputStream, md3Triangle );
+                       surface.indices().insert( md3Triangle.indexes[0] );
+                       surface.indices().insert( md3Triangle.indexes[1] );
+                       surface.indices().insert( md3Triangle.indexes[2] );
+               }
+       }
+
+       {
+               md3Shader_t md3Shader;
+               {
+                       PointerInputStream inputStream( buffer + md3Surface.ofsShaders );
+                       istream_read_md3Shader( inputStream, md3Shader );
+               }
+               surface.setShader( md3Shader.name );
+       }
+
+       surface.updateAABB();
+
+       return md3Surface.ofsEnd;
 }
 
-void MD3Model_read(Model &model, unsigned char *buffer)
-{
-    md3Header_t md3Header;
-    {
-        PointerInputStream inputStream(buffer);
-        istream_read_md3Header(inputStream, md3Header);
-    }
+void MD3Model_read( Model& model, unsigned char* buffer ){
+       md3Header_t md3Header;
+       {
+               PointerInputStream inputStream( buffer );
+               istream_read_md3Header( inputStream, md3Header );
+       }
 
-    unsigned char *surfacePosition = buffer + md3Header.ofsSurfaces;
+       unsigned char* surfacePosition = buffer + md3Header.ofsSurfaces;
 
-    for (int i = 0; i != md3Header.numSurfaces; ++i) {
-        surfacePosition += MD3Surface_read(model.newSurface(), surfacePosition);
-    }
+       for ( int i = 0; i != md3Header.numSurfaces; ++i )
+       {
+               surfacePosition += MD3Surface_read( model.newSurface(), surfacePosition );
+       }
 
-    model.updateAABB();
+       model.updateAABB();
 }
 
-scene::Node &MD3Model_new(unsigned char *buffer)
-{
-    ModelNode *modelNode = new ModelNode();
-    MD3Model_read(modelNode->model(), buffer);
-    return modelNode->node();
+scene::Node& MD3Model_new( unsigned char* buffer ){
+       ModelNode* modelNode = new ModelNode();
+       MD3Model_read( modelNode->model(), buffer );
+       return modelNode->node();
 }
 
-scene::Node &MD3Model_default()
-{
-    ModelNode *modelNode = new ModelNode();
-    Model_constructNull(modelNode->model());
-    return modelNode->node();
+scene::Node& MD3Model_default(){
+       ModelNode* modelNode = new ModelNode();
+       Model_constructNull( modelNode->model() );
+       return modelNode->node();
 }
 
-scene::Node &MD3Model_fromBuffer(unsigned char *buffer)
-{
-    if (!ident_equal(buffer, MD3_IDENT)) {
-        globalErrorStream() << "MD3 read error: incorrect ident\n";
-        return MD3Model_default();
-    } else {
-        return MD3Model_new(buffer);
-    }
+scene::Node& MD3Model_fromBuffer( unsigned char* buffer ){
+       if ( !ident_equal( buffer, MD3_IDENT ) ) {
+               globalErrorStream() << "MD3 read error: incorrect ident\n";
+               return MD3Model_default();
+       }
+       else
+       {
+               return MD3Model_new( buffer );
+       }
 }
 
-scene::Node &loadMD3Model(ArchiveFile &file)
-{
-    ScopedArchiveBuffer buffer(file);
-    return MD3Model_fromBuffer(buffer.buffer);
+scene::Node& loadMD3Model( ArchiveFile& file ){
+       ScopedArchiveBuffer buffer( file );
+       return MD3Model_fromBuffer( buffer.buffer );
 }