diff options
13 files changed, 196 insertions, 202 deletions
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 0dbbf3ab927..804da7ede78 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -3646,7 +3646,7 @@ class VIEW3D_PT_shading_lighting(Panel): view = context.space_data shading = view.shading - if shading.type in ('SOLID', 'TEXTURED'): + if shading.type == 'SOLID': layout.row().prop(shading, "light", expand=True) if shading.light == 'STUDIO': row = layout.row() @@ -3663,7 +3663,7 @@ class VIEW3D_PT_shading_lighting(Panel): sub.operator('VIEW3D_OT_toggle_matcap_flip', emboss=False, text="", icon='ARROW_LEFTRIGHT') sub.operator('wm.studiolight_userpref_show', emboss=False, text="", icon='PREFERENCES') - elif shading.type in ('MATERIAL'): + elif shading.type == 'MATERIAL': row = layout.row() row.template_icon_view(shading, "studio_light", show_labels=True) sub = row.column() @@ -3708,7 +3708,7 @@ class VIEW3D_PT_shading_options(Panel): def poll(cls, context): view = context.space_data shading = view.shading - return shading.type in ['SOLID', 'TEXTURED'] + return shading.type == 'SOLID' def draw(self, context): layout = self.layout @@ -3720,35 +3720,34 @@ class VIEW3D_PT_shading_options(Panel): row = layout.row() row.prop(shading, "show_specular_highlight") - if shading.type in ('SOLID', 'TEXTURED'): - row = layout.split(0.4) - row.prop(shading, "show_xray") - sub = row.row() - sub.active = shading.show_xray - sub.prop(shading, "xray_alpha", text="") - - row = layout.split(0.4) - row.active = not shading.show_xray - row.prop(shading, "show_shadows") - sub = row.row() - sub.active = shading.show_shadows and not shading.show_xray - sub.prop(shading, "shadow_intensity", text="") - - row = layout.split(0.4) - row.active = not shading.show_xray - row.prop(shading, "show_cavity") - sub = row.column(align=True) - sub.active = not shading.show_xray and shading.show_cavity - sub.prop(shading, "cavity_ridge_factor") - sub.prop(shading, "cavity_valley_factor") - - row = layout.split(0.4) - row.prop(shading, "show_object_outline") - sub = row.row() - sub.active = shading.show_object_outline - sub.prop(shading, "object_outline_color", text="") - - layout.prop(view, "show_world") + row = layout.split(0.4) + row.prop(shading, "show_xray") + sub = row.row() + sub.active = shading.show_xray + sub.prop(shading, "xray_alpha", text="") + + row = layout.split(0.4) + row.active = not shading.show_xray + row.prop(shading, "show_shadows") + sub = row.row() + sub.active = shading.show_shadows and not shading.show_xray + sub.prop(shading, "shadow_intensity", text="") + + row = layout.split(0.4) + row.active = not shading.show_xray + row.prop(shading, "show_cavity") + sub = row.column(align=True) + sub.active = not shading.show_xray and shading.show_cavity + sub.prop(shading, "cavity_ridge_factor") + sub.prop(shading, "cavity_valley_factor") + + row = layout.split(0.4) + row.prop(shading, "show_object_outline") + sub = row.row() + sub.active = shading.show_object_outline + sub.prop(shading, "object_outline_color", text="") + + layout.prop(view, "show_world") class VIEW3D_PT_overlay(Panel): diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c index 39be7dda054..dd5deb0fb89 100644 --- a/source/blender/blenloader/intern/versioning_280.c +++ b/source/blender/blenloader/intern/versioning_280.c @@ -1490,5 +1490,22 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) } } } + + for (bScreen *screen = bmain->screen.first; screen; screen = screen->id.next) { + for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { + for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) { + if (sl->spacetype == SPACE_VIEW3D) { + View3D *v3d = (View3D *)sl; + if (v3d->drawtype == OB_TEXTURE) + { + v3d->drawtype = OB_SOLID; + v3d->shading.light = V3D_LIGHTING_STUDIO; + v3d->shading.color_type = V3D_SHADING_TEXTURE_COLOR; + } + } + } + } + } + } } diff --git a/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl index 4a7d195a56a..1b3737193b0 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl @@ -1,4 +1,4 @@ -#ifdef OB_TEXTURE +#ifdef V3D_SHADING_TEXTURE_COLOR uniform sampler2D image; #endif uniform mat4 ProjectionMatrix; @@ -10,7 +10,7 @@ uniform vec4 viewvecs[3]; #ifdef NORMAL_VIEWPORT_PASS_ENABLED in vec3 normal_viewport; #endif /* NORMAL_VIEWPORT_PASS_ENABLED */ -#ifdef OB_TEXTURE +#ifdef V3D_SHADING_TEXTURE_COLOR in vec2 uv_interp; #endif #ifdef STUDIOLIGHT_ORIENTATION_VIEWNORMAL @@ -32,12 +32,12 @@ void main() { vec4 diffuse_color; vec3 diffuse_light = vec3(1.0); -#ifdef OB_SOLID - diffuse_color = material_data.diffuse_color; -#endif /* OB_SOLID */ -#ifdef OB_TEXTURE + +#ifdef V3D_SHADING_TEXTURE_COLOR diffuse_color = texture(image, uv_interp); -#endif /* OB_TEXTURE */ +#else + diffuse_color = material_data.diffuse_color; +#endif /* V3D_SHADING_TEXTURE_COLOR */ vec2 uv_viewport = gl_FragCoord.xy * invertedViewportSize; vec3 I_vs = view_vector_from_screen_uv(uv_viewport, viewvecs, ProjectionMatrix); diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl index 200850e3036..6aeb912377c 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl @@ -4,7 +4,7 @@ layout(std140) uniform material_block { MaterialData material_data; }; -#ifdef OB_TEXTURE +#ifdef V3D_SHADING_TEXTURE_COLOR uniform sampler2D image; #endif @@ -12,9 +12,9 @@ uniform sampler2D image; in vec3 normal_viewport; #endif /* NORMAL_VIEWPORT_PASS_ENABLED */ -#ifdef OB_TEXTURE +#ifdef V3D_SHADING_TEXTURE_COLOR in vec2 uv_interp; -#endif /* OB_TEXTURE */ +#endif /* V3D_SHADING_TEXTURE_COLOR */ #ifdef HAIR_SHADER flat in float hair_rand; @@ -40,17 +40,16 @@ void main() n = normalize(n); #endif -#ifdef OB_SOLID +#ifdef V3D_SHADING_TEXTURE_COLOR + diffuseColor = texture(image, uv_interp); +#else diffuseColor = vec4(material_data.diffuse_color.rgb, 0.0); # ifdef STUDIOLIGHT_ORIENTATION_VIEWNORMAL - specularColor = vec4(material_data.diffuse_color.rgb, 0.0); + # endif -#endif /* OB_SOLID */ +#endif /* V3D_SHADING_TEXTURE_COLOR */ -#ifdef OB_TEXTURE - diffuseColor = texture(image, uv_interp); -#endif /* OB_TEXTURE */ #ifdef HAIR_SHADER float hair_color_variation = hair_rand * 0.1; diffuseColor.rgb = clamp(diffuseColor.rgb - hair_color_variation, 0.0, 1.0); diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl index 82443e7336b..66b529fcf5e 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl @@ -9,7 +9,7 @@ in vec3 pos; in vec3 nor; in vec2 uv; #else /* HAIR_SHADER */ -# ifdef OB_TEXTURE +# ifdef V3D_SHADING_TEXTURE_COLOR uniform samplerBuffer u; /* active texture layer */ # endif flat out float hair_rand; @@ -19,7 +19,7 @@ flat out float hair_rand; out vec3 normal_viewport; #endif -#ifdef OB_TEXTURE +#ifdef V3D_SHADING_TEXTURE_COLOR out vec2 uv_interp; #endif @@ -34,7 +34,7 @@ float integer_noise(int n) void main() { #ifdef HAIR_SHADER -# ifdef OB_TEXTURE +# ifdef V3D_SHADING_TEXTURE_COLOR vec2 uv = hair_get_customdata_vec2(u); # endif float time, thick_time, thickness; @@ -55,7 +55,7 @@ void main() #else gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0); #endif -#ifdef OB_TEXTURE +#ifdef V3D_SHADING_TEXTURE_COLOR uv_interp = uv; #endif diff --git a/source/blender/draw/engines/workbench/workbench_data.c b/source/blender/draw/engines/workbench/workbench_data.c index efadf969830..d544e7614ab 100644 --- a/source/blender/draw/engines/workbench/workbench_data.c +++ b/source/blender/draw/engines/workbench/workbench_data.c @@ -15,7 +15,6 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd) View3D *v3d = draw_ctx->v3d; if (v3d) { wpd->shading = v3d->shading; - wpd->drawtype = v3d->drawtype; if (wpd->shading.light == V3D_LIGHTING_MATCAP) { wpd->studio_light = BKE_studiolight_find( wpd->shading.matcap, STUDIOLIGHT_ORIENTATION_VIEWNORMAL); @@ -30,7 +29,6 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd) wpd->shading.light = V3D_LIGHTING_STUDIO; wpd->shading.shadow_intensity = 0.5; copy_v3_fl(wpd->shading.single_color, 0.8f); - wpd->drawtype = OB_SOLID; wpd->studio_light = BKE_studiolight_find_first(STUDIOLIGHT_INTERNAL); } wpd->shadow_multiplier = 1.0 - wpd->shading.shadow_intensity; diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c index 9b1a17a372a..39a4197bdf3 100644 --- a/source/blender/draw/engines/workbench/workbench_deferred.c +++ b/source/blender/draw/engines/workbench/workbench_deferred.c @@ -175,17 +175,17 @@ static char *workbench_build_cavity_frag(void) return str; } -static void ensure_deferred_shaders(WORKBENCH_PrivateData *wpd, int index, int drawtype, bool is_hair) +static void ensure_deferred_shaders(WORKBENCH_PrivateData *wpd, int index, bool use_textures, bool is_hair) { if (e_data.prepass_sh_cache[index] == NULL) { - char *defines = workbench_material_build_defines(wpd, drawtype, is_hair); + char *defines = workbench_material_build_defines(wpd, use_textures, is_hair); char *composite_frag = workbench_build_composite_frag(wpd); char *prepass_vert = workbench_build_prepass_vert(); char *prepass_frag = workbench_build_prepass_frag(); e_data.prepass_sh_cache[index] = DRW_shader_create( prepass_vert, NULL, prepass_frag, defines); - if (drawtype == OB_SOLID && !is_hair) { + if (!use_textures && !is_hair) { e_data.composite_sh_cache[index] = DRW_shader_create_fullscreen(composite_frag, defines); } MEM_freeN(prepass_vert); @@ -197,15 +197,15 @@ static void ensure_deferred_shaders(WORKBENCH_PrivateData *wpd, int index, int d static void select_deferred_shaders(WORKBENCH_PrivateData *wpd) { - int index_solid = workbench_material_get_shader_index(wpd, OB_SOLID, false); - int index_solid_hair = workbench_material_get_shader_index(wpd, OB_SOLID, true); - int index_texture = workbench_material_get_shader_index(wpd, OB_TEXTURE, false); - int index_texture_hair = workbench_material_get_shader_index(wpd, OB_TEXTURE, true); + int index_solid = workbench_material_get_shader_index(wpd, false, false); + int index_solid_hair = workbench_material_get_shader_index(wpd, false, true); + int index_texture = workbench_material_get_shader_index(wpd, true, false); + int index_texture_hair = workbench_material_get_shader_index(wpd, true, true); - ensure_deferred_shaders(wpd, index_solid, OB_SOLID, false); - ensure_deferred_shaders(wpd, index_solid_hair, OB_SOLID, true); - ensure_deferred_shaders(wpd, index_texture, OB_TEXTURE, false); - ensure_deferred_shaders(wpd, index_texture_hair, OB_TEXTURE, true); + ensure_deferred_shaders(wpd, index_solid, false, false); + ensure_deferred_shaders(wpd, index_solid_hair, false, true); + ensure_deferred_shaders(wpd, index_texture, true, false); + ensure_deferred_shaders(wpd, index_texture_hair, true, true); wpd->prepass_solid_sh = e_data.prepass_sh_cache[index_solid]; wpd->prepass_solid_hair_sh = e_data.prepass_sh_cache[index_solid_hair]; @@ -557,7 +557,7 @@ void workbench_deferred_cache_init(WORKBENCH_Data *vedata) } static WORKBENCH_MaterialData *get_or_create_material_data( - WORKBENCH_Data *vedata, Object *ob, Material *mat, Image *ima, int drawtype) + WORKBENCH_Data *vedata, Object *ob, Material *mat, Image *ima, int color_type) { WORKBENCH_StorageList *stl = vedata->stl; WORKBENCH_PassList *psl = vedata->psl; @@ -570,7 +570,7 @@ static WORKBENCH_MaterialData *get_or_create_material_data( /* Solid */ workbench_material_update_data(wpd, ob, mat, &material_template); material_template.object_id = OBJECT_ID_PASS_ENABLED(wpd) ? engine_object_data->object_id : 1; - material_template.drawtype = drawtype; + material_template.color_type = color_type; material_template.ima = ima; uint hash = workbench_material_get_hash(&material_template); @@ -578,22 +578,16 @@ static WORKBENCH_MaterialData *get_or_create_material_data( if (material == NULL) { material = MEM_mallocN(sizeof(WORKBENCH_MaterialData), __func__); material->shgrp = DRW_shgroup_create( - drawtype == OB_SOLID ? wpd->prepass_solid_sh : wpd->prepass_texture_sh, psl->prepass_pass); + color_type == V3D_SHADING_TEXTURE_COLOR ? wpd->prepass_texture_sh: wpd->prepass_solid_sh, psl->prepass_pass); DRW_shgroup_stencil_mask(material->shgrp, 0xFF); material->object_id = material_template.object_id; copy_v4_v4(material->material_data.diffuse_color, material_template.material_data.diffuse_color); copy_v4_v4(material->material_data.specular_color, material_template.material_data.specular_color); material->material_data.roughness = material_template.material_data.roughness; - switch (drawtype) { - case OB_SOLID: - break; - - case OB_TEXTURE: - { - GPUTexture *tex = GPU_texture_from_blender(ima, NULL, GL_TEXTURE_2D, false, 0.0); - DRW_shgroup_uniform_texture(material->shgrp, "image", tex); - break; - } + if (color_type == V3D_SHADING_TEXTURE_COLOR) + { + GPUTexture *tex = GPU_texture_from_blender(ima, NULL, GL_TEXTURE_2D, false, 0.0); + DRW_shgroup_uniform_texture(material->shgrp, "image", tex); } DRW_shgroup_uniform_int(material->shgrp, "object_id", &material->object_id, 1); material->material_ubo = DRW_uniformbuffer_create(sizeof(WORKBENCH_UBO_Material), &material->material_data); @@ -630,19 +624,11 @@ static void workbench_cache_populate_particles(WORKBENCH_Data *vedata, Object *o if (draw_as == PART_DRAW_PATH) { Image *image = NULL; Material *mat = give_current_material(ob, part->omat); - int mat_drawtype = OB_SOLID; - - if (wpd->drawtype == OB_TEXTURE) { - ED_object_get_active_image(ob, part->omat, &image, NULL, NULL, NULL); - /* use OB_SOLID when no texture could be determined */ - if (image) { - mat_drawtype = OB_TEXTURE; - } - } - - WORKBENCH_MaterialData *material = get_or_create_material_data(vedata, ob, mat, image, mat_drawtype); + ED_object_get_active_image(ob, part->omat, &image, NULL, NULL, NULL); + int color_type = workbench_material_determine_color_type(wpd, image); + WORKBENCH_MaterialData *material = get_or_create_material_data(vedata, ob, mat, image, color_type); - struct GPUShader *shader = (mat_drawtype == OB_SOLID) + struct GPUShader *shader = (color_type != V3D_SHADING_TEXTURE_COLOR) ? wpd->prepass_solid_hair_sh : wpd->prepass_texture_hair_sh; DRWShadingGroup *shgrp = DRW_shgroup_hair_create( @@ -682,7 +668,7 @@ void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob) const bool is_active = (ob == draw_ctx->obact); const bool is_sculpt_mode = is_active && (draw_ctx->object_mode & OB_MODE_SCULPT) != 0; bool is_drawn = false; - if (!is_sculpt_mode && wpd->drawtype == OB_TEXTURE && ELEM(ob->type, OB_MESH)) { + if (!is_sculpt_mode && TEXTURE_DRAWING_ENABLED(wpd) && ELEM(ob->type, OB_MESH)) { const Mesh *me = ob->data; if (me->mloopuv) { const int materials_len = MAX2(1, (is_sculpt_mode ? 1 : ob->totcol)); @@ -697,12 +683,8 @@ void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob) Material *mat = give_current_material(ob, i + 1); Image *image; ED_object_get_active_image(ob, i + 1, &image, NULL, NULL, NULL); - /* use OB_SOLID when no texture could be determined */ - int mat_drawtype = OB_SOLID; - if (image) { - mat_drawtype = OB_TEXTURE; - } - material = get_or_create_material_data(vedata, ob, mat, image, mat_drawtype); + int color_type = workbench_material_determine_color_type(wpd, image); + material = get_or_create_material_data(vedata, ob, mat, image, color_type); DRW_shgroup_call_object_add(material->shgrp, geom_array[i], ob); } is_drawn = true; @@ -712,11 +694,11 @@ void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob) /* Fallback from not drawn OB_TEXTURE mode or just OB_SOLID mode */ if (!is_drawn) { - if ((wpd->shading.color_type != V3D_SHADING_MATERIAL_COLOR)) { + if (ELEM(wpd->shading.color_type, V3D_SHADING_SINGLE_COLOR, V3D_SHADING_RANDOM_COLOR)) { /* No material split needed */ struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob); if (geom) { - material = get_or_create_material_data(vedata, ob, NULL, NULL, OB_SOLID); + material = get_or_create_material_data(vedata, ob, NULL, NULL, wpd->shading.color_type); if (is_sculpt_mode) { DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat); } @@ -741,7 +723,7 @@ void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob) } Material *mat = give_current_material(ob, i + 1); - material = get_or_create_material_data(vedata, ob, mat, NULL, OB_SOLID); + material = get_or_create_material_data(vedata, ob, mat, NULL, V3D_SHADING_MATERIAL_COLOR); if (is_sculpt_mode) { DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat); } diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c index db07f9bb6f5..6a4737ab8b9 100644 --- a/source/blender/draw/engines/workbench/workbench_forward.c +++ b/source/blender/draw/engines/workbench/workbench_forward.c @@ -144,7 +144,7 @@ static void workbench_init_object_data(ObjectEngineData *engine_data) } static WORKBENCH_MaterialData *get_or_create_material_data( - WORKBENCH_Data *vedata, Object *ob, Material *mat, Image *ima, int drawtype) + WORKBENCH_Data *vedata, Object *ob, Material *mat, Image *ima, int color_type) { WORKBENCH_StorageList *stl = vedata->stl; WORKBENCH_PassList *psl = vedata->psl; @@ -158,7 +158,7 @@ static WORKBENCH_MaterialData *get_or_create_material_data( /* Solid */ workbench_material_update_data(wpd, ob, mat, &material_template); material_template.object_id = OBJECT_ID_PASS_ENABLED(wpd) ? engine_object_data->object_id : 1; - material_template.drawtype = drawtype; + material_template.color_type = color_type; material_template.ima = ima; uint hash = workbench_material_get_hash(&material_template); @@ -168,7 +168,7 @@ static WORKBENCH_MaterialData *get_or_create_material_data( /* transparent accum */ grp = DRW_shgroup_create( - drawtype == OB_SOLID ? wpd->transparent_accum_sh : wpd->transparent_accum_texture_sh, + color_type == V3D_SHADING_TEXTURE_COLOR ? wpd->transparent_accum_texture_sh: wpd->transparent_accum_sh, psl->transparent_accum_pass); DRW_shgroup_uniform_block(grp, "world_block", wpd->world_ubo); DRW_shgroup_uniform_float(grp, "alpha", &wpd->shading.xray_alpha, 1); @@ -178,26 +178,20 @@ static WORKBENCH_MaterialData *get_or_create_material_data( copy_v4_v4(material->material_data.diffuse_color, material_template.material_data.diffuse_color); copy_v4_v4(material->material_data.specular_color, material_template.material_data.specular_color); material->material_data.roughness = material_template.material_data.roughness; - switch (drawtype) { - case OB_SOLID: - { - if (STUDIOLIGHT_ORIENTATION_VIEWNORMAL_ENABLED(wpd)) { - BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE); - DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirectangular_radiance_gputexture); - } - if (SPECULAR_HIGHLIGHT_ENABLED(wpd) || MATCAP_ENABLED(wpd)) { - DRW_shgroup_uniform_vec2(grp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1); - } - break; - } - case OB_TEXTURE: - { - GPUTexture *tex = GPU_texture_from_blender(ima, NULL, GL_TEXTURE_2D, false, 0.0f); - DRW_shgroup_uniform_texture(grp, "image", tex); - break; - } + if (color_type == V3D_SHADING_TEXTURE_COLOR) + { + GPUTexture *tex = GPU_texture_from_blender(ima, NULL, GL_TEXTURE_2D, false, 0.0f); + DRW_shgroup_uniform_texture(grp, "image", tex); } + if (STUDIOLIGHT_ORIENTATION_VIEWNORMAL_ENABLED(wpd)) { + BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE); + DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirectangular_radiance_gputexture); + } + if (SPECULAR_HIGHLIGHT_ENABLED(wpd) || MATCAP_ENABLED(wpd)) { + DRW_shgroup_uniform_vec2(grp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1); + } + material->material_ubo = DRW_uniformbuffer_create(sizeof(WORKBENCH_UBO_Material), &material->material_data); DRW_shgroup_uniform_block(grp, "material_block", material->material_ubo); material->shgrp = grp; @@ -211,10 +205,10 @@ static WORKBENCH_MaterialData *get_or_create_material_data( return material; } -static void ensure_forward_shaders(WORKBENCH_PrivateData *wpd, int index, int drawtype, bool is_hair) +static void ensure_forward_shaders(WORKBENCH_PrivateData *wpd, int index, bool use_textures, bool is_hair) { - if (e_data.composite_sh_cache[index] == NULL && drawtype == OB_SOLID && !is_hair) { - char *defines = workbench_material_build_defines(wpd, drawtype, is_hair); + if (e_data.composite_sh_cache[index] == NULL && !use_textures && !is_hair) { + char *defines = workbench_material_build_defines(wpd, use_textures, is_hair); char *composite_frag = workbench_build_forward_composite_frag(); e_data.composite_sh_cache[index] = DRW_shader_create_fullscreen(composite_frag, defines); MEM_freeN(composite_frag); @@ -222,7 +216,7 @@ static void ensure_forward_shaders(WORKBENCH_PrivateData *wpd, int index, int dr } if (e_data.transparent_accum_sh_cache[index] == NULL) { - char *defines = workbench_material_build_defines(wpd, drawtype, is_hair); + char *defines = workbench_material_build_defines(wpd, use_textures, is_hair); char *transparent_accum_vert = workbench_build_forward_vert(); char *transparent_accum_frag = workbench_build_forward_transparent_accum_frag(); e_data.transparent_accum_sh_cache[index] = DRW_shader_create( @@ -236,15 +230,15 @@ static void ensure_forward_shaders(WORKBENCH_PrivateData *wpd, int index, int dr static void select_forward_shaders(WORKBENCH_PrivateData *wpd) { - int index_solid = workbench_material_get_shader_index(wpd, OB_SOLID, false); - int index_solid_hair = workbench_material_get_shader_index(wpd, OB_SOLID, true); - int index_texture = workbench_material_get_shader_index(wpd, OB_TEXTURE, false); - int index_texture_hair = workbench_material_get_shader_index(wpd, OB_TEXTURE, true); + int index_solid = workbench_material_get_shader_index(wpd, false, false); + int index_solid_hair = workbench_material_get_shader_index(wpd, false, true); + int index_texture = workbench_material_get_shader_index(wpd, true, false); + int index_texture_hair = workbench_material_get_shader_index(wpd, true, true); - ensure_forward_shaders(wpd, index_solid, OB_SOLID, false); - ensure_forward_shaders(wpd, index_solid_hair, OB_SOLID, true); - ensure_forward_shaders(wpd, index_texture, OB_TEXTURE, false); - ensure_forward_shaders(wpd, index_texture_hair, OB_TEXTURE, true); + ensure_forward_shaders(wpd, index_solid, false, false); + ensure_forward_shaders(wpd, index_solid_hair, false, true); + ensure_forward_shaders(wpd, index_texture, true, false); + ensure_forward_shaders(wpd, index_texture_hair, true, true); wpd->composite_sh = e_data.composite_sh_cache[index_solid]; wpd->transparent_accum_sh = e_data.transparent_accum_sh_cache[index_solid]; @@ -399,19 +393,11 @@ static void workbench_forward_cache_populate_particles(WORKBENCH_Data *vedata, O if (draw_as == PART_DRAW_PATH) { Image *image = NULL; Material *mat = give_current_material(ob, part->omat); - int mat_drawtype = OB_SOLID; + ED_object_get_active_image(ob, part->omat, &image, NULL, NULL, NULL); + int color_type = workbench_material_determine_color_type(wpd, image); + WORKBENCH_MaterialData *material = get_or_create_material_data(vedata, ob, mat, image, color_type); - if (wpd->drawtype == OB_TEXTURE) { - ED_object_get_active_image(ob, part->omat, &image, NULL, NULL, NULL); - /* use OB_SOLID when no texture could be determined */ - if (image) { - mat_drawtype = OB_TEXTURE; - } - } - - WORKBENCH_MaterialData *material = get_or_create_material_data(vedata, ob, mat, image, mat_drawtype); - - struct GPUShader *shader = (mat_drawtype == OB_SOLID) + struct GPUShader *shader = (color_type != V3D_SHADING_TEXTURE_COLOR) ? wpd->transparent_accum_hair_sh : wpd->transparent_accum_texture_hair_sh; DRWShadingGroup *shgrp = DRW_shgroup_hair_create( @@ -461,14 +447,14 @@ void workbench_forward_cache_populate(WORKBENCH_Data *vedata, Object *ob) return; } + WORKBENCH_MaterialData *material; if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) { const DRWContextState *draw_ctx = DRW_context_state_get(); const bool is_active = (ob == draw_ctx->obact); const bool is_sculpt_mode = is_active && (draw_ctx->object_mode & OB_MODE_SCULPT) != 0; bool is_drawn = false; - WORKBENCH_MaterialData *material = get_or_create_material_data(vedata, ob, NULL, NULL, OB_SOLID); - if (!is_sculpt_mode && wpd->drawtype == OB_TEXTURE && ELEM(ob->type, OB_MESH)) { + if (!is_sculpt_mode && TEXTURE_DRAWING_ENABLED(wpd) && ELEM(ob->type, OB_MESH)) { const Mesh *me = ob->data; if (me->mloopuv) { const int materials_len = MAX2(1, (is_sculpt_mode ? 1 : ob->totcol)); @@ -484,11 +470,16 @@ void workbench_forward_cache_populate(WORKBENCH_Data *vedata, Object *ob) Image *image; ED_object_get_active_image(ob, i + 1, &image, NULL, NULL, NULL); /* use OB_SOLID when no texture could be determined */ - int mat_drawtype = OB_SOLID; - if (image) { - mat_drawtype = OB_TEXTURE; + + int color_type = wpd->shading.color_type; + if (color_type == V3D_SHADING_TEXTURE_COLOR) { + /* use OB_SOLID when no texture could be determined */ + if (image == NULL) { + color_type = V3D_SHADING_MATERIAL_COLOR; + } } - material = get_or_create_material_data(vedata, ob, mat, image, mat_drawtype); + + material = get_or_create_material_data(vedata, ob, mat, image, color_type); DRW_shgroup_call_object_add(material->shgrp_object_outline, geom_array[i], ob); DRW_shgroup_call_object_add(material->shgrp, geom_array[i], ob); } @@ -499,10 +490,11 @@ void workbench_forward_cache_populate(WORKBENCH_Data *vedata, Object *ob) /* Fallback from not drawn OB_TEXTURE mode or just OB_SOLID mode */ if (!is_drawn) { - if ((wpd->shading.color_type != V3D_SHADING_MATERIAL_COLOR)) { + if (ELEM(wpd->shading.color_type, V3D_SHADING_SINGLE_COLOR, V3D_SHADING_RANDOM_COLOR)) { /* No material split needed */ struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob); if (geom) { + material = get_or_create_material_data(vedata, ob, NULL, NULL, wpd->shading.color_type); if (is_sculpt_mode) { DRW_shgroup_call_sculpt_add(material->shgrp_object_outline, ob, ob->obmat); DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat); @@ -529,7 +521,7 @@ void workbench_forward_cache_populate(WORKBENCH_Data *vedata, Object *ob) } Material *mat = give_current_material(ob, i + 1); - material = get_or_create_material_data(vedata, ob, mat, NULL, OB_SOLID); + material = get_or_create_material_data(vedata, ob, mat, NULL, V3D_SHADING_MATERIAL_COLOR); if (is_sculpt_mode) { DRW_shgroup_call_sculpt_add(material->shgrp_object_outline, ob, ob->obmat); DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat); diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c index c0857cf74aa..58f23deab16 100644 --- a/source/blender/draw/engines/workbench/workbench_materials.c +++ b/source/blender/draw/engines/workbench/workbench_materials.c @@ -9,8 +9,8 @@ void workbench_material_update_data(WORKBENCH_PrivateData *wpd, Object *ob, Material *mat, WORKBENCH_MaterialData *data) { - /* When in OB_TEXTURE always uyse V3D_SHADING_MATERIAL_COLOR as fallback when no texture could be determined */ - int color_type = wpd->drawtype == OB_SOLID ? wpd->shading.color_type : V3D_SHADING_MATERIAL_COLOR; + /* When V3D_SHADING_TEXTURE_COLOR is active, use V3D_SHADING_MATERIAL_COLOR as fallback when no texture could be determined */ + int color_type = wpd->shading.color_type == V3D_SHADING_TEXTURE_COLOR? V3D_SHADING_MATERIAL_COLOR: wpd->shading.color_type; static float default_diffuse_color[] = {0.8f, 0.8f, 0.8f, 1.0f}; static float default_specular_color[] = {0.5f, 0.5f, 0.5f, 0.5f}; copy_v4_v4(data->material_data.diffuse_color, default_diffuse_color); @@ -40,7 +40,7 @@ void workbench_material_update_data(WORKBENCH_PrivateData *wpd, Object *ob, Mate } } -char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, int drawtype, bool is_hair) +char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool use_textures, bool is_hair) { char *str = NULL; @@ -79,15 +79,9 @@ char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, int drawtype, if (NORMAL_VIEWPORT_PASS_ENABLED(wpd)) { BLI_dynstr_appendf(ds, "#define NORMAL_VIEWPORT_PASS_ENABLED\n"); } - switch (drawtype) { - case OB_SOLID: - BLI_dynstr_appendf(ds, "#define OB_SOLID\n"); - break; - case OB_TEXTURE: - BLI_dynstr_appendf(ds, "#define OB_TEXTURE\n"); - break; + if (use_textures) { + BLI_dynstr_appendf(ds, "#define V3D_SHADING_TEXTURE_COLOR\n"); } - if (NORMAL_ENCODING_ENABLED()) { BLI_dynstr_appendf(ds, "#define WORKBENCH_ENCODE_NORMALS\n"); } @@ -129,19 +123,19 @@ uint workbench_material_get_hash(WORKBENCH_MaterialData *material_template) input[3] = (uint)(material_template->material_data.roughness * 512); result += BLI_ghashutil_uinthash_v4_murmur(input); - if (material_template->drawtype == OB_TEXTURE) { + if (material_template->color_type == V3D_SHADING_TEXTURE_COLOR) { /* add texture reference */ result += BLI_ghashutil_inthash_p_murmur(material_template->ima); } return result; } -int workbench_material_get_shader_index(WORKBENCH_PrivateData *wpd, int drawtype, bool is_hair) +int workbench_material_get_shader_index(WORKBENCH_PrivateData *wpd, bool use_textures, bool is_hair) { /* NOTE: change MAX_SHADERS accordingly when modifying this function. */ int index = 0; - /* 1 bit OB_SOLID and OB_TEXTURE */ - SET_FLAG_FROM_TEST(index, drawtype == OB_TEXTURE, 1 << 0); + /* 1 bit V3D_SHADING_TEXTURE_COLOR */ + SET_FLAG_FROM_TEST(index, use_textures, 1 << 0); /* 2 bits FLAT/STUDIO/MATCAP/SCENE */ SET_FLAG_FROM_TEST(index, wpd->shading.light, wpd->shading.light << 1); /* 1 bit V3D_SHADING_SPECULAR_HIGHLIGHT */ @@ -171,3 +165,13 @@ void workbench_material_set_normal_world_matrix( DRW_shgroup_uniform_mat3(grp, "normalWorldMatrix", persistent_matrix); } } + +int workbench_material_determine_color_type(WORKBENCH_PrivateData *wpd, Image *ima) +{ + int color_type = wpd->shading.color_type; + if (color_type == V3D_SHADING_TEXTURE_COLOR && ima == NULL) + { + color_type = V3D_SHADING_MATERIAL_COLOR; + } + return color_type; +}
\ No newline at end of file diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h index 68d50a85c35..57cfd6b4718 100644 --- a/source/blender/draw/engines/workbench/workbench_private.h +++ b/source/blender/draw/engines/workbench/workbench_private.h @@ -41,11 +41,10 @@ #define M_GOLDEN_RATION_CONJUGATE 0.618033988749895 #define MAX_SHADERS (1 << 10) -#define OB_SOLID_ENABLED(wpd) (wpd->drawtype & OB_SOLID) -#define OB_TEXTURE_ENABLED(wpd) (wpd->drawtype & OB_TEXTURE) +#define TEXTURE_DRAWING_ENABLED(wpd) (wpd->color_type & V3D_SHADING_TEXTURE_COLOR) #define FLAT_ENABLED(wpd) (wpd->shading.light == V3D_LIGHTING_FLAT) #define STUDIOLIGHT_ENABLED(wpd) (wpd->shading.light == V3D_LIGHTING_STUDIO) -#define MATCAP_ENABLED(wpd) (wpd->shading.light == V3D_LIGHTING_MATCAP && OB_SOLID_ENABLED(wpd)) +#define MATCAP_ENABLED(wpd) (wpd->shading.light == V3D_LIGHTING_MATCAP) #define STUDIOLIGHT_ORIENTATION_WORLD_ENABLED(wpd) (STUDIOLIGHT_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_ORIENTATION_WORLD)) #define STUDIOLIGHT_ORIENTATION_CAMERA_ENABLED(wpd) (STUDIOLIGHT_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_ORIENTATION_CAMERA)) #define STUDIOLIGHT_ORIENTATION_VIEWNORMAL_ENABLED(wpd) (MATCAP_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_ORIENTATION_VIEWNORMAL)) @@ -57,6 +56,8 @@ #define NORMAL_VIEWPORT_COMP_PASS_ENABLED(wpd) (MATCAP_ENABLED(wpd) || STUDIOLIGHT_ENABLED(wpd) || SHADOW_ENABLED(wpd) || SPECULAR_HIGHLIGHT_ENABLED(wpd)) #define NORMAL_VIEWPORT_PASS_ENABLED(wpd) (NORMAL_VIEWPORT_COMP_PASS_ENABLED(wpd) || CAVITY_ENABLED(wpd)) #define NORMAL_ENCODING_ENABLED() (true) +#define TEXTURE_DRAWING_ENABLED(wpd) (wpd->color_type & V3D_SHADING_TEXTURE_COLOR) + typedef struct WORKBENCH_FramebufferList { /* Deferred render buffers */ @@ -147,7 +148,7 @@ typedef struct WORKBENCH_PrivateData { View3DShading shading; StudioLight *studio_light; UserDef *user_preferences; - int drawtype; + int color_type; struct GPUUniformBuffer *world_ubo; struct DRWShadingGroup *shadow_shgrp; struct DRWShadingGroup *depth_shgrp; @@ -176,7 +177,7 @@ typedef struct WORKBENCH_MaterialData { struct GPUUniformBuffer *material_ubo; int object_id; - int drawtype; + int color_type; Image *ima; /* Linked shgroup for drawing */ @@ -228,10 +229,11 @@ void workbench_forward_cache_populate(WORKBENCH_Data *vedata, Object *ob); void workbench_forward_cache_finish(WORKBENCH_Data *vedata); /* workbench_materials.c */ -char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, int drawtype, bool is_hair); +int workbench_material_determine_color_type(WORKBENCH_PrivateData *wpd, Image *ima); +char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool use_textures, bool is_hair); void workbench_material_update_data(WORKBENCH_PrivateData *wpd, Object *ob, Material *mat, WORKBENCH_MaterialData *data); uint workbench_material_get_hash(WORKBENCH_MaterialData *material_template); -int workbench_material_get_shader_index(WORKBENCH_PrivateData *wpd, int drawtype, bool is_hair); +int workbench_material_get_shader_index(WORKBENCH_PrivateData *wpd, bool use_textures, bool is_hair); void workbench_material_set_normal_world_matrix( DRWShadingGroup *grp, WORKBENCH_PrivateData *wpd, float persistent_matrix[3][3]); diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index fcdc4a3a016..52c8ca1f6fb 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -1024,7 +1024,6 @@ static void drw_engines_enable_from_engine(RenderEngineType *engine_type, int dr break; case OB_SOLID: - case OB_TEXTURE: if (shading_flags & V3D_SHADING_XRAY) { use_drw_engine(&draw_engine_workbench_transparent); } diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index b7ad9f7d921..2bb90b92cf6 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -355,11 +355,12 @@ enum { V3D_SHADING_MATCAP_FLIP_X = (1 << 6), }; -/* View3DShading->single_color_type */ +/* View3DShading->color_type */ enum { V3D_SHADING_MATERIAL_COLOR = 0, V3D_SHADING_RANDOM_COLOR = 1, V3D_SHADING_SINGLE_COLOR = 2, + V3D_SHADING_TEXTURE_COLOR = 3, }; /* View3DOverlay->flag */ diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 458be5bb8f9..ed1705cf847 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -237,11 +237,9 @@ static const EnumPropertyItem autosnap_items[] = { #endif const EnumPropertyItem rna_enum_shading_type_items[] = { - {OB_WIRE, "WIREFRAME", ICON_WIRE, "Wireframe", "Display the object as wire edges"}, - {OB_SOLID, "SOLID", ICON_SOLID, "Single Color", "Display the object or material in a single color"}, - {OB_TEXTURE, "TEXTURED", ICON_POTATO, "Texture", "Display the object solid, with a texture"}, - {OB_MATERIAL, "MATERIAL", ICON_MATERIAL_DATA, "Material", "Display objects solid, with GLSL material"}, - {OB_RENDER, "RENDERED", ICON_SMOOTH, "Rendered", "Display render preview"}, + {OB_SOLID, "SOLID", ICON_SOLID, "Solid", "Display in solid mode"}, + {OB_MATERIAL, "MATERIAL", ICON_MATERIAL_DATA, "LookDev", "Display in LookDev mode"}, + {OB_RENDER, "RENDERED", ICON_SMOOTH, "Rendered", "Display render preview"}, {0, NULL, 0, NULL, NULL} }; @@ -252,6 +250,15 @@ const EnumPropertyItem rna_enum_viewport_lighting_items[] = { {0, NULL, 0, NULL, NULL} }; +static const EnumPropertyItem rna_enum_shading_color_type_items[] = { + {V3D_SHADING_SINGLE_COLOR, "SOLID", 0, "Single", "Show scene in a single color"}, + {V3D_SHADING_MATERIAL_COLOR, "MATERIAL", 0, "Material", "Show material color"}, + {V3D_SHADING_RANDOM_COLOR, "RANDOM", 0, "Random", "Show random object color"}, + {V3D_SHADING_TEXTURE_COLOR, "TEXTURE", 0, "Texture", "Show texture"}, + {0, NULL, 0, NULL, NULL} +}; + + static const EnumPropertyItem rna_enum_studio_light_items[] = { {0, "DEFAULT", 0, "Default", ""}, {0, NULL, 0, NULL, NULL} @@ -692,9 +699,6 @@ static void rna_3DViewShading_type_set(PointerRNA *ptr, int value) if (value != v3d->drawtype && value == OB_RENDER) { v3d->prev_drawtype = v3d->drawtype; } - if (value == OB_TEXTURE && v3d->shading.light == V3D_LIGHTING_MATCAP) { - v3d->shading.light = V3D_LIGHTING_STUDIO; - } v3d->drawtype = value; } @@ -710,7 +714,6 @@ static const EnumPropertyItem *rna_3DViewShading_type_itemf( int totitem = 0; RNA_enum_items_add_value(&item, &totitem, rna_enum_shading_type_items, OB_SOLID); - RNA_enum_items_add_value(&item, &totitem, rna_enum_shading_type_items, OB_TEXTURE); if (BKE_scene_uses_blender_eevee(scene)) { RNA_enum_items_add_value(&item, &totitem, rna_enum_shading_type_items, OB_MATERIAL); @@ -753,10 +756,13 @@ static int rna_View3DShading_light_get(PointerRNA *ptr) static void rna_View3DShading_light_set(PointerRNA *ptr, int value) { View3D *v3d = (View3D *)ptr->data; + if (value == V3D_LIGHTING_MATCAP && v3d->shading.color_type == V3D_SHADING_TEXTURE_COLOR) { + v3d->shading.color_type = V3D_SHADING_MATERIAL_COLOR; + } v3d->shading.light = value; } -static const EnumPropertyItem *rna_View3DShading_light_itemf( +static const EnumPropertyItem *rna_View3DShading_color_type_itemf( bContext *UNUSED(C), PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *r_free) { @@ -765,14 +771,15 @@ static const EnumPropertyItem *rna_View3DShading_light_itemf( int totitem = 0; EnumPropertyItem *item = NULL; - if (v3d->drawtype == OB_SOLID || v3d->drawtype == OB_TEXTURE) { - RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_lighting_items, V3D_LIGHTING_FLAT); - RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_lighting_items, V3D_LIGHTING_STUDIO); - } - if (v3d->drawtype == OB_SOLID) { - RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_lighting_items, V3D_LIGHTING_MATCAP); + RNA_enum_items_add_value(&item, &totitem, rna_enum_shading_color_type_items, V3D_SHADING_SINGLE_COLOR); + RNA_enum_items_add_value(&item, &totitem, rna_enum_shading_color_type_items, V3D_SHADING_MATERIAL_COLOR); + RNA_enum_items_add_value(&item, &totitem, rna_enum_shading_color_type_items, V3D_SHADING_RANDOM_COLOR); + if (v3d->shading.light != V3D_LIGHTING_MATCAP) { + RNA_enum_items_add_value(&item, &totitem, rna_enum_shading_color_type_items, V3D_SHADING_TEXTURE_COLOR); + } } + RNA_enum_item_end(&item, &totitem); *r_free = true; return item; @@ -2367,13 +2374,6 @@ static void rna_def_space_view3d_shading(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static const EnumPropertyItem color_type_items[] = { - {V3D_SHADING_SINGLE_COLOR, "SINGLE", 0, "Single", "Show scene in a single color"}, - {V3D_SHADING_MATERIAL_COLOR, "MATERIAL", 0, "Material", "Show material color"}, - {V3D_SHADING_RANDOM_COLOR, "RANDOM", 0, "Random", "Show random object color"}, - {0, NULL, 0, NULL, NULL} - }; - srna = RNA_def_struct(brna, "View3DShading", NULL); RNA_def_struct_sdna(srna, "View3D"); RNA_def_struct_nested(brna, srna, "SpaceView3D"); @@ -2391,7 +2391,7 @@ static void rna_def_space_view3d_shading(BlenderRNA *brna) prop = RNA_def_property(srna, "light", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "shading.light"); RNA_def_property_enum_items(prop, rna_enum_viewport_lighting_items); - RNA_def_property_enum_funcs(prop, "rna_View3DShading_light_get", "rna_View3DShading_light_set", "rna_View3DShading_light_itemf"); + RNA_def_property_enum_funcs(prop, "rna_View3DShading_light_get", "rna_View3DShading_light_set", NULL); RNA_def_property_ui_text(prop, "Lighting", "Lighting Method for Solid/Texture Viewport Shading"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); @@ -2450,7 +2450,8 @@ static void rna_def_space_view3d_shading(BlenderRNA *brna) prop = RNA_def_property(srna, "color_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "shading.color_type"); - RNA_def_property_enum_items(prop, color_type_items); + RNA_def_property_enum_items(prop, rna_enum_shading_color_type_items); + RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_View3DShading_color_type_itemf"); RNA_def_property_ui_text(prop, "Color", "Color Type"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); |