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

Lukas Tönne noreply at git.blender.org
Fri Jun 15 08:18:39 CEST 2018


Commit: cc66a466e264770679df6be9cc652468fd471292
Author: Lukas Tönne
Date:   Fri Jun 15 07:18:23 2018 +0100
Branches: hair_guides_grooming
https://developer.blender.org/rBcc66a466e264770679df6be9cc652468fd471292

Merge branch 'hair_guides' into hair_guides_grooming

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



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

diff --cc release/scripts/startup/bl_ui/space_view3d.py
index e7b33bb80d6,f371cad6d72..d063333d0bd
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@@ -77,12 -60,9 +60,12 @@@ class VIEW3D_HT_header(Header)
              # mode = obj.mode
  
              # Particle edit
 -            if mode == 'PARTICLE_EDIT':
 +            if mode == 'EDIT' and obj.type == 'GROOM':
 +                row = layout.row()
 +                row.prop(toolsettings.groom_edit_settings, "mode", text="", expand=True)
 +            elif mode == 'PARTICLE_EDIT':
                  row = layout.row()
-                 row.prop(toolsettings.particle_edit, "select_mode", text="", expand=True)
+                 row.prop(tool_settings.particle_edit, "select_mode", text="", expand=True)
  
              # Occlude geometry
              if ((shading.type not in {'BOUNDBOX', 'WIREFRAME'} and (mode == 'PARTICLE_EDIT' or (mode == 'EDIT' and obj.type == 'MESH'))) or
@@@ -144,29 -235,27 +238,29 @@@ class VIEW3D_MT_editor_menus(Menu)
          if gp_edit:
              pass
          elif mode_string == 'OBJECT':
-             layout.menu("INFO_MT_add", text="Add")
+             row.menu("INFO_MT_add", text="Add")
          elif mode_string == 'EDIT_MESH':
-             layout.menu("INFO_MT_mesh_add", text="Add")
+             row.menu("INFO_MT_mesh_add", text="Add")
          elif mode_string == 'EDIT_CURVE':
-             layout.menu("INFO_MT_curve_add", text="Add")
+             row.menu("INFO_MT_curve_add", text="Add")
          elif mode_string == 'EDIT_SURFACE':
-             layout.menu("INFO_MT_surface_add", text="Add")
+             row.menu("INFO_MT_surface_add", text="Add")
          elif mode_string == 'EDIT_METABALL':
-             layout.menu("INFO_MT_metaball_add", text="Add")
+             row.menu("INFO_MT_metaball_add", text="Add")
 +        elif mode_string == 'EDIT_GROOM':
 +            layout.menu("INFO_MT_groom_add", text="Add")
          elif mode_string == 'EDIT_ARMATURE':
-             layout.menu("INFO_MT_edit_armature_add", text="Add")
+             row.menu("INFO_MT_edit_armature_add", text="Add")
  
          if gp_edit:
-             layout.menu("VIEW3D_MT_edit_gpencil")
+             row.menu("VIEW3D_MT_edit_gpencil")
          elif edit_object:
-             layout.menu("VIEW3D_MT_edit_%s" % edit_object.type.lower())
+             row.menu("VIEW3D_MT_edit_%s" % edit_object.type.lower())
  
              if mode_string == 'EDIT_MESH':
-                 layout.menu("VIEW3D_MT_edit_mesh_vertices")
-                 layout.menu("VIEW3D_MT_edit_mesh_edges")
-                 layout.menu("VIEW3D_MT_edit_mesh_faces")
+                 row.menu("VIEW3D_MT_edit_mesh_vertices")
+                 row.menu("VIEW3D_MT_edit_mesh_edges")
+                 row.menu("VIEW3D_MT_edit_mesh_faces")
  
          elif obj:
              if mode_string != 'PAINT_TEXTURE':
diff --cc source/blender/blenkernel/intern/object_update.c
index 33f4748594e,c1bda070bd8..90fb2ca77f1
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@@ -57,11 -62,6 +62,7 @@@
  #include "BKE_particle.h"
  #include "BKE_pointcache.h"
  #include "BKE_scene.h"
- #include "BKE_material.h"
- #include "BKE_mball.h"
- #include "BKE_mesh.h"
- #include "BKE_image.h"
 +#include "BKE_groom.h"
  
  #include "MEM_guardedalloc.h"
  
diff --cc source/blender/draw/engines/eevee/eevee_engine.c
index a2c339784d8,d7c6684f086..5426fee848e
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@@ -142,7 -142,7 +142,7 @@@ static void eevee_cache_populate(void *
  	}
  
  	if (DRW_check_object_visible_within_active_context(ob)) {
- 		if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_GROOM)) {
 -		if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) {
++		if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL, OB_GROOM)) {
  			EEVEE_materials_cache_populate(vedata, sldata, ob, &cast_shadow);
  		}
  		else if (!USE_SCENE_LIGHT(draw_ctx->v3d)) {
diff --cc source/blender/draw/engines/eevee/eevee_render.c
index ac3ee74eaf6,d24551976f9..ffcac8e846f
--- a/source/blender/draw/engines/eevee/eevee_render.c
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@@ -150,7 -150,7 +150,7 @@@ void EEVEE_render_cache
  	}
  
  	if (DRW_check_object_visible_within_active_context(ob)) {
- 		if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_GROOM)) {
 -		if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) {
++		if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL, OB_GROOM)) {
  			EEVEE_materials_cache_populate(vedata, sldata, ob, &cast_shadow);
  		}
  		else if (ob->type == OB_LIGHTPROBE) {
diff --cc source/blender/draw/engines/workbench/workbench_deferred.c
index 827787a26e9,f32060bd64f..e8c05488399
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@@ -666,48 -646,6 +648,48 @@@ 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;
 +		}
 +	}
 +	
 +	WORKBENCH_MaterialData *material = get_or_create_material_data(vedata, ob, mat, image, mat_drawtype);
 +	struct GPUShader *shader = (mat_drawtype == OB_SOLID)
 +	                           ? 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, false, false);
++		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 c01ad9f6032,9a362440877..df800b72bfb
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@@ -527,61 -459,6 +461,61 @@@ 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;
 +	
 +	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)
 +	        ? 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, false, false);
++		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;



More information about the Bf-blender-cvs mailing list