From fa2d54a052106801c632558476bde45ab8c68480 Mon Sep 17 00:00:00 2001
From: Turo Lamminen <turotl@gmail.com>
Date: Thu, 30 Apr 2015 12:45:14 +0000
Subject: [PATCH] Fix mip size calculation for uncompressed textures
---
mojodds.c | 37 ++++++++++++++++++++++++++++++++-----
1 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/mojodds.c b/mojodds.c
index 593f281..173cf44 100644
--- a/mojodds.c
+++ b/mojodds.c
@@ -396,12 +396,39 @@
unsigned long newtexlen;
unsigned int neww;
unsigned int newh;
- unsigned int blocksize = 16;
+ uint32 blockDim = 1;
+ uint32 blockSize = 0;
- if (glfmt == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT)
- {
- blocksize = 8;
+ switch (glfmt) {
+ case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
+ blockDim = 4;
+ blockSize = 8;
+ break;
+
+ case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
+ case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
+ blockDim = 4;
+ blockSize = 16;
+ break;
+
+ case GL_BGR:
+ blockSize = 3;
+ break;
+
+ case GL_BGRA:
+ blockSize = 4;
+ break;
+
+ case GL_LUMINANCE_ALPHA:
+ blockSize = 2;
+ break;
+
+ default:
+ assert(!"unsupported GL format");
+ break;
}
+
+ assert(blockSize != 0);
newtex = _basetex;
newtexlen = _basetexlen;
@@ -418,7 +445,7 @@
newh >>= 1;
if (neww < 1) neww = 1;
if (newh < 1) newh = 1;
- newtexlen = ((neww + 3) / 4) * ((newh + 3) / 4) * blocksize;
+ newtexlen = ((neww + blockDim - 1) / blockDim) * ((newh + blockDim - 1) / blockDim) * blockSize;
} // for
*_tex = newtex;
--
Gitblit v1.9.3