diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/draw/intern/draw_manager_data.c | 7 | ||||
-rw-r--r-- | source/blender/gpu/GPU_material.h | 4 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_node_graph.c | 5 |
3 files changed, 11 insertions, 5 deletions
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c index e71a1298812..f1c13bc039a 100644 --- a/source/blender/draw/intern/draw_manager_data.c +++ b/source/blender/draw/intern/draw_manager_data.c @@ -1364,14 +1364,15 @@ void DRW_shgroup_add_material_resources(DRWShadingGroup *grp, struct GPUMaterial if (tex->ima) { /* Image */ GPUTexture *gputex; + ImageUser *iuser = tex->iuser_available ? &tex->iuser : NULL; if (tex->tiled_mapping_name[0]) { - gputex = BKE_image_get_gpu_tiles(tex->ima, tex->iuser, NULL); + gputex = BKE_image_get_gpu_tiles(tex->ima, iuser, NULL); drw_shgroup_material_texture(grp, gputex, tex->sampler_name, tex->sampler_state); - gputex = BKE_image_get_gpu_tilemap(tex->ima, tex->iuser, NULL); + gputex = BKE_image_get_gpu_tilemap(tex->ima, iuser, NULL); drw_shgroup_material_texture(grp, gputex, tex->tiled_mapping_name, tex->sampler_state); } else { - gputex = BKE_image_get_gpu_texture(tex->ima, tex->iuser, NULL); + gputex = BKE_image_get_gpu_texture(tex->ima, iuser, NULL); drw_shgroup_material_texture(grp, gputex, tex->sampler_name, tex->sampler_state); } } diff --git a/source/blender/gpu/GPU_material.h b/source/blender/gpu/GPU_material.h index ea3028e539b..f7a01fadadc 100644 --- a/source/blender/gpu/GPU_material.h +++ b/source/blender/gpu/GPU_material.h @@ -24,6 +24,7 @@ #pragma once #include "DNA_customdata_types.h" /* for CustomDataType */ +#include "DNA_image_types.h" #include "DNA_listBase.h" #include "BLI_sys_types.h" /* for bool */ @@ -256,7 +257,8 @@ typedef struct GPUMaterialAttribute { typedef struct GPUMaterialTexture { struct GPUMaterialTexture *next, *prev; struct Image *ima; - struct ImageUser *iuser; + struct ImageUser iuser; + bool iuser_available; struct GPUTexture **colorband; char sampler_name[32]; /* Name of sampler in GLSL. */ char tiled_mapping_name[32]; /* Name of tile mapping sampler in GLSL. */ diff --git a/source/blender/gpu/intern/gpu_node_graph.c b/source/blender/gpu/intern/gpu_node_graph.c index 50ff450ac79..e0d60aa5fda 100644 --- a/source/blender/gpu/intern/gpu_node_graph.c +++ b/source/blender/gpu/intern/gpu_node_graph.c @@ -439,7 +439,10 @@ static GPUMaterialTexture *gpu_node_graph_add_texture(GPUNodeGraph *graph, if (tex == NULL) { tex = MEM_callocN(sizeof(*tex), __func__); tex->ima = ima; - tex->iuser = iuser; + if (iuser != NULL) { + tex->iuser = *iuser; + tex->iuser_available = true; + } tex->colorband = colorband; tex->sampler_state = sampler_state; BLI_snprintf(tex->sampler_name, sizeof(tex->sampler_name), "samp%d", num_textures); |