Commit: 6bd248cd65405854abafe9fb2201f3785d5259af
Author: Sebastian Ullrich
Date:   Sat May 21 16:13:09 2016 +0200
Branches: master
https://developer.blender.org/rB6bd248cd65405854abafe9fb2201f3785d5259af

Python API: add material to uniforms from gpu.export_shader.

Reviewed By: brecht

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

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

M       source/blender/gpu/GPU_material.h
M       source/blender/gpu/intern/gpu_material.c
M       source/blender/python/intern/gpu.c

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

diff --git a/source/blender/gpu/GPU_material.h 
b/source/blender/gpu/GPU_material.h
index 81b08e2..fc2ca16 100644
--- a/source/blender/gpu/GPU_material.h
+++ b/source/blender/gpu/GPU_material.h
@@ -282,6 +282,7 @@ typedef struct GPUInputUniform {
        GPUDataType datatype;     /* type of uniform data */
        struct Object *lamp;      /* when type=GPU_DYNAMIC_LAMP_... or 
GPU_DYNAMIC_SAMPLER_2DSHADOW */
        struct Image *image;      /* when type=GPU_DYNAMIC_SAMPLER_2DIMAGE */
+       struct Material *material;/* when type=GPU_DYNAMIC_MAT_... */
        int texnumber;            /* when type=GPU_DYNAMIC_SAMPLER, texture 
number: 0.. */
        unsigned char *texpixels; /* for internally generated texture, pixel 
data in RGBA format */
        int texsize;              /* size in pixel of the texture in texpixels 
buffer:
diff --git a/source/blender/gpu/intern/gpu_material.c 
b/source/blender/gpu/intern/gpu_material.c
index 587e634..aaa52b2 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -1615,22 +1615,22 @@ void GPU_shadeinput_set(GPUMaterial *mat, Material *ma, 
GPUShadeInput *shi)
        shi->gpumat = mat;
        shi->mat = ma;
 
-       GPU_link(mat, "set_rgb", GPU_dynamic_uniform(&ma->r, 
GPU_DYNAMIC_MAT_DIFFRGB, NULL), &shi->rgb);
-       GPU_link(mat, "set_rgb", GPU_dynamic_uniform(&ma->specr, 
GPU_DYNAMIC_MAT_SPECRGB, NULL), &shi->specrgb);
-       GPU_link(mat, "set_rgb", GPU_dynamic_uniform(&ma->mirr, 
GPU_DYNAMIC_MAT_MIR, NULL), &shi->mir);
+       GPU_link(mat, "set_rgb", GPU_dynamic_uniform(&ma->r, 
GPU_DYNAMIC_MAT_DIFFRGB, ma), &shi->rgb);
+       GPU_link(mat, "set_rgb", GPU_dynamic_uniform(&ma->specr, 
GPU_DYNAMIC_MAT_SPECRGB, ma), &shi->specrgb);
+       GPU_link(mat, "set_rgb", GPU_dynamic_uniform(&ma->mirr, 
GPU_DYNAMIC_MAT_MIR, ma), &shi->mir);
        GPU_link(mat, "set_rgba_zero", &shi->refcol);
        GPU_link(mat, "shade_norm", GPU_builtin(GPU_VIEW_NORMAL), &shi->vn);
 
        if (mat->alpha)
-               GPU_link(mat, "set_value", GPU_dynamic_uniform(&ma->alpha, 
GPU_DYNAMIC_MAT_ALPHA, NULL), &shi->alpha);
+               GPU_link(mat, "set_value", GPU_dynamic_uniform(&ma->alpha, 
GPU_DYNAMIC_MAT_ALPHA, ma), &shi->alpha);
        else
                GPU_link(mat, "set_value", GPU_uniform(&one), &shi->alpha);
 
-       GPU_link(mat, "set_value", GPU_dynamic_uniform(&ma->ref, 
GPU_DYNAMIC_MAT_REF, NULL), &shi->refl);
-       GPU_link(mat, "set_value", GPU_dynamic_uniform(&ma->spec, 
GPU_DYNAMIC_MAT_SPEC, NULL), &shi->spec);
-       GPU_link(mat, "set_value", GPU_dynamic_uniform(&ma->emit, 
GPU_DYNAMIC_MAT_EMIT, NULL), &shi->emit);
-       GPU_link(mat, "set_value", GPU_dynamic_uniform((float *)&ma->har, 
GPU_DYNAMIC_MAT_HARD, NULL), &shi->har);
-       GPU_link(mat, "set_value", GPU_dynamic_uniform(&ma->amb, 
GPU_DYNAMIC_MAT_AMB, NULL), &shi->amb);
+       GPU_link(mat, "set_value", GPU_dynamic_uniform(&ma->ref, 
GPU_DYNAMIC_MAT_REF, ma), &shi->refl);
+       GPU_link(mat, "set_value", GPU_dynamic_uniform(&ma->spec, 
GPU_DYNAMIC_MAT_SPEC, ma), &shi->spec);
+       GPU_link(mat, "set_value", GPU_dynamic_uniform(&ma->emit, 
GPU_DYNAMIC_MAT_EMIT, ma), &shi->emit);
+       GPU_link(mat, "set_value", GPU_dynamic_uniform((float *)&ma->har, 
GPU_DYNAMIC_MAT_HARD, ma), &shi->har);
+       GPU_link(mat, "set_value", GPU_dynamic_uniform(&ma->amb, 
GPU_DYNAMIC_MAT_AMB, ma), &shi->amb);
        GPU_link(mat, "set_value", GPU_uniform(&ma->spectra), &shi->spectra);
        GPU_link(mat, "shade_view", GPU_builtin(GPU_VIEW_POSITION), &shi->view);
        GPU_link(mat, "vcol_attribute", GPU_attribute(CD_MCOL, ""), &shi->vcol);
@@ -2710,6 +2710,9 @@ GPUShaderExport *GPU_shader_export(struct Scene *scene, 
struct Material *ma)
 
                                if (GPU_DYNAMIC_GROUP_FROM_TYPE(uniform->type) 
== GPU_DYNAMIC_GROUP_LAMP)
                                        uniform->lamp = input->dynamicdata;
+
+                               if (GPU_DYNAMIC_GROUP_FROM_TYPE(uniform->type) 
== GPU_DYNAMIC_GROUP_MAT)
+                                       uniform->material = input->dynamicdata;
                        }
 
                        if (uniform->type != GPU_DYNAMIC_NONE)
diff --git a/source/blender/python/intern/gpu.c 
b/source/blender/python/intern/gpu.c
index 66c1ddc..c3bb588 100644
--- a/source/blender/python/intern/gpu.c
+++ b/source/blender/python/intern/gpu.c
@@ -261,6 +261,9 @@ static PyObject *GPU_export_shader(PyObject *UNUSED(self), 
PyObject *args, PyObj
                if (uniform->lamp) {
                        PY_DICT_ADD_ID(dict, uniform, lamp);
                }
+               if (uniform->material) {
+                       PY_DICT_ADD_ID(dict, uniform, material);
+               }
                if (uniform->image) {
                        PY_DICT_ADD_ID(dict, uniform, image);
                }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to