From aab78de27cf070dac1d5b07120e871415d45687c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 25 Oct 2012 12:54:16 +0000 Subject: Better fix for #32837: DDS compressed textures now no longer need to be flipped when saving, rather we flip the compressed texture during load. The code used here comes from the chromium O3D project: http://src.chromium.org/chrome/trunk/o3d/core/cross/bitmap_dds.cc Also made it only load compressed for power-of-two resolution images, it doesn't seem to work for other resolutions, just falls back to non-compressed then. --- source/blender/gpu/intern/gpu_draw.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'source/blender/gpu/intern') diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c index 96ba0bf0ec7..fd8dd562c02 100644 --- a/source/blender/gpu/intern/gpu_draw.c +++ b/source/blender/gpu/intern/gpu_draw.c @@ -730,12 +730,17 @@ int GPU_upload_dxt_texture(ImBuf *ibuf) return FALSE; } + if(!is_power_of_2_i(width) || !is_power_of_2_i(height)) { + printf("Unable to load non-power-of-two DXT image resolution, falling back to uncompressed\n"); + return FALSE; + } + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gpu_get_mipmap_filter(1)); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - blocksize = (format == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT) ? 8 : 16; + blocksize = (ibuf->dds_data.fourcc == FOURCC_DXT1) ? 8 : 16; for (i=0; idds_data.nummipmaps && (width||height); ++i) { if (width == 0) width = 1; -- cgit v1.2.3