Merge
This commit is contained in:
parent
7705166438
commit
73accfecca
|
@ -859,6 +859,10 @@ typedef struct SculptSession {
|
|||
float pivot_rot[4];
|
||||
float pivot_scale[3];
|
||||
|
||||
float prev_pivot_pos[3];
|
||||
float prev_pivot_rot[4];
|
||||
float prev_pivot_scale[3];
|
||||
|
||||
float init_pivot_pos[3];
|
||||
float init_pivot_rot[4];
|
||||
float init_pivot_scale[3];
|
||||
|
|
|
@ -589,8 +589,6 @@ void BM_mesh_bm_from_me(Object *ob,
|
|||
cd_shape_key_offset[i] = bm->vdata.layers[idx].offset;
|
||||
}
|
||||
|
||||
vtable = static_cast<BMVert**>(MEM_mallocN(sizeof(BMVert **) * me->totvert, __func__));
|
||||
|
||||
Span<MVert> mvert{me->mvert, me->totvert};
|
||||
Array<BMVert *> vtable(me->totvert);
|
||||
for (const int i : mvert.index_range()) {
|
||||
|
|
|
@ -212,7 +212,6 @@ set(SRC
|
|||
intern/draw_manager_profiling.h
|
||||
intern/draw_manager_testing.h
|
||||
intern/draw_manager_text.h
|
||||
intern/draw_shader_shared.h
|
||||
intern/draw_shader.h
|
||||
intern/draw_shader_shared.h
|
||||
intern/draw_subdivision.h
|
||||
|
@ -383,6 +382,7 @@ set(GLSL_SRC
|
|||
intern/shaders/common_hair_refine_comp.glsl
|
||||
intern/shaders/common_math_lib.glsl
|
||||
intern/shaders/common_math_geom_lib.glsl
|
||||
intern/shaders/common_view_clipping_lib.glsl
|
||||
intern/shaders/common_view_lib.glsl
|
||||
intern/shaders/common_fxaa_lib.glsl
|
||||
intern/shaders/common_smaa_lib.glsl
|
||||
|
|
|
@ -474,11 +474,11 @@ static void mesh_cd_calc_active_mask_uv_layer(const Object *object,
|
|||
}
|
||||
}
|
||||
|
||||
static bool mesh_cd_calc_active_vcol_layer(Mesh *me, DRW_MeshAttributes *attrs_used)
|
||||
static bool mesh_cd_calc_active_vcol_layer(Object *ob, Mesh *me, DRW_MeshAttributes *attrs_used)
|
||||
{
|
||||
CustomDataLayer *layer = BKE_id_attributes_active_get((ID *)me);
|
||||
|
||||
const Mesh *me_final = editmesh_final_or_this(me);
|
||||
const Mesh *me_final = editmesh_final_or_this(ob, me);
|
||||
const CustomData *cd_vdata = mesh_cd_vdata_get_from_mesh(me_final);
|
||||
const CustomData *cd_ldata = mesh_cd_ldata_get_from_mesh(me_final);
|
||||
|
||||
|
@ -1251,7 +1251,7 @@ static void sculpt_request_active_vcol(MeshBatchCache *cache, Object *object, Me
|
|||
const CustomData *cd_vdata = mesh_cd_vdata_get_from_mesh(me_final);
|
||||
const CustomData *cd_ldata = mesh_cd_ldata_get_from_mesh(me_final);
|
||||
|
||||
if (mesh_cd_calc_active_vcol_layer(me, &attrs_needed)) {
|
||||
if (mesh_cd_calc_active_vcol_layer(object, me, &attrs_needed)) {
|
||||
int active = mesh_cd_get_active_color_i(me_final, cd_vdata, cd_ldata);
|
||||
int render = mesh_cd_get_render_color_i(me_final, cd_vdata, cd_ldata);
|
||||
|
||||
|
|
|
@ -4467,7 +4467,6 @@ static void project_paint_begin(const bContext *C,
|
|||
/* At the moment this is just ps->arena_mt[0], but use this to show were not multi-threading. */
|
||||
MemArena *arena;
|
||||
|
||||
Object *ob = CTX_data_active_object(C);
|
||||
bool use_brush_channels = paint_use_channels(C);
|
||||
|
||||
const int diameter = 2 * BKE_brush_size_get(ps->scene, ps->brush, use_brush_channels);
|
||||
|
|
|
@ -679,8 +679,6 @@ static int curvemapping_preset_get_path(
|
|||
|
||||
static int curvemapping_preset_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Brush *br = BKE_paint_brush(BKE_paint_get_active_from_context(C));
|
||||
|
||||
PointerRNA ctx_ptr;
|
||||
RNA_pointer_create(NULL, &RNA_Context, C, &ctx_ptr);
|
||||
|
||||
|
|
|
@ -1483,7 +1483,7 @@ static void smooth_brush_toggle_on(const bContext *C, Paint *paint, StrokeCache
|
|||
{
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
Brush *brush = paint->brush;
|
||||
int cur_brush_size = BKE_brush_size_get(scene, brush);
|
||||
int cur_brush_size = BKE_brush_size_get(scene, brush, false);
|
||||
|
||||
BLI_strncpy(
|
||||
cache->saved_active_brush_name, brush->id.name + 2, sizeof(cache->saved_active_brush_name));
|
||||
|
@ -1492,8 +1492,8 @@ static void smooth_brush_toggle_on(const bContext *C, Paint *paint, StrokeCache
|
|||
brush = BKE_paint_toolslots_brush_get(paint, WPAINT_TOOL_BLUR);
|
||||
if (brush) {
|
||||
BKE_paint_brush_set(paint, brush);
|
||||
cache->saved_smooth_size = BKE_brush_size_get(scene, brush);
|
||||
BKE_brush_size_set(scene, brush, cur_brush_size);
|
||||
cache->saved_smooth_size = BKE_brush_size_get(scene, brush, false);
|
||||
BKE_brush_size_set(scene, brush, cur_brush_size, false);
|
||||
BKE_curvemapping_init(brush->curve);
|
||||
}
|
||||
}
|
||||
|
@ -1507,7 +1507,7 @@ static void smooth_brush_toggle_off(const bContext *C, Paint *paint, StrokeCache
|
|||
BLI_assert(brush == cache->brush);
|
||||
|
||||
/* Try to switch back to the saved/previous brush. */
|
||||
BKE_brush_size_set(scene, brush, cache->saved_smooth_size);
|
||||
BKE_brush_size_set(scene, brush, cache->saved_smooth_size, false);
|
||||
brush = (Brush *)BKE_libblock_find_name(bmain, ID_BR, cache->saved_active_brush_name);
|
||||
if (brush) {
|
||||
BKE_paint_brush_set(paint, brush);
|
||||
|
@ -1521,10 +1521,6 @@ static void vwpaint_update_cache_invariants(
|
|||
StrokeCache *cache;
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
UnifiedPaintSettings *ups = &CTX_data_tool_settings(C)->unified_paint_settings;
|
||||
<<<<<<< HEAD
|
||||
Brush *brush = vp->paint.brush;
|
||||
=======
|
||||
>>>>>>> master
|
||||
ViewContext *vc = paint_stroke_view_context(op->customdata);
|
||||
Object *ob = CTX_data_active_object(C);
|
||||
float mat[3][3];
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -74,21 +74,16 @@ void ED_sculpt_init_transform(struct bContext *C, Object *ob)
|
|||
copy_v4_v4(ss->init_pivot_rot, ss->pivot_rot);
|
||||
copy_v3_v3(ss->init_pivot_scale, ss->pivot_scale);
|
||||
|
||||
<<<<<<< HEAD
|
||||
copy_v3_v3(ss->prev_pivot_pos, ss->pivot_pos);
|
||||
copy_v4_v4(ss->prev_pivot_rot, ss->pivot_rot);
|
||||
copy_v3_v3(ss->prev_pivot_scale, ss->pivot_scale);
|
||||
=======
|
||||
SCULPT_undo_push_begin(ob, "Transform");
|
||||
BKE_sculpt_update_object_for_edit(depsgraph, ob, false, false, false);
|
||||
|
||||
>>>>>>> master
|
||||
ss->pivot_rot[3] = 1.0f;
|
||||
|
||||
BKE_sculpt_update_object_for_edit(depsgraph, ob, false, false, false);
|
||||
|
||||
SCULPT_undo_push_begin(ob, "Transform");
|
||||
SCULPT_vertex_random_access_ensure(ss);
|
||||
SCULPT_filter_cache_init(C, ob, sd, SCULPT_UNDO_COORDS);
|
||||
<<<<<<< HEAD
|
||||
|
||||
switch (sd->transform_deform_target) {
|
||||
case SCULPT_TRANSFORM_DEFORM_TARGET_GEOMETRY:
|
||||
|
@ -118,12 +113,11 @@ void ED_sculpt_init_transform(struct bContext *C, Object *ob)
|
|||
else {
|
||||
ss->filter_cache->transform_displacement_mode = SCULPT_TRANSFORM_DISPLACEMENT_ORIGINAL;
|
||||
}
|
||||
=======
|
||||
>>>>>>> master
|
||||
}
|
||||
|
||||
static void sculpt_transform_matrices_init(SculptSession *ss,
|
||||
const char symm,
|
||||
const SculptTransformDisplacementMode t_mode,
|
||||
float r_transform_mats[8][4][4])
|
||||
{
|
||||
|
||||
|
@ -132,9 +126,19 @@ static void sculpt_transform_matrices_init(SculptSession *ss,
|
|||
transform_mat[4][4];
|
||||
|
||||
float start_pivot_pos[3], start_pivot_rot[4], start_pivot_scale[3];
|
||||
copy_v3_v3(start_pivot_pos, ss->init_pivot_pos);
|
||||
copy_v4_v4(start_pivot_rot, ss->init_pivot_rot);
|
||||
copy_v3_v3(start_pivot_scale, ss->init_pivot_scale);
|
||||
|
||||
switch (t_mode) {
|
||||
case SCULPT_TRANSFORM_DISPLACEMENT_ORIGINAL:
|
||||
copy_v3_v3(start_pivot_pos, ss->init_pivot_pos);
|
||||
copy_v4_v4(start_pivot_rot, ss->init_pivot_rot);
|
||||
copy_v3_v3(start_pivot_scale, ss->init_pivot_scale);
|
||||
break;
|
||||
case SCULPT_TRANSFORM_DISPLACEMENT_INCREMENTAL:
|
||||
copy_v3_v3(start_pivot_pos, ss->prev_pivot_pos);
|
||||
copy_v4_v4(start_pivot_rot, ss->prev_pivot_rot);
|
||||
copy_v3_v3(start_pivot_scale, ss->prev_pivot_scale);
|
||||
break;
|
||||
}
|
||||
|
||||
for (int i = 0; i < PAINT_SYMM_AREAS; i++) {
|
||||
ePaintSymmetryAreas v_symm = i;
|
||||
|
@ -194,15 +198,24 @@ static void sculpt_transform_task_cb(void *__restrict userdata,
|
|||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, vd.vertex);
|
||||
float transformed_co[3], orig_co[3], disp[3];
|
||||
float *start_co;
|
||||
float fade = vd.mask ? *vd.mask : 0.0f;
|
||||
copy_v3_v3(orig_co, orig_data.co);
|
||||
char symm_area = SCULPT_get_vertex_symm_area(orig_co);
|
||||
|
||||
copy_v3_v3(transformed_co, orig_co);
|
||||
switch (ss->filter_cache->transform_displacement_mode) {
|
||||
case SCULPT_TRANSFORM_DISPLACEMENT_ORIGINAL:
|
||||
start_co = orig_co;
|
||||
break;
|
||||
case SCULPT_TRANSFORM_DISPLACEMENT_INCREMENTAL:
|
||||
start_co = vd.co;
|
||||
break;
|
||||
}
|
||||
|
||||
copy_v3_v3(transformed_co, start_co);
|
||||
mul_m4_v3(data->transform_mats[(int)symm_area], transformed_co);
|
||||
sub_v3_v3v3(disp, transformed_co, orig_co);
|
||||
sub_v3_v3v3(disp, transformed_co, start_co);
|
||||
mul_v3_fl(disp, 1.0f - fade);
|
||||
<<<<<<< HEAD
|
||||
|
||||
switch (data->sd->transform_deform_target) {
|
||||
case SCULPT_TRANSFORM_DEFORM_TARGET_GEOMETRY:
|
||||
|
@ -212,9 +225,6 @@ static void sculpt_transform_task_cb(void *__restrict userdata,
|
|||
add_v3_v3v3(ss->filter_cache->cloth_sim->pos[vd.index], start_co, disp);
|
||||
break;
|
||||
}
|
||||
=======
|
||||
add_v3_v3v3(vd.co, orig_co, disp);
|
||||
>>>>>>> master
|
||||
|
||||
if (vd.mvert) {
|
||||
vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
|
||||
|
@ -236,7 +246,8 @@ static void sculpt_transform_all_vertices(Sculpt *sd, Object *ob)
|
|||
.nodes = ss->filter_cache->nodes,
|
||||
};
|
||||
|
||||
sculpt_transform_matrices_init(ss, symm, data.transform_mats);
|
||||
sculpt_transform_matrices_init(
|
||||
ss, symm, ss->filter_cache->transform_displacement_mode, data.transform_mats);
|
||||
|
||||
/* Regular transform applies all symmetry passes at once as it is split by symmetry areas
|
||||
* (each vertex can only be transformed once by the transform matrix of its area). */
|
||||
|
@ -355,7 +366,6 @@ void ED_sculpt_update_modal_transform(struct bContext *C, Object *ob)
|
|||
}
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
copy_v3_v3(ss->prev_pivot_pos, ss->pivot_pos);
|
||||
copy_v4_v4(ss->prev_pivot_rot, ss->pivot_rot);
|
||||
copy_v3_v3(ss->prev_pivot_scale, ss->pivot_scale);
|
||||
|
@ -367,8 +377,6 @@ void ED_sculpt_update_modal_transform(struct bContext *C, Object *ob)
|
|||
sd, ob, ss->filter_cache->cloth_sim, ss->filter_cache->nodes, ss->filter_cache->totnode);
|
||||
}
|
||||
|
||||
=======
|
||||
>>>>>>> master
|
||||
if (ss->deform_modifiers_active || ss->shapekey_active) {
|
||||
SCULPT_flush_stroke_deform(sd, ob, true);
|
||||
}
|
||||
|
|
|
@ -1750,7 +1750,7 @@ static void lineart_geometry_object_load(LineartObjectInfo *obi, LineartRenderBu
|
|||
&((struct BMeshCreateParams){
|
||||
.use_toolflags = true,
|
||||
}));
|
||||
BM_mesh_bm_from_me(bm,
|
||||
BM_mesh_bm_from_me(NULL, bm,
|
||||
obi->original_me,
|
||||
&((struct BMeshFromMeshParams){
|
||||
.calc_face_normal = true,
|
||||
|
|
|
@ -324,10 +324,7 @@ set(GLSL_SRC
|
|||
shaders/material/gpu_shader_material_output_material.glsl
|
||||
shaders/material/gpu_shader_material_output_world.glsl
|
||||
shaders/material/gpu_shader_material_particle_info.glsl
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
shaders/material/gpu_shader_material_point_info.glsl
|
||||
>>>>>>> master
|
||||
shaders/material/gpu_shader_material_principled.glsl
|
||||
shaders/material/gpu_shader_material_refraction.glsl
|
||||
shaders/material/gpu_shader_material_rgb_curves.glsl
|
||||
|
@ -397,11 +394,7 @@ set(GLSL_SOURCE_CONTENT "")
|
|||
foreach(GLSL_FILE ${GLSL_SRC})
|
||||
get_filename_component(GLSL_FILE_NAME ${GLSL_FILE} NAME)
|
||||
string(REPLACE "." "_" GLSL_FILE_NAME_UNDERSCORES ${GLSL_FILE_NAME})
|
||||
<<<<<<< HEAD
|
||||
string(APPEND GLSL_SOURCE_CONTENT "SHADER_SOURCE\(datatoc_${GLSL_FILE_NAME_UNDERSCORES}, \"${GLSL_FILE_NAME}\"\)\n")
|
||||
=======
|
||||
string(APPEND GLSL_SOURCE_CONTENT "SHADER_SOURCE\(datatoc_${GLSL_FILE_NAME_UNDERSCORES}, \"${GLSL_FILE_NAME}\", \"${GLSL_FILE}\"\)\n")
|
||||
>>>>>>> master
|
||||
endforeach()
|
||||
|
||||
set(glsl_source_list_file "${CMAKE_CURRENT_BINARY_DIR}/glsl_gpu_source_list.h")
|
||||
|
@ -410,45 +403,6 @@ list(APPEND SRC ${glsl_source_list_file})
|
|||
list(APPEND INC ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
set(SHADER_CREATE_INFOS
|
||||
<<<<<<< HEAD
|
||||
#../draw/engines/workbench/shaders/workbench_effect_cavity_info.hh
|
||||
#../draw/engines/workbench/shaders/workbench_prepass_info.hh
|
||||
../draw/intern/shaders/draw_fullscreen_info.hh
|
||||
../draw/intern/shaders/draw_view_info.hh
|
||||
../draw/intern/shaders/draw_object_infos_info.hh
|
||||
|
||||
shaders/infos/gpu_clip_planes_info.hh
|
||||
shaders/infos/gpu_srgb_to_framebuffer_space_info.hh
|
||||
shaders/infos/gpu_shader_3D_image_modulate_alpha_info.hh
|
||||
shaders/infos/gpu_shader_2D_checker_info.hh
|
||||
shaders/infos/gpu_shader_2D_diag_stripes_info.hh
|
||||
shaders/infos/gpu_shader_2D_uniform_color_info.hh
|
||||
shaders/infos/gpu_shader_2D_flat_color_info.hh
|
||||
shaders/infos/gpu_shader_2D_smooth_color_info.hh
|
||||
shaders/infos/gpu_shader_2D_image_overlays_merge_info.hh
|
||||
shaders/infos/gpu_shader_2D_image_overlays_stereo_merge_info.hh
|
||||
shaders/infos/gpu_shader_2D_image_info.hh
|
||||
shaders/infos/gpu_shader_2D_image_color_info.hh
|
||||
shaders/infos/gpu_shader_2D_image_desaturate_color_info.hh
|
||||
shaders/infos/gpu_shader_2D_image_shuffle_color_info.hh
|
||||
shaders/infos/gpu_shader_2D_image_rect_color_info.hh
|
||||
shaders/infos/gpu_shader_text_info.hh
|
||||
shaders/infos/gpu_shader_keyframe_shape_info.hh
|
||||
shaders/infos/gpu_shader_3D_flat_color_info.hh
|
||||
shaders/infos/gpu_shader_3D_uniform_color_info.hh
|
||||
shaders/infos/gpu_shader_3D_smooth_color_info.hh
|
||||
shaders/infos/gpu_shader_3D_depth_only_info.hh
|
||||
shaders/infos/gpu_shader_2D_point_varying_size_varying_color_info.hh
|
||||
shaders/infos/gpu_shader_2D_point_uniform_size_uniform_color_aa_info.hh
|
||||
shaders/infos/gpu_shader_2D_point_uniform_size_uniform_color_outline_aa_info.hh
|
||||
shaders/infos/gpu_shader_2D_area_borders_info.hh
|
||||
shaders/infos/gpu_shader_2D_image_multi_rect_color_info.hh
|
||||
shaders/infos/gpu_shader_instance_varying_color_varying_size_info.hh
|
||||
shaders/infos/gpu_shader_3D_point_info.hh
|
||||
shaders/infos/gpu_shader_2D_nodelink_info.hh
|
||||
shaders/infos/gpu_shader_gpencil_stroke_info.hh
|
||||
shaders/infos/gpu_shader_simple_lighting_info.hh
|
||||
=======
|
||||
../draw/engines/workbench/shaders/infos/workbench_composite_info.hh
|
||||
../draw/engines/workbench/shaders/infos/workbench_effect_antialiasing_info.hh
|
||||
../draw/engines/workbench/shaders/infos/workbench_effect_cavity_info.hh
|
||||
|
@ -496,16 +450,11 @@ shaders/infos/gpu_shader_simple_lighting_info.hh
|
|||
shaders/infos/gpu_shader_simple_lighting_info.hh
|
||||
shaders/infos/gpu_shader_text_info.hh
|
||||
shaders/infos/gpu_srgb_to_framebuffer_space_info.hh
|
||||
>>>>>>> master
|
||||
)
|
||||
|
||||
set(SHADER_CREATE_INFOS_CONTENT "")
|
||||
foreach(DESCRIPTOR_FILE ${SHADER_CREATE_INFOS})
|
||||
<<<<<<< HEAD
|
||||
string(APPEND SHADER_CREATE_INFOS_CONTENT "#include \"${DESCRIPTOR_FILE}\"\n")
|
||||
=======
|
||||
string(APPEND SHADER_CREATE_INFOS_CONTENT "#include \"${DESCRIPTOR_FILE}\"\n")
|
||||
>>>>>>> master
|
||||
endforeach()
|
||||
|
||||
set(shader_create_info_list_file "${CMAKE_CURRENT_BINARY_DIR}/gpu_shader_create_info_list.hh")
|
||||
|
|
|
@ -69,10 +69,7 @@ GPUShader *GPU_shader_create_ex(const char *vertcode,
|
|||
int tf_count,
|
||||
const char *shname);
|
||||
GPUShader *GPU_shader_create_from_info(const GPUShaderCreateInfo *_info);
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
GPUShader *GPU_shader_create_from_info_name(const char *info_name);
|
||||
>>>>>>> master
|
||||
|
||||
struct GPU_ShaderCreateFromArray_Params {
|
||||
const char **vert, **geom, **frag, **defs;
|
||||
|
|
|
@ -937,6 +937,40 @@ static void read_vertex_creases(Mesh *mesh,
|
|||
mesh->cd_flag |= ME_CDFLAG_VERT_CREASE;
|
||||
}
|
||||
|
||||
static void read_edge_creases(Mesh *mesh,
|
||||
const Int32ArraySamplePtr &indices,
|
||||
const FloatArraySamplePtr &sharpnesses)
|
||||
{
|
||||
if (!(indices && sharpnesses)) {
|
||||
return;
|
||||
}
|
||||
|
||||
MEdge *edges = mesh->medge;
|
||||
int totedge = mesh->totedge;
|
||||
|
||||
for (int i = 0, s = 0, e = indices->size(); i < e; i += 2, s++) {
|
||||
int v1 = (*indices)[i];
|
||||
int v2 = (*indices)[i + 1];
|
||||
|
||||
if (v2 < v1) {
|
||||
/* It appears to be common to store edges with the smallest index first, in which case this
|
||||
* prevents us from doing the second search below. */
|
||||
std::swap(v1, v2);
|
||||
}
|
||||
|
||||
MEdge *edge = find_edge(edges, totedge, v1, v2);
|
||||
if (edge == nullptr) {
|
||||
edge = find_edge(edges, totedge, v2, v1);
|
||||
}
|
||||
|
||||
if (edge) {
|
||||
edge->crease = unit_float_to_uchar_clamp((*sharpnesses)[s]);
|
||||
}
|
||||
}
|
||||
|
||||
mesh->cd_flag |= ME_CDFLAG_EDGE_CREASE;
|
||||
}
|
||||
|
||||
/* ************************************************************************** */
|
||||
|
||||
AbcSubDReader::AbcSubDReader(const IObject &object, ImportSettings &settings)
|
||||
|
@ -1004,8 +1038,6 @@ void AbcSubDReader::readObjectData(Main *bmain, const Alembic::Abc::ISampleSelec
|
|||
|
||||
read_vertex_creases(mesh, sample.getCornerIndices(), sample.getCornerSharpnesses());
|
||||
|
||||
read_vertex_creases(mesh, sample.getCornerIndices(), sample.getCornerSharpnesses());
|
||||
|
||||
if (m_settings->validate_meshes) {
|
||||
BKE_mesh_validate(mesh, false, false);
|
||||
}
|
||||
|
|
|
@ -668,7 +668,7 @@ typedef struct UserDef_Experimental {
|
|||
char use_override_templates;
|
||||
|
||||
char use_sculpt_uvsmooth;
|
||||
char _pad[1];
|
||||
|
||||
/** `makesdna` does not allow empty structs. */
|
||||
} UserDef_Experimental;
|
||||
|
||||
|
|
|
@ -58,8 +58,15 @@ static Mesh *triangulate_mesh_selection(const Mesh &mesh,
|
|||
CustomData_MeshMasks cd_mask_extra = {
|
||||
CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX, 0, CD_MASK_ORIGINDEX};
|
||||
BMeshCreateParams create_params{0};
|
||||
BMeshFromMeshParams from_mesh_params{true, 1, 1, 1, cd_mask_extra};
|
||||
BMesh *bm = BKE_mesh_to_bmesh_ex(&mesh, &create_params, &from_mesh_params);
|
||||
BMeshFromMeshParams from_mesh_params{0};
|
||||
//{true, 1, 1, 1, cd_mask_extra};
|
||||
|
||||
from_mesh_params.create_shapekey_layers = true;
|
||||
from_mesh_params.calc_face_normal = true;
|
||||
from_mesh_params.add_key_index = true;
|
||||
from_mesh_params.cd_mask_extra = cd_mask_extra;
|
||||
|
||||
BMesh *bm = BKE_mesh_to_bmesh_ex(nullptr, &mesh, &create_params, &from_mesh_params);
|
||||
|
||||
/* Tag faces to be triangulated from the selection mask. */
|
||||
BM_mesh_elem_table_ensure(bm, BM_FACE);
|
||||
|
|
Loading…
Reference in New Issue