[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