Skip to content

Commit 65c9f44

Browse files
committed
Fix incorrect mipmap size calculation for uncompressed DDS textures
Previously, the DDS texture loader incorrectly calculated mipmap dimensions for uncompressed textures when the original dimensions were non-power-of-two. For example, given a 120×120 texture, the expected mipmap chain should be: mipmap=0, size=120×120 mipmap=1, size=60×60 mipmap=2, size=30×30 mipmap=3, size=15×15 mipmap=4, size=7×7 mipmap=5, size=3×3 mipmap=6, size=1×1 But the loader was producing: mipmap=0, size=120×120 mipmap=1, size=60×60 mipmap=2, size=30×30 mipmap=3, size=15×15 mipmap=4, size=8×8 mipmap=5, size=4×4 mipmap=6, size=2×2 This commit corrects the logic to properly compute width and height independently at each mip level. Fixes issue godotengine#105136.
1 parent 4248411 commit 65c9f44

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

modules/dds/texture_loader_dds.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,8 @@ static Ref<Image> _dds_load_layer(Ref<FileAccess> p_file, DDSFormat p_dds_format
165165
uint32_t size = p_width * p_height * info.block_size;
166166

167167
for (uint32_t i = 1; i < p_mipmaps; i++) {
168-
w = (w + 1) >> 1;
169-
h = (h + 1) >> 1;
168+
w = MAX(1u, w >> 1);
169+
h = MAX(1u, h >> 1);
170170
size += w * h * info.block_size;
171171
}
172172

0 commit comments

Comments
 (0)