[Bf-blender-cvs] [a190407e916] hair_guides_grooming: Merge branch 'hair_guides' into hair_guides_grooming

Lukas Tönne noreply at git.blender.org
Tue Jun 26 23:40:25 CEST 2018


Commit: a190407e9164f07bdb354facc00a4a6dea9d6008
Author: Lukas Tönne
Date:   Tue Jun 26 22:40:03 2018 +0100
Branches: hair_guides_grooming
https://developer.blender.org/rBa190407e9164f07bdb354facc00a4a6dea9d6008

Merge branch 'hair_guides' into hair_guides_grooming

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



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

diff --cc source/blender/draw/engines/workbench/workbench_deferred.c
index 1446e283ca9,d35cd3b8ba6..65953bc1b39
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@@ -670,48 -658,6 +660,41 @@@ static void workbench_cache_populate_pa
  	}
  }
  
 +static void workbench_cache_populate_groom(WORKBENCH_Data *vedata, Object *ob)
 +{
 +	const Groom *groom = ob->data;
 +	const struct HairDrawSettings *draw_set = groom->hair_draw_settings;
 +	WORKBENCH_StorageList *stl = vedata->stl;
 +	WORKBENCH_PassList *psl = vedata->psl;
 +	WORKBENCH_PrivateData *wpd = stl->g_data;
 +	const DRWContextState *draw_ctx = DRW_context_state_get();
 +	
 +	Image *image = NULL;
 +	Material *mat = give_current_material(ob, groom->material_index);
- 	int mat_drawtype = OB_SOLID;
- 
- 	if (wpd->drawtype == OB_TEXTURE) {
- 		ED_object_get_active_image(ob, groom->material_index, &image, NULL, NULL, NULL);
- 		/* use OB_SOLID when no texture could be determined */
- 		if (image) {
- 			mat_drawtype = OB_TEXTURE;
- 		}
- 	}
++	ED_object_get_active_image(ob, groom->material_index, &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);
 +	
- 	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->prepass_solid_hair_fibers_sh
 +	                           : wpd->prepass_texture_hair_fibers_sh;
 +
 +	struct Mesh *scalp = BKE_groom_get_scalp(draw_ctx->depsgraph, groom);
 +
 +	DRWShadingGroup *shgrp = DRW_shgroup_hair_fibers_create(
 +	                             draw_ctx->scene, ob, groom->hair_system, scalp,
 +	                             draw_set, psl->prepass_hair_pass,
 +	                             shader);
 +
 +	DRW_shgroup_stencil_mask(shgrp, 0xFF);
 +	DRW_shgroup_uniform_int(shgrp, "object_id", &material->object_id, 1);
 +	DRW_shgroup_uniform_block(shgrp, "material_block", material->material_ubo);
 +	if (image) {
 +		GPUTexture *tex = GPU_texture_from_blender(image, NULL, GL_TEXTURE_2D, false, 0.0f);
 +		DRW_shgroup_uniform_texture(shgrp, "image", tex);
 +	}
 +}
 +
  void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob)
  {
  	WORKBENCH_StorageList *stl = vedata->stl;
diff --cc source/blender/draw/engines/workbench/workbench_forward.c
index 1cafc256099,daeb2cb1ffa..776086989df
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@@ -461,61 -468,6 +470,53 @@@ static void workbench_forward_cache_pop
  	}
  }
  
 +static void workbench_forward_cache_populate_groom(WORKBENCH_Data *vedata, Object *ob)
 +{
 +	const Groom *groom = ob->data;
 +	const struct HairDrawSettings *draw_set = groom->hair_draw_settings;
 +	WORKBENCH_StorageList *stl = vedata->stl;
 +	WORKBENCH_PassList *psl = vedata->psl;
 +	WORKBENCH_PrivateData *wpd = stl->g_data;
 +	const DRWContextState *draw_ctx = DRW_context_state_get();
 +
 +	Image *image = NULL;
 +	Material *mat = give_current_material(ob, groom->material_index);
- 	int mat_drawtype = OB_SOLID;
++	ED_object_get_active_image(ob, groom->material_index, &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, groom->material_index, &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_fibers_sh
 +	        : wpd->transparent_accum_texture_hair_fibers_sh;
 +
 +	struct Mesh *scalp = BKE_groom_get_scalp(draw_ctx->depsgraph, groom);
 +
 +	DRWShadingGroup *shgrp = DRW_shgroup_hair_fibers_create(
 +	                             draw_ctx->scene, ob, groom->hair_system, scalp,
 +	                             draw_set, psl->transparent_accum_pass,
 +	                             shader);
 +	workbench_material_set_normal_world_matrix(shgrp, wpd, e_data.normal_world_matrix);
 +	DRW_shgroup_uniform_block(shgrp, "world_block", wpd->world_ubo);
 +	DRW_shgroup_uniform_block(shgrp, "material_block", material->material_ubo);
 +	DRW_shgroup_uniform_float(shgrp, "alpha", &wpd->shading.xray_alpha, 1);
 +	if (image) {
 +		GPUTexture *tex = GPU_texture_from_blender(image, NULL, GL_TEXTURE_2D, false, 0.0f);
 +		DRW_shgroup_uniform_texture(shgrp, "image", tex);
 +	}
 +#ifdef WORKBENCH_REVEALAGE_ENABLED
 +	shgrp = DRW_shgroup_hair_fibers_create(
 +	            draw_ctx->scene, ob, groom->hair_system, scalp,
 +	            draw_set, psl->transparent_revealage_pass,
 +	            e_data.transparent_revealage_hair_sh);
 +	DRW_shgroup_uniform_float(shgrp, "alpha", &wpd->shading.xray_alpha, 1);
 +#endif
 +	shgrp = DRW_shgroup_hair_fibers_create(
 +	            draw_ctx->scene, ob, groom->hair_system, scalp,
 +	            draw_set, vedata->psl->object_outline_pass,
 +	            e_data.object_outline_hair_sh);
 +	DRW_shgroup_uniform_int(shgrp, "object_id", &material->object_id, 1);
 +}
 +
  void workbench_forward_cache_populate(WORKBENCH_Data *vedata, Object *ob)
  {
  	WORKBENCH_StorageList *stl = vedata->stl;
diff --cc source/blender/editors/space_outliner/outliner_draw.c
index 8dd43811ae0,6f3a99e1d14..6e2192e0e64
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@@ -1200,35 -1202,33 +1202,35 @@@ static void tselem_draw_icon
  			Object *ob = (Object *)tselem->id;
  			switch (ob->type) {
  				case OB_LAMP:
- 					tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_LAMP); break;
+ 					ICON_CLICK_DRAW(ICON_OUTLINER_OB_LAMP); break;
  				case OB_MESH:
- 					tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_MESH); break;
+ 					ICON_CLICK_DRAW(ICON_OUTLINER_OB_MESH); break;
  				case OB_CAMERA:
- 					tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_CAMERA); break;
+ 					ICON_CLICK_DRAW(ICON_OUTLINER_OB_CAMERA); break;
  				case OB_CURVE:
- 					tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_CURVE); break;
+ 					ICON_CLICK_DRAW(ICON_OUTLINER_OB_CURVE); break;
  				case OB_MBALL:
- 					tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_META); break;
+ 					ICON_CLICK_DRAW(ICON_OUTLINER_OB_META); break;
 +				case OB_GROOM:
 +					tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_CURVE); break;
  				case OB_LATTICE:
- 					tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_LATTICE); break;
+ 					ICON_CLICK_DRAW(ICON_OUTLINER_OB_LATTICE); break;
  				case OB_ARMATURE:
- 					tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_ARMATURE); break;
+ 					ICON_CLICK_DRAW(ICON_OUTLINER_OB_ARMATURE); break;
  				case OB_FONT:
- 					tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_FONT); break;
+ 					ICON_CLICK_DRAW(ICON_OUTLINER_OB_FONT); break;
  				case OB_SURF:
- 					tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_SURFACE); break;
+ 					ICON_CLICK_DRAW(ICON_OUTLINER_OB_SURFACE); break;
  				case OB_SPEAKER:
- 					tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_SPEAKER); break;
+ 					ICON_CLICK_DRAW(ICON_OUTLINER_OB_SPEAKER); break;
  				case OB_LIGHTPROBE:
- 					tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_LIGHTPROBE); break;
+ 					ICON_CLICK_DRAW(ICON_OUTLINER_OB_LIGHTPROBE); break;
  				case OB_EMPTY:
  					if (ob->dup_group) {
- 						tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_GROUP_INSTANCE);
+ 						ICON_CLICK_DRAW(ICON_OUTLINER_OB_GROUP_INSTANCE);
  					}
  					else {
- 						tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_EMPTY);
+ 						ICON_CLICK_DRAW(ICON_OUTLINER_OB_EMPTY);
  					}
  					break;
  			}



More information about the Bf-blender-cvs mailing list