From 8c7f54056c1a7b9928eaa378c9fbd69d32209ab7 Mon Sep 17 00:00:00 2001 From: castano Date: Wed, 21 Oct 2009 19:20:30 +0000 Subject: [PATCH] Add more todo items. Delete images more efficiently? --- src/nvtt/TexImage.cpp | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/src/nvtt/TexImage.cpp b/src/nvtt/TexImage.cpp index 470edc2..dabcd2c 100644 --- a/src/nvtt/TexImage.cpp +++ b/src/nvtt/TexImage.cpp @@ -142,22 +142,25 @@ void TexImage::setTextureType(TextureType type) m->type = type; - // Free images. @@ Use AutoPtr? - foreach (i, m->imageArray) - { - delete m->imageArray[i]; - } - + int count = 0; if (type == TextureType_2D) { - // @@ Free images. - m->imageArray.resize(1, NULL); + count = 1; } else { nvCheck (type == TextureType_Cube); - m->imageArray.resize(6, NULL); + count = 6; + } + + // Delete all but the first 'count' images. + const uint imageCount = m->imageArray.count(); + for (uint i = count; i < imageCount; i++) + { + delete m->imageArray[i]; } + + m->imageArray.resize(count, NULL); } } @@ -208,7 +211,7 @@ int TexImage::height() const int TexImage::depth() const { - return 0; + return 1; } int TexImage::faceCount() const @@ -495,6 +498,8 @@ bool TexImage::setImage2D(Format format, Decoder decoder, int w, int h, int idx, } +#pragma message(NV_FILE_LINE "TODO: provide a TexImage::resize that can override filter width and parameters.") + void TexImage::resize(int w, int h, ResizeFilter filter) { if (m->imageArray.count() > 0) @@ -502,7 +507,11 @@ void TexImage::resize(int w, int h, ResizeFilter filter) if (w == m->imageArray[0]->width() && h == m->imageArray[0]->height()) return; } - // @@ TODO: if cubemap, make sure w == h. + if (m->type == TextureType_Cube) + { +#pragma message(NV_FILE_LINE "Output error when image is cubemap and w != h.") + h = w; + } detach(); @@ -510,7 +519,9 @@ void TexImage::resize(int w, int h, ResizeFilter filter) foreach (i, m->imageArray) { - if (m->imageArray[i] == NULL) continue; + FloatImage * img = m->imageArray[i]; + + if (img == NULL) continue; if (m->alphaMode == AlphaMode_Transparency) { @@ -608,6 +619,12 @@ void TexImage::resize(int maxExtent, RoundMode roundMode, ResizeFilter filter) h = previousPowerOfTwo(h); } + // Make sure cube faces are square. + if (m->type == TextureType_Cube) + { + w = h = max(w, h); + } + resize(w, h, filter); } } @@ -951,7 +968,7 @@ void TexImage::toHeightMap() { if (m->imageArray[i] == NULL) continue; - // @@ Not implemented. +#pragma message(NV_FILE_LINE "Implement TexImage::toHeightMap") } m->isNormalMap = false;