diff options
Diffstat (limited to 'source/blender/gpu')
-rw-r--r-- | source/blender/gpu/GPU_material.h | 2 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_material.c | 8 | ||||
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_material.glsl | 3 |
3 files changed, 12 insertions, 1 deletions
diff --git a/source/blender/gpu/GPU_material.h b/source/blender/gpu/GPU_material.h index 86c9764a68f..dd5292d9c58 100644 --- a/source/blender/gpu/GPU_material.h +++ b/source/blender/gpu/GPU_material.h @@ -177,6 +177,7 @@ GPUMaterial *GPU_material_from_nodetree_find(struct ListBase *gpumaterials, const void *engine_type, int options); GPUMaterial *GPU_material_from_nodetree(struct Scene *scene, + struct Material *ma, struct bNodeTree *ntree, struct ListBase *gpumaterials, const void *engine_type, @@ -194,6 +195,7 @@ void GPU_materials_free(struct Main *bmain); struct Scene *GPU_material_scene(GPUMaterial *material); struct GPUPass *GPU_material_get_pass(GPUMaterial *material); struct ListBase *GPU_material_get_inputs(GPUMaterial *material); +struct Material *GPU_material_get_material(GPUMaterial *material); eGPUMaterialStatus GPU_material_status(GPUMaterial *mat); struct GPUUniformBuffer *GPU_material_uniform_buffer_get(GPUMaterial *material); diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index 6aa13b0d8ca..de9ed56abf5 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -231,6 +231,12 @@ ListBase *GPU_material_get_inputs(GPUMaterial *material) return &material->inputs; } +/* Return can be NULL if it's a world material. */ +Material *GPU_material_get_material(GPUMaterial *material) +{ + return material->ma; +} + GPUUniformBuffer *GPU_material_uniform_buffer_get(GPUMaterial *material) { return material->ubo; @@ -637,6 +643,7 @@ GPUMaterial *GPU_material_from_nodetree_find(ListBase *gpumaterials, * so only do this when they are needed. */ GPUMaterial *GPU_material_from_nodetree(Scene *scene, + struct Material *ma, struct bNodeTree *ntree, ListBase *gpumaterials, const void *engine_type, @@ -655,6 +662,7 @@ GPUMaterial *GPU_material_from_nodetree(Scene *scene, /* allocate material */ GPUMaterial *mat = MEM_callocN(sizeof(GPUMaterial), "GPUMaterial"); + mat->ma = ma; mat->scene = scene; mat->engine_type = engine_type; mat->options = options; diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index 03999b2277c..023870125c9 100644 --- a/source/blender/gpu/shaders/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -3234,6 +3234,7 @@ void node_light_falloff( void node_object_info(mat4 obmat, vec4 info, + float mat_index, out vec3 location, out float object_index, out float material_index, @@ -3241,7 +3242,7 @@ void node_object_info(mat4 obmat, { location = obmat[3].xyz; object_index = info.x; - material_index = info.y; + material_index = mat_index; random = info.z; } |