[Bf-blender-cvs] [a699a9680bf] master: Fix T65812: Image empty has wrong aspect with limit texture size

Campbell Barton noreply at git.blender.org
Mon Jun 24 14:11:31 CEST 2019


Commit: a699a9680bf88cef76fcf6be89d62bdeb532bd4c
Author: Campbell Barton
Date:   Mon Jun 24 22:09:04 2019 +1000
Branches: master
https://developer.blender.org/rBa699a9680bf88cef76fcf6be89d62bdeb532bd4c

Fix T65812: Image empty has wrong aspect with limit texture size

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

M	source/blender/draw/modes/object_mode.c
M	source/blender/gpu/GPU_texture.h
M	source/blender/gpu/intern/gpu_draw.c
M	source/blender/gpu/intern/gpu_texture.c

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

diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 1c60fc09057..2fbcda11500 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -1008,8 +1008,8 @@ static void DRW_shgroup_empty_image(OBJECT_Shaders *sh_data,
   if (ima != NULL) {
     tex = GPU_texture_from_blender(ima, ob->iuser, GL_TEXTURE_2D);
     if (tex) {
-      size[0] = GPU_texture_width(tex);
-      size[1] = GPU_texture_height(tex);
+      size[0] = GPU_texture_orig_width(tex);
+      size[1] = GPU_texture_orig_height(tex);
     }
   }
 
diff --git a/source/blender/gpu/GPU_texture.h b/source/blender/gpu/GPU_texture.h
index d5e763987cb..4397234543b 100644
--- a/source/blender/gpu/GPU_texture.h
+++ b/source/blender/gpu/GPU_texture.h
@@ -245,6 +245,9 @@ int GPU_texture_detach_framebuffer(GPUTexture *tex, struct GPUFrameBuffer *fb);
 int GPU_texture_target(const GPUTexture *tex);
 int GPU_texture_width(const GPUTexture *tex);
 int GPU_texture_height(const GPUTexture *tex);
+int GPU_texture_orig_width(const GPUTexture *tex);
+int GPU_texture_orig_height(const GPUTexture *tex);
+void GPU_texture_orig_size_set(GPUTexture *tex, int w, int h);
 int GPU_texture_layers(const GPUTexture *tex);
 eGPUTextureFormat GPU_texture_format(const GPUTexture *tex);
 int GPU_texture_samples(const GPUTexture *tex);
diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c
index 9a341631833..d1d5e1d89a2 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -501,6 +501,9 @@ GPUTexture *GPU_texture_from_blender(Image *ima, ImageUser *iuser, int textarget
   BKE_image_release_ibuf(ima, ibuf, NULL);
 
   *tex = GPU_texture_from_bindcode(textarget, bindcode);
+
+  GPU_texture_orig_size_set(*tex, ibuf->x, ibuf->y);
+
   return *tex;
 }
 
diff --git a/source/blender/gpu/intern/gpu_texture.c b/source/blender/gpu/intern/gpu_texture.c
index 58d0dd5576f..54e93c361ca 100644
--- a/source/blender/gpu/intern/gpu_texture.c
+++ b/source/blender/gpu/intern/gpu_texture.c
@@ -68,6 +68,7 @@ typedef enum eGPUTextureFormatFlag {
 /* GPUTexture */
 struct GPUTexture {
   int w, h, d;        /* width/height/depth */
+  int orig_w, orig_h; /* width/height (of source data), optional. */
   int number;         /* number for multitexture binding */
   int refcount;       /* reference count */
   GLenum target;      /* GL_TEXTURE_* */
@@ -1778,6 +1779,22 @@ int GPU_texture_height(const GPUTexture *tex)
   return tex->h;
 }
 
+int GPU_texture_orig_width(const GPUTexture *tex)
+{
+  return tex->orig_w;
+}
+
+int GPU_texture_orig_height(const GPUTexture *tex)
+{
+  return tex->orig_h;
+}
+
+void GPU_texture_orig_size_set(GPUTexture *tex, int w, int h)
+{
+  tex->orig_w = w;
+  tex->orig_h = h;
+}
+
 int GPU_texture_layers(const GPUTexture *tex)
 {
   return tex->d;



More information about the Bf-blender-cvs mailing list