diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-08-20 17:21:44 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-08-20 17:21:44 +0300 |
commit | 1c7119a33616f35c2afb172765cb494e5faab689 (patch) | |
tree | 78578fab2dc34a57e1b2d5ab8bd0f16698164410 /source | |
parent | 47d43c5a00aed963cc59eee35e263e4d3eb9f66d (diff) |
Wrokbench: Add support for maximum drawtype OB_TEXTURE
Diffstat (limited to 'source')
4 files changed, 15 insertions, 14 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c index 696393a6ae1..c72e1d9fece 100644 --- a/source/blender/draw/engines/workbench/workbench_deferred.c +++ b/source/blender/draw/engines/workbench/workbench_deferred.c @@ -625,7 +625,7 @@ static WORKBENCH_MaterialData *get_or_create_material_data( workbench_material_copy(material, &material_template); DRW_shgroup_stencil_mask(material->shgrp, (ob->dtx & OB_DRAWXRAY) ? 0x00 : 0xFF); DRW_shgroup_uniform_int(material->shgrp, "object_id", &material->object_id, 1); - workbench_material_shgroup_uniform(wpd, material->shgrp, material); + workbench_material_shgroup_uniform(wpd, material->shgrp, material, ob); BLI_ghash_insert(wpd->material_hash, SET_UINT_IN_POINTER(hash), material); } @@ -659,7 +659,7 @@ static void workbench_cache_populate_particles(WORKBENCH_Data *vedata, Object *o Image *image = NULL; Material *mat = give_current_material(ob, part->omat); ED_object_get_active_image(ob, part->omat, &image, NULL, NULL, NULL); - int color_type = workbench_material_determine_color_type(wpd, image); + int color_type = workbench_material_determine_color_type(wpd, image, ob); WORKBENCH_MaterialData *material = get_or_create_material_data(vedata, ob, mat, image, color_type); struct GPUShader *shader = (color_type != V3D_SHADING_TEXTURE_COLOR) ? @@ -671,7 +671,7 @@ static void workbench_cache_populate_particles(WORKBENCH_Data *vedata, Object *o shader); DRW_shgroup_stencil_mask(shgrp, (ob->dtx & OB_DRAWXRAY) ? 0x00 : 0xFF); DRW_shgroup_uniform_int(shgrp, "object_id", &material->object_id, 1); - workbench_material_shgroup_uniform(wpd, shgrp, material); + workbench_material_shgroup_uniform(wpd, shgrp, material, ob); } } } @@ -725,7 +725,7 @@ 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); - int color_type = workbench_material_determine_color_type(wpd, image); + int color_type = workbench_material_determine_color_type(wpd, image, ob); material = get_or_create_material_data(vedata, ob, mat, image, color_type); DRW_shgroup_call_object_add(material->shgrp, geom_array[i], ob); } diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c index 211cfa4ab8c..c31164447db 100644 --- a/source/blender/draw/engines/workbench/workbench_forward.c +++ b/source/blender/draw/engines/workbench/workbench_forward.c @@ -176,11 +176,11 @@ static WORKBENCH_MaterialData *get_or_create_material_data( DRW_shgroup_uniform_vec2(grp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1); } - workbench_material_shgroup_uniform(wpd, grp, material); + workbench_material_shgroup_uniform(wpd, grp, material, ob); material->shgrp = grp; /* Depth */ - if (workbench_material_determine_color_type(wpd, material->ima) == V3D_SHADING_TEXTURE_COLOR) { + if (workbench_material_determine_color_type(wpd, material->ima, ob) == V3D_SHADING_TEXTURE_COLOR) { material->shgrp_object_outline = DRW_shgroup_create( e_data.object_outline_texture_sh, psl->object_outline_pass); GPUTexture *tex = GPU_texture_from_blender(material->ima, NULL, GL_TEXTURE_2D, false, 0.0f); @@ -419,7 +419,7 @@ static void workbench_forward_cache_populate_particles(WORKBENCH_Data *vedata, O Image *image = NULL; Material *mat = give_current_material(ob, part->omat); ED_object_get_active_image(ob, part->omat, &image, NULL, NULL, NULL); - int color_type = workbench_material_determine_color_type(wpd, image); + int color_type = workbench_material_determine_color_type(wpd, image, ob); WORKBENCH_MaterialData *material = get_or_create_material_data(vedata, ob, mat, image, color_type); struct GPUShader *shader = (color_type != V3D_SHADING_TEXTURE_COLOR) @@ -431,7 +431,7 @@ static void workbench_forward_cache_populate_particles(WORKBENCH_Data *vedata, O shader); workbench_material_set_normal_world_matrix(shgrp, wpd, e_data.normal_world_matrix); DRW_shgroup_uniform_block(shgrp, "world_block", wpd->world_ubo); - workbench_material_shgroup_uniform(wpd, shgrp, material); + workbench_material_shgroup_uniform(wpd, shgrp, material, ob); DRW_shgroup_uniform_vec4(shgrp, "viewvecs[0]", (float *)wpd->viewvecs, 3); /* Hairs have lots of layer and can rapidly become the most prominent surface. * So lower their alpha artificially. */ diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c index dd5bac6a0f4..6a11b2b8457 100644 --- a/source/blender/draw/engines/workbench/workbench_materials.c +++ b/source/blender/draw/engines/workbench/workbench_materials.c @@ -174,19 +174,19 @@ void workbench_material_set_normal_world_matrix( } } -int workbench_material_determine_color_type(WORKBENCH_PrivateData *wpd, Image *ima) +int workbench_material_determine_color_type(WORKBENCH_PrivateData *wpd, Image *ima, Object *ob) { int color_type = wpd->shading.color_type; - if (color_type == V3D_SHADING_TEXTURE_COLOR && ima == NULL) { + if ((color_type == V3D_SHADING_TEXTURE_COLOR && ima == NULL) || (ob->dt < OB_TEXTURE)) { color_type = V3D_SHADING_MATERIAL_COLOR; } return color_type; } void workbench_material_shgroup_uniform( - WORKBENCH_PrivateData *wpd, DRWShadingGroup *grp, WORKBENCH_MaterialData *material) + WORKBENCH_PrivateData *wpd, DRWShadingGroup *grp, WORKBENCH_MaterialData *material, Object *ob) { - if (workbench_material_determine_color_type(wpd, material->ima) == V3D_SHADING_TEXTURE_COLOR) { + if (workbench_material_determine_color_type(wpd, material->ima, ob) == V3D_SHADING_TEXTURE_COLOR) { GPUTexture *tex = GPU_texture_from_blender(material->ima, NULL, GL_TEXTURE_2D, false, 0.0f); DRW_shgroup_uniform_texture(grp, "image", tex); } diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h index 1e3ea9193aa..11a52fb06a1 100644 --- a/source/blender/draw/engines/workbench/workbench_private.h +++ b/source/blender/draw/engines/workbench/workbench_private.h @@ -281,14 +281,15 @@ void workbench_taa_view_updated(WORKBENCH_Data *vedata); int workbench_taa_calculate_num_iterations(WORKBENCH_Data *vedata); /* workbench_materials.c */ -int workbench_material_determine_color_type(WORKBENCH_PrivateData *wpd, Image *ima); +int workbench_material_determine_color_type(WORKBENCH_PrivateData *wpd, Image *ima, Object *ob); 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, bool is_ghost); 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]); -void workbench_material_shgroup_uniform(WORKBENCH_PrivateData *wpd, DRWShadingGroup *grp, WORKBENCH_MaterialData *material); +void workbench_material_shgroup_uniform( + WORKBENCH_PrivateData *wpd, DRWShadingGroup *grp, WORKBENCH_MaterialData *material, Object *ob); void workbench_material_copy(WORKBENCH_MaterialData *dest_material, const WORKBENCH_MaterialData *source_material); /* workbench_studiolight.c */ |