[Bf-blender-cvs] [0584a88046d] master: Fix T102008: Images are stretched when texture limit is enabled

Omar Emara noreply at git.blender.org
Mon Oct 24 12:16:21 CEST 2022


Commit: 0584a88046d2a2c069e056e52b37907cd70db8c7
Author: Omar Emara
Date:   Mon Oct 24 12:15:22 2022 +0200
Branches: master
https://developer.blender.org/rB0584a88046d2a2c069e056e52b37907cd70db8c7

Fix T102008: Images are stretched when texture limit is enabled

Currently, if an image exceed the texture limit setup by the user or the
GPU backend, it will be scaled down to satisfy the limit. However,
scaling happens independently per axis, that means the aspect ratio of
the image will not be maintained.

This patch corrects the smaller size to maintain the aspect ratio.

Differential Revision: https://developer.blender.org/D16327

Reviews By: Clement Foucault

===================================================================

M	source/blender/imbuf/intern/util_gpu.c

===================================================================

diff --git a/source/blender/imbuf/intern/util_gpu.c b/source/blender/imbuf/intern/util_gpu.c
index 5ed6b2b9843..35cdefbaaeb 100644
--- a/source/blender/imbuf/intern/util_gpu.c
+++ b/source/blender/imbuf/intern/util_gpu.c
@@ -301,6 +301,16 @@ GPUTexture *IMB_create_gpu_texture(const char *name,
   int size[2] = {GPU_texture_size_with_limit(ibuf->x), GPU_texture_size_with_limit(ibuf->y)};
   bool do_rescale = (ibuf->x != size[0]) || (ibuf->y != size[1]);
 
+  /* Correct the smaller size to maintain the original aspect ratio of the image. */
+  if (do_rescale && ibuf->x != ibuf->y) {
+    if (size[0] > size[1]) {
+      size[1] = (int)(ibuf->y * ((float)size[0] / ibuf->x));
+    }
+    else {
+      size[0] = (int)(ibuf->x * ((float)size[1] / ibuf->y));
+    }
+  }
+
 #ifdef WITH_DDS
   if (ibuf->ftype == IMB_FTYPE_DDS) {
     eGPUTextureFormat compressed_format;



More information about the Bf-blender-cvs mailing list