Apply part of [#21590] .dds textures: fix for DXT1n format
authorNathan Letwory <nathan@letworyinteractive.com>
Sat, 7 May 2011 20:53:49 +0000 (20:53 +0000)
committerNathan Letwory <nathan@letworyinteractive.com>
Sat, 7 May 2011 20:53:49 +0000 (20:53 +0000)
Submitted by Amorilia.

DXT1 .dds textures with 1-bit alpha channel have their alpha channel imported in Blender.

The patch also makes change to contact info for the patch submitter.

I left the sync with upstream nvtt for another commit.

18 files changed:
source/blender/editors/space_image/image_ops.c
source/blender/imbuf/intern/dds/BlockDXT.cpp
source/blender/imbuf/intern/dds/BlockDXT.h
source/blender/imbuf/intern/dds/Color.h
source/blender/imbuf/intern/dds/ColorBlock.cpp
source/blender/imbuf/intern/dds/ColorBlock.h
source/blender/imbuf/intern/dds/Common.h
source/blender/imbuf/intern/dds/DirectDrawSurface.cpp
source/blender/imbuf/intern/dds/DirectDrawSurface.h
source/blender/imbuf/intern/dds/Image.cpp
source/blender/imbuf/intern/dds/Image.h
source/blender/imbuf/intern/dds/PixelFormat.h
source/blender/imbuf/intern/dds/Stream.cpp
source/blender/imbuf/intern/dds/Stream.h
source/blender/imbuf/intern/dds/dds_api.cpp
source/blender/imbuf/intern/dds/dds_api.h
source/blender/makesrna/intern/rna_nodetree.c
source/blender/makesrna/intern/rna_scene.c

index 7d4aaf0c70e421e3fca0ec65e373ea7dca3b4541..13e855f60b149d40d9252b86b6dd67ff2274d13d 100644 (file)
@@ -645,6 +645,9 @@ static const EnumPropertyItem image_file_type_items[] = {
                {R_TARGA, "TARGA", 0, "Targa", ""},
                {R_RAWTGA, "TARGA RAW", 0, "Targa Raw", ""},
                {R_PNG, "PNG", 0, "PNG", ""},
+#ifdef WITH_DDS
+               {R_DDS, "DDS", 0, "DirectDraw Surface", ""},
+#endif
                {R_BMP, "BMP", 0, "BMP", ""},
                {R_JPEG90, "JPEG", 0, "Jpeg", ""},
 #ifdef WITH_OPENJPEG
index 2989361efe6b6d3b5a023f29a7359cd78ebb3b67..b634a4d938ebc7bcb965ec5b3a7f411a94978d1a 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index 7c5b9acffd295fdeb97f78bc39d81308e08390f0..6e9e555d96344bcf48113dc6f9d30428e10a1397 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index 5efc259b795a3cc36616616bc09ddb0802d6fa2e..42ed34daf76924ee4185eb74838b095753a9757a 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index 711d1b54cfa6f663d6ae25bba8e9331e7d3d0d04..3dcfa0cef43b34271ad276f29cd1d0d0f5869c66 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index dd40d21e8b3ad255470d62e2027059640fdbc83d..47b08303a0528a5abcb5f7de5cc7c22429dc91ab 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index 25b743311d27ac586a1e5aa7b5a1c3a8e93ad817..9cf1de3644a7eb706fcbcfa7f3175e7620be4f36 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index ede82896554610c0c1a8ad7338987f2de52ee8d9..b179432da4a9e9cfbe6fcd18276db683bbc87c3d 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index cc04c50e795e96c91bbfe186dd6a56eab5d4945f..4db621be3da7f4bcfb742f199c2f4427dbd336d7 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index a775a9125d2082e1947ac5213b69f50ad392d032..9c34c4e71997449ef7370a26677c24fb72cb5ee3 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index 880514100562baafaf1cfa82418b03d123bb3192..96e455fc75b12ae83bd439ec2f97a184c60fb3cf 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index c483c525570dc0b375c311e91f2abcb2c8048930..2602681d979c83fe954ac7d41f1431a6e746e981 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index 88c5277e097a0fa7914eb0430c7b9c6d66954241..497109efd25d952e0f2e3f20e3a14f5c36ffd94d 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index acc2c8bb1761e2312c9584ef48e9c1d29efb58c6..ca081d331fe04add65e506f8ad5daeb0270ee97c 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index a7b2934cafaf14966a3717947088424242240934..73ee3a2cb9c32ff45c62c8e5c25190c8fce4f500 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
@@ -106,10 +106,21 @@ struct ImBuf *imb_load_dds(unsigned char *mem, size_t size, int flags)
        }
 
        /* convert DDS into ImBuf */
-       // TODO use the image RGB or RGBA tag to determine the bits per pixel
-       if (dds.hasAlpha()) bits_per_pixel = 32;
-       else bits_per_pixel = 24;
-       ibuf = IMB_allocImBuf(dds.width(), dds.height(), bits_per_pixel, 0);
+       dds.mipmap(&img, 0, 0); /* load first face, first mipmap */
+       pixels = img.pixels();
+       numpixels = dds.width() * dds.height();
+       bits_per_pixel = 24;
+       if (img.format() == Image::Format_ARGB) {
+               /* check that there is effectively an alpha channel */
+               for (unsigned int i = 0; i < numpixels; i++) {
+                       pixel = pixels[i];
+                       if (pixel.a != 255) {
+                               bits_per_pixel = 32;
+                               break;
+                       };
+               };
+       };
+       ibuf = IMB_allocImBuf(dds.width(), dds.height(), bits_per_pixel, 0); 
        if (ibuf == 0) return(0); /* memory allocation failed */
 
        ibuf->ftype = DDS;
@@ -120,9 +131,6 @@ struct ImBuf *imb_load_dds(unsigned char *mem, size_t size, int flags)
                if (ibuf->rect == 0) return(ibuf);
 
                rect = ibuf->rect;
-               dds.mipmap(&img, 0, 0); /* load first face, first mipmap */
-               pixels = img.pixels();
-               numpixels = dds.width() * dds.height();
                cp[3] = 0xff; /* default alpha if alpha channel is not present */
 
                for (unsigned int i = 0; i < numpixels; i++) {
index cfc6910e71dd1e151d197c7b0916db01c83633e9..d78e4f31474f4cb774a233e9461f2f7fa3f4881c 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributors: Amorilia (amorilia@gamebox.net)
+ * Contributors: Amorilia (amorilia@users.sourceforge.net)
  *
  * ***** END GPL LICENSE BLOCK *****
  */
index 3c26c18f17f57612a4db00449955b0401987ef3c..d55534bb1b59c921618cc54e6731cb054e9194c6 100644 (file)
@@ -1323,6 +1323,9 @@ static void def_cmp_output_file(StructRNA *srna)
                {R_TARGA,   "TARGA",        0, "Targa",        ""},
                {R_RAWTGA,  "RAW_TARGA",    0, "Targa Raw",    ""},
                {R_PNG,     "PNG",          0, "PNG",          ""},
+#ifdef WITH_DDS
+               {R_DDS,     "DDS",          0, "DirectDraw Surface", ""},
+#endif
                {R_BMP,     "BMP",          0, "BMP",          ""},
                {R_JPEG90,  "JPEG",         0, "JPEG",         ""},
                {R_IRIS,    "IRIS",         0, "IRIS",         ""},
index e06e71d6a0e2c16f9162ed9f966c26ead6d7fba0..1497f5a440534716a608c94ee4f5a12eda9fae3a 100644 (file)
@@ -101,7 +101,9 @@ EnumPropertyItem snap_element_items[] = {
 EnumPropertyItem image_type_items[] = {
        {0, "", 0, "Image", NULL},
        {R_BMP, "BMP", ICON_FILE_IMAGE, "BMP", ""},
-       //{R_DDS, "DDS", ICON_FILE_IMAGE, "DDS", ""}, // XXX not yet implemented
+#ifdef WITH_DDS
+       {R_DDS, "DDS", ICON_FILE_IMAGE, "DDS", ""},
+#endif
        {R_IRIS, "IRIS", ICON_FILE_IMAGE, "Iris", ""},
        {R_PNG, "PNG", ICON_FILE_IMAGE, "PNG", ""},
        {R_JPEG90, "JPEG", ICON_FILE_IMAGE, "JPEG", ""},