Page MenuHome
Paste P1006

T65812 possible fix (store original size in the GPUTexture)
ArchivedPublic

Authored by Campbell Barton (campbellbarton) on Jun 21 2019, 9:07 AM.
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index e8c600ee545..1fb56f2f072 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -979,8 +979,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 3fb7dfc6331..c798788724f 100644
--- a/source/blender/gpu/GPU_texture.h
+++ b/source/blender/gpu/GPU_texture.h
@@ -237,6 +237,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 7813ae68371..e48f14a6894 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -469,6 +469,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;

Event Timeline

Campbell Barton (campbellbarton) changed the title of this paste from T65812 possible fix to T65812 possible fix (store original size in the GPUTexture).Jun 21 2019, 9:40 AM