diff options
author | Ton Roosendaal <ton@blender.org> | 2011-01-05 18:10:35 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2011-01-05 18:10:35 +0300 |
commit | b067a85aa3a67baca561641609b11e9d37f6f228 (patch) | |
tree | 05bf4b38e44728c11f91304ab34efc2ee0d1e593 /source/blender/editors/render | |
parent | 01b7299bdb9ac1643a3053b3b6b34ac6c62f10ab (diff) |
Todo item:
Object color option now is incorporated in preview render, and
in display in 3D window.
Note that Object-color is "modulating" the render result, it just
multiplies... which is very limited for practical use. This was
added for Apricot game project. The original meaning however was
to replace diffuse only... so specular and light work still correct.
ALso made header for properties editor start on top, to reflect
default (report in tracker).
Diffstat (limited to 'source/blender/editors/render')
-rw-r--r-- | source/blender/editors/render/render_preview.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index 9589c46d726..10f5ed20b0c 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -151,6 +151,7 @@ typedef struct ShaderPreview { /* node materials need full copy during preview render, glsl uses it too */ Material *matcopy; + float col[4]; /* active object color */ int sizex, sizey; unsigned int *pr_rect; @@ -389,6 +390,10 @@ static Scene *preview_prepare_scene(Scene *scene, ID *id, int id_type, ShaderPre init_render_material(mat, 0, NULL); /* call that retrieves mode_l */ end_render_material(mat); + + /* un-useful option */ + if(sp->pr_method==PR_ICON_RENDER) + mat->shade_flag &= ~MA_OBCOLOR; /* turn on raytracing if needed */ if(mat->mode_l & MA_RAYMIRROR) @@ -452,6 +457,9 @@ static Scene *preview_prepare_scene(Scene *scene, ID *id, int id_type, ShaderPre for(base= sce->base.first; base; base= base->next) { if(base->object->id.name[2]=='p') { + /* copy over object color, in case material uses it */ + copy_v4_v4(base->object->col, sp->col); + if(ELEM4(base->object->type, OB_MESH, OB_CURVE, OB_SURF, OB_MBALL)) { /* don't use assign_material, it changed mat->id.us, which shows in the UI */ Material ***matar= give_matarar(base->object); @@ -1230,7 +1238,7 @@ void ED_preview_icon_job(const bContext *C, void *owner, ID *id, unsigned int *r { wmJob *steve; ShaderPreview *sp; - + /* suspended start means it starts after 1 timer step, see WM_jobs_timer below */ steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), owner, "Icon Preview", WM_JOB_EXCL_RENDER|WM_JOB_SUSPEND); sp= MEM_callocN(sizeof(ShaderPreview), "shader preview"); @@ -1254,6 +1262,7 @@ void ED_preview_icon_job(const bContext *C, void *owner, ID *id, unsigned int *r void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, MTex *slot, int sizex, int sizey, int method) { + Object *ob= CTX_data_active_object(C); wmJob *steve; ShaderPreview *sp; @@ -1269,6 +1278,8 @@ void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, M sp->id = id; sp->parent= parent; sp->slot= slot; + if(ob && ob->totcol) copy_v4_v4(sp->col, ob->col); + else sp->col[0]= sp->col[1]= sp->col[2]= sp->col[3]= 1.0f; /* setup job */ WM_jobs_customdata(steve, sp, shader_preview_free); |