changeset 245:eed8eed58f82

Changes in the 3d loader.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 09 Oct 2012 17:46:40 +0300
parents 00785510b743
children 3bf8ebf09a6a
files dmq3d.c dmq3d.h vptest.c
diffstat 3 files changed, 35 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/dmq3d.c	Tue Oct 09 17:22:52 2012 +0300
+++ b/dmq3d.c	Tue Oct 09 17:46:40 2012 +0300
@@ -189,7 +189,10 @@
             t = &v;
         }
         else
-            t = &p;
+        {
+            dm_vector_add_r(&v, &p, pt);
+            t = &v;
+        }
 
         if (dmAdd3DLineSpriteModelVertex(model, t, &indices[vertex]) != DMERR_OK)
             goto error;
@@ -279,12 +282,13 @@
 }
 
 
-int dmRead3DLineSpriteModel(DMResource *f, DM3DLineSpriteModel *model)
+int dmRead3DLineSpriteModel(DMResource *f, DM3DLineSpriteModel **model)
 {
     DMVector pt;
     char line[512];
 
-    memset(model, 0, sizeof(*model));
+    if ((*model = dmMalloc0(sizeof(DM3DLineSpriteModel))) == NULL)
+        return DMERR_MALLOC;
 
     while (dmfgets(line, sizeof(line), f) != NULL)
     {
@@ -296,7 +300,7 @@
                 break;
             
             case 'B':
-                if (!dmReadBitmap(start, model))
+                if (!dmReadBitmap(start, *model))
                     return DMERR_INVALID_DATA;
                 break;
             
@@ -308,17 +312,17 @@
                 break;
 
             case 'L':
-                if (!dmReadLineSegments(start, model, FALSE, &pt))
+                if (!dmReadLineSegments(start, *model, FALSE, &pt))
                     return DMERR_INVALID_DATA;
                 break;
 
             case 'R':
-                if (!dmReadLineSegments(start, model, TRUE, &pt))
+                if (!dmReadLineSegments(start, *model, TRUE, &pt))
                     return DMERR_INVALID_DATA;
                 break;
             
             case 'S':
-                if (!dmReadSprite(start, model))
+                if (!dmReadSprite(start, *model))
                     return DMERR_INVALID_DATA;
                 break;
             
@@ -326,6 +330,22 @@
                 break;
         }
     }
+    return DMERR_OK;
 
-    return DMERR_OK;
+
+void dmFree3DLineSpriteModel(DM3DLineSpriteModel *model)
+{
+    int i;
+    for (i = 0; i < model->nbitmaps; i++)
+    {
+        if (model->bitmaps[i].img != NULL)
+            SDL_FreeSurface(model->bitmaps[i].img);
+    }
+
+    dmFree(model->bitmaps);
+    dmFree(model->vertices);
+    dmFree(model->lines);
+    dmFree(model->sprites);
+    dmFree(model);
 }
+}
--- a/dmq3d.h	Tue Oct 09 17:22:52 2012 +0300
+++ b/dmq3d.h	Tue Oct 09 17:46:40 2012 +0300
@@ -56,7 +56,9 @@
 int dmAdd3DLineSpriteModelSprite(DM3DLineSpriteModel *model, DM3DSprite *v, int *index);
 int dmAdd3DLineSpriteModelBitmap(DM3DLineSpriteModel *model, DM3DBitmap *v, int *index);
 
-int dmRead3DLineSpriteModel(DMResource *f, DM3DLineSpriteModel *model);
+int dmRead3DLineSpriteModel(DMResource *f, DM3DLineSpriteModel **model);
+void dmFree3DLineSpriteModel(DM3DLineSpriteModel *model);
+
 void dmDraw3DLineSpriteModel(SDL_Surface *screen, DM3DLineSpriteModel *model, DMVector *pos, DMMatrix *mat, SDL_Surface *fbmap, Uint32 lcol);
 
 
--- a/vptest.c	Tue Oct 09 17:22:52 2012 +0300
+++ b/vptest.c	Tue Oct 09 17:46:40 2012 +0300
@@ -132,7 +132,7 @@
     TTF_Font *font = NULL;
     int mouseX, mouseY, bx, by;
     BOOL initSDL = FALSE, initTTF = FALSE, exitFlag;
-    DM3DLineSpriteModel model;
+    DM3DLineSpriteModel *model;
     
     dmVerbosity = 5;
     if (!dmArgsProcess(argc, argv, optList, optListN,
@@ -303,15 +303,15 @@
 
 #if 1
         DMVector pos;
-        pos.x = 40;
-        pos.y = 10;
+        pos.x = -100;
+        pos.y = -100;
         pos.z = 0;
         
         DMMatrix mat;
 //        dm_matrix_rot_a(&mat, f*0.1, 0, (3.1415926535f * 2.0f * ((DMFloat) mouseX + (DMFloat) mouseY) ) / 500.0f);
         dm_matrix_rot_a(&mat, 0, 0, f*0.1);
  
-        dmDraw3DLineSpriteModel(screen, &model, &pos, &mat, fbmap, lcol);
+        dmDraw3DLineSpriteModel(screen, model, &pos, &mat, fbmap, lcol);
 #endif