Mercurial > hg > dmlib
diff dmq3d.c @ 245:eed8eed58f82
Changes in the 3d loader.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 09 Oct 2012 17:46:40 +0300 |
parents | a9d500e5698d |
children | 3bf8ebf09a6a |
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); } +}