This commit is contained in:
Joseph Eagar 2022-01-31 09:23:44 -08:00
parent 7705166438
commit 73accfecca
15 changed files with 1114 additions and 340 deletions

View File

@ -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];

View File

@ -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()) {

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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);
}

View File

@ -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,

View File

@ -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")

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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);