UI: IDSearch Image Thumbnail Tooltips #118945

Merged
Harley Acheson merged 23 commits from Harley/blender:IDSearchImageThumbs into main 2024-06-08 22:42:09 +02:00
762 changed files with 5141 additions and 5139 deletions
Showing only changes of commit 4573ff4bc4 - Show all commits

View File

@ -136,8 +136,9 @@ class MESH_UL_vgroups_slow(bpy.types.UIList):
def filter_items(self, context, data, propname):
# This function gets the collection property (as the usual tuple (data, propname)), and must return two lists:
# * The first one is for filtering, it must contain 32bit integers were self.bitflag_filter_item marks the
# matching item as filtered (i.e. to be shown), and 31 other bits are free for custom needs. Here we use the
# first one to mark VGROUP_EMPTY.
# matching item as filtered (i.e. to be shown). The upper 16 bits (including self.bitflag_filter_item) are
# reserved for internal use, the lower 16 bits are free for custom use. Here we use the first bit to mark
# VGROUP_EMPTY.
# * The second one is for reordering, it must return a list containing the new indices of the items (which
# gives us a mapping org_idx -> new_idx).
# Please note that the default UI_UL_list defines helper functions for common tasks (see its doc for more info).

View File

@ -67,10 +67,16 @@ dl dt {
dl.field-list {
display: grid;
grid-template-columns: auto minmax(80%, 95%);
}
p {
margin-bottom: 0;
}
dl.field-list > dd > p:last-child {
margin-bottom: 0;
}
@media (max-width: calc(67em / 2)) {
dl.field-list {
grid-template-columns: unset;
}
}
/* TABLE & FIGURE */
@ -94,6 +100,12 @@ figcaption {
}
}
/* Allow horizontal lists to collapse on narrow screens */
.hlist tr {
display: flex;
flex-flow: row wrap;
}
/* End TABLE & FIGURE. */
/* Force admonition to span the full width if close to a figure */
@ -141,6 +153,11 @@ a {
text-decoration: none;
}
/* Break long code references onto a second line */
a > code.docutils {
overflow-wrap: anywhere;
}
/* Quotes for Fig. "link". */
a[href^="#fig-"]::before {
content: "\201c";

View File

@ -2,11 +2,11 @@
*
* SPDX-License-Identifier: Apache-2.0 */
#include "GPU_context.h"
#include "GPU_immediate.h"
#include "GPU_shader.h"
#include "GPU_state.h"
#include "GPU_texture.h"
#include "GPU_context.hh"
#include "GPU_immediate.hh"
#include "GPU_shader.hh"
#include "GPU_state.hh"
#include "GPU_texture.hh"
#include "RE_engine.h"

View File

@ -26,7 +26,7 @@
#include "util/tbb.h"
#include "util/types.h"
#include "GPU_state.h"
#include "GPU_state.hh"
#ifdef WITH_OSL
# include "scene/osl.h"

View File

@ -40,9 +40,9 @@
#include "WindowData.h"
/* GPU API. */
#include "GPU_context.h"
#include "GPU_immediate.h"
#include "GPU_init_exit.h"
#include "GPU_context.hh"
#include "GPU_immediate.hh"
#include "GPU_init_exit.hh"
extern int datatoc_bfont_ttf_size;
extern char const datatoc_bfont_ttf[];

View File

@ -19,8 +19,8 @@
# pragma warning(pop)
#endif
#include "GPU_immediate.h"
#include "GPU_shader.h"
#include "GPU_immediate.hh"
#include "GPU_shader.hh"
#include "GPU_uniform_buffer.hh"
#include "gpu_shader_create_info.hh"

View File

@ -3,7 +3,7 @@
* SPDX-License-Identifier: GPL-2.0-or-later */
#ifndef GPU_SHADER
# include "GPU_shader_shared_utils.h"
# include "GPU_shader_shared_utils.hh"
#endif
struct OCIO_GPUCurveMappingParameters {

Binary file not shown.

View File

@ -16,7 +16,7 @@
#include "BKE_blender_version.h"
#include "GPU_platform.h"
#include "GPU_platform_backend_enum.h"
#include "BLO_userdef_default.h" /* own include */

View File

@ -739,7 +739,7 @@ def user_resource(resource_type, *, path="", create=False):
"""
Return a user resource path (normally from the users home directory).
:arg type: Resource type in ['DATAFILES', 'CONFIG', 'SCRIPTS', 'AUTOSAVE'].
:arg type: Resource type in ['DATAFILES', 'CONFIG', 'SCRIPTS', 'EXTENSIONS'].
:type type: string
:arg path: Optional subdirectory.
:type path: string

View File

@ -88,11 +88,13 @@ url_manual_mapping = (
("bpy.types.brushcurvessculptsettings.density_add_attempts*", "sculpt_paint/curves_sculpting/tools/density_curves.html#bpy-types-brushcurvessculptsettings-density-add-attempts"),
("bpy.types.brushgpencilsettings.use_random_press_strength*", "grease_pencil/modes/draw/tools/draw.html#bpy-types-brushgpencilsettings-use-random-press-strength"),
("bpy.types.cyclesmaterialsettings.use_bump_map_correction*", "render/cycles/material_settings.html#bpy-types-cyclesmaterialsettings-use-bump-map-correction"),
("bpy.types.cyclesrendersettings.preview_denoising_use_gpu*", "render/cycles/render_settings/sampling.html#bpy-types-cyclesrendersettings-preview-denoising-use-gpu"),
("bpy.types.fluiddomainsettings.use_collision_border_front*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-use-collision-border-front"),
("bpy.types.fluiddomainsettings.use_collision_border_right*", "physics/fluid/type/domain/settings.html#bpy-types-fluiddomainsettings-use-collision-border-right"),
("bpy.types.lineartgpencilmodifier.shadow_region_filtering*", "grease_pencil/modifiers/generate/line_art.html#bpy-types-lineartgpencilmodifier-shadow-region-filtering"),
("bpy.types.preferencesedit.collection_instance_empty_size*", "editors/preferences/editing.html#bpy-types-preferencesedit-collection-instance-empty-size"),
("bpy.types.sequencertimelineoverlay.waveform_display_type*", "editors/video_sequencer/sequencer/display.html#bpy-types-sequencertimelineoverlay-waveform-display-type"),
("bpy.types.unifiedpaintsettings.use_unified_input_samples*", "sculpt_paint/brush/stroke.html#bpy-types-unifiedpaintsettings-use-unified-input-samples"),
("bpy.types.view3doverlay.use_normals_constant_screen_size*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-use-normals-constant-screen-size"),
("bpy.types.brushgpencilsettings.random_saturation_factor*", "grease_pencil/modes/draw/tools/draw.html#bpy-types-brushgpencilsettings-random-saturation-factor"),
("bpy.types.brushgpencilsettings.use_settings_postprocess*", "grease_pencil/modes/draw/tools/draw.html#bpy-types-brushgpencilsettings-use-settings-postprocess"),
@ -228,6 +230,7 @@ url_manual_mapping = (
("bpy.types.cyclesrendersettings.adaptive_min_samples*", "render/cycles/render_settings/sampling.html#bpy-types-cyclesrendersettings-adaptive-min-samples"),
("bpy.types.cyclesrendersettings.debug_bvh_time_steps*", "render/cycles/render_settings/performance.html#bpy-types-cyclesrendersettings-debug-bvh-time-steps"),
("bpy.types.cyclesrendersettings.distance_cull_margin*", "render/cycles/render_settings/simplify.html#bpy-types-cyclesrendersettings-distance-cull-margin"),
("bpy.types.cyclesrendersettings.motion_blur_position*", "render/cycles/render_settings/motion_blur.html#bpy-types-cyclesrendersettings-motion-blur-position"),
("bpy.types.cyclesrendersettings.rolling_shutter_type*", "render/cycles/render_settings/motion_blur.html#bpy-types-cyclesrendersettings-rolling-shutter-type"),
("bpy.types.cyclesrendersettings.transmission_bounces*", "render/cycles/render_settings/light_paths.html#bpy-types-cyclesrendersettings-transmission-bounces"),
("bpy.types.cyclesworldsettings.sample_map_resolution*", "render/cycles/world_settings.html#bpy-types-cyclesworldsettings-sample-map-resolution"),
@ -259,6 +262,7 @@ url_manual_mapping = (
("bpy.types.animvizmotionpaths.use_camera_space_bake*", "animation/motion_paths.html#bpy-types-animvizmotionpaths-use-camera-space-bake"),
("bpy.types.brush.cloth_constraint_softbody_strength*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-constraint-softbody-strength"),
("bpy.types.brush.elastic_deform_volume_preservation*", "sculpt_paint/sculpting/tools/elastic_deform.html#bpy-types-brush-elastic-deform-volume-preservation"),
("bpy.types.brush.use_automasking_boundary_face_sets*", "sculpt_paint/brush/brush_settings.html#bpy-types-brush-use-automasking-boundary-face-sets"),
("bpy.types.brushcurvessculptsettings.minimum_length*", "sculpt_paint/curves_sculpting/tools/grow_shrink_curves.html#bpy-types-brushcurvessculptsettings-minimum-length"),
("bpy.types.brushgpencilsettings.fill_simplify_level*", "grease_pencil/modes/draw/tools/fill.html#bpy-types-brushgpencilsettings-fill-simplify-level"),
("bpy.types.brushgpencilsettings.random_value_factor*", "grease_pencil/modes/draw/tools/draw.html#bpy-types-brushgpencilsettings-random-value-factor"),
@ -321,6 +325,7 @@ url_manual_mapping = (
("bpy.types.clothsettings.compression_stiffness_max*", "physics/cloth/settings/property_weights.html#bpy-types-clothsettings-compression-stiffness-max"),
("bpy.types.colormanagedsequencercolorspacesettings*", "render/color_management.html#bpy-types-colormanagedsequencercolorspacesettings"),
("bpy.types.colormanagedviewsettings.view_transform*", "render/color_management.html#bpy-types-colormanagedviewsettings-view-transform"),
("bpy.types.compositornodetree.use_groupnode_buffer*", "compositing/sidebar.html#bpy-types-compositornodetree-use-groupnode-buffer"),
("bpy.types.cyclesmaterialsettings.volume_step_rate*", "render/cycles/material_settings.html#bpy-types-cyclesmaterialsettings-volume-step-rate"),
("bpy.types.cyclesobjectsettings.is_caustics_caster*", "render/cycles/object_settings/object_data.html#bpy-types-cyclesobjectsettings-is-caustics-caster"),
("bpy.types.cyclesrendersettings.adaptive_threshold*", "render/cycles/render_settings/sampling.html#bpy-types-cyclesrendersettings-adaptive-threshold"),
@ -391,6 +396,7 @@ url_manual_mapping = (
("bpy.types.cyclesobjectsettings.use_deform_motion*", "render/cycles/object_settings/object_data.html#bpy-types-cyclesobjectsettings-use-deform-motion"),
("bpy.types.cyclesobjectsettings.use_distance_cull*", "render/cycles/object_settings/object_data.html#bpy-types-cyclesobjectsettings-use-distance-cull"),
("bpy.types.cyclesrendersettings.ao_bounces_render*", "render/cycles/render_settings/light_paths.html#bpy-types-cyclesrendersettings-ao-bounces-render"),
("bpy.types.cyclesrendersettings.denoising_use_gpu*", "render/cycles/render_settings/sampling.html#bpy-types-cyclesrendersettings-denoising-use-gpu"),
("bpy.types.cyclesrendersettings.min_light_bounces*", "render/cycles/render_settings/sampling.html#bpy-types-cyclesrendersettings-min-light-bounces"),
("bpy.types.cyclesrendersettings.pixel_filter_type*", "render/cycles/render_settings/film.html#bpy-types-cyclesrendersettings-pixel-filter-type"),
("bpy.types.cyclesrendersettings.use_animated_seed*", "render/cycles/render_settings/sampling.html#bpy-types-cyclesrendersettings-use-animated-seed"),
@ -445,11 +451,12 @@ url_manual_mapping = (
("bpy.types.toolsettings.use_snap_uv_grid_absolute*", "editors/uv/controls/snapping.html#bpy-types-toolsettings-use-snap-uv-grid-absolute"),
("bpy.types.toolsettings.use_transform_data_origin*", "scene_layout/object/tools/tool_settings.html#bpy-types-toolsettings-use-transform-data-origin"),
("bpy.types.view3doverlay.sculpt_mode_mask_opacity*", "sculpt_paint/sculpting/editing/mask.html#bpy-types-view3doverlay-sculpt-mode-mask-opacity"),
("bpy.types.view3doverlay.viewer_attribute_opacity*", "modeling/geometry_nodes/output/viewer.html#bpy-types-view3doverlay-viewer-attribute-opacity"),
("bpy.types.view3doverlay.viewer_attribute_opacity*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-viewer-attribute-opacity"),
("bpy.ops.mesh.customdata_custom_splitnormals_add*", "modeling/meshes/properties/custom_data.html#bpy-ops-mesh-customdata-custom-splitnormals-add"),
("bpy.ops.outliner.collection_indirect_only_clear*", "render/layers/introduction.html#bpy-ops-outliner-collection-indirect-only-clear"),
("bpy.ops.sequencer.retiming_add_transition_slide*", "video_editing/edit/montage/editing.html#bpy-ops-sequencer-retiming-add-transition-slide"),
("bpy.types.animvizmotionpaths.show_frame_numbers*", "animation/motion_paths.html#bpy-types-animvizmotionpaths-show-frame-numbers"),
("bpy.types.brush.use_automasking_cavity_inverted*", "sculpt_paint/brush/brush_settings.html#bpy-types-brush-use-automasking-cavity-inverted"),
("bpy.types.brushgpencilsettings.fill_extend_mode*", "grease_pencil/modes/draw/tools/fill.html#bpy-types-brushgpencilsettings-fill-extend-mode"),
("bpy.types.brushgpencilsettings.pen_smooth_steps*", "grease_pencil/modes/draw/tools/draw.html#bpy-types-brushgpencilsettings-pen-smooth-steps"),
("bpy.types.brushgpencilsettings.show_fill_extend*", "grease_pencil/modes/draw/tools/fill.html#bpy-types-brushgpencilsettings-show-fill-extend"),
@ -486,6 +493,8 @@ url_manual_mapping = (
("bpy.types.materialgpencilstyle.use_fill_holdout*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-use-fill-holdout"),
("bpy.types.materiallineart.intersection_priority*", "render/materials/line_art.html#bpy-types-materiallineart-intersection-priority"),
("bpy.types.movietrackingplanetrack.image_opacity*", "movie_clip/tracking/clip/sidebar/track/plane_track.html#bpy-types-movietrackingplanetrack-image-opacity"),
("bpy.types.nodetreeinterfacepanel.default_closed*", "interface/controls/nodes/groups.html#bpy-types-nodetreeinterfacepanel-default-closed"),
("bpy.types.nodetreeinterfacesocket.default_input*", "interface/controls/nodes/groups.html#bpy-types-nodetreeinterfacesocket-default-input"),
("bpy.types.particlesettings.use_parent_particles*", "physics/particles/emitter/render.html#bpy-types-particlesettings-use-parent-particles"),
("bpy.types.preferencesfilepaths.text_editor_args*", "editors/preferences/file_paths.html#bpy-types-preferencesfilepaths-text-editor-args"),
("bpy.types.preferencesfilepaths.use_filter_files*", "editors/preferences/save_load.html#bpy-types-preferencesfilepaths-use-filter-files"),
@ -521,6 +530,7 @@ url_manual_mapping = (
("bpy.ops.armature.rigify_apply_selection_colors*", "addons/rigging/rigify/metarigs.html#bpy-ops-armature-rigify-apply-selection-colors"),
("bpy.ops.ed.lib_id_generate_preview_from_object*", "editors/asset_browser.html#bpy-ops-ed-lib-id-generate-preview-from-object"),
("bpy.ops.paint.vertex_color_brightness_contrast*", "sculpt_paint/vertex_paint/editing.html#bpy-ops-paint-vertex-color-brightness-contrast"),
("bpy.types.brush.use_automasking_boundary_edges*", "sculpt_paint/brush/brush_settings.html#bpy-types-brush-use-automasking-boundary-edges"),
("bpy.types.brushcurvessculptsettings.add_amount*", "sculpt_paint/curves_sculpting/tools/add_curves.html#bpy-types-brushcurvessculptsettings-add-amount"),
("bpy.types.brushgpencilsettings.fill_layer_mode*", "grease_pencil/modes/draw/tools/fill.html#bpy-types-brushgpencilsettings-fill-layer-mode"),
("bpy.types.brushgpencilsettings.random_strength*", "grease_pencil/modes/draw/tools/draw.html#bpy-types-brushgpencilsettings-random-strength"),
@ -655,7 +665,6 @@ url_manual_mapping = (
("bpy.types.preferencesview.pie_initial_timeout*", "editors/preferences/interface.html#bpy-types-preferencesview-pie-initial-timeout"),
("bpy.types.preferencesview.render_display_type*", "editors/preferences/interface.html#bpy-types-preferencesview-render-display-type"),
("bpy.types.preferencesview.use_mouse_over_open*", "editors/preferences/interface.html#bpy-types-preferencesview-use-mouse-over-open"),
("bpy.types.rendersettings.motion_blur_position*", "render/cycles/render_settings/motion_blur.html#bpy-types-rendersettings-motion-blur-position"),
("bpy.types.rendersettings.sequencer_gl_preview*", "editors/video_sequencer/preview/sidebar.html#bpy-types-rendersettings-sequencer-gl-preview"),
("bpy.types.rendersettings.simplify_subdivision*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-subdivision"),
("bpy.types.rendersettings.use_simplify_normals*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-use-simplify-normals"),
@ -679,7 +688,7 @@ url_manual_mapping = (
("bpy.types.toolsettings.use_snap_time_absolute*", "editors/graph_editor/introduction.html#bpy-types-toolsettings-use-snap-time-absolute"),
("bpy.types.transformsequence.use_uniform_scale*", "video_editing/edit/montage/strips/effects/transform.html#bpy-types-transformsequence-use-uniform-scale"),
("bpy.types.view3doverlay.show_face_orientation*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-show-face-orientation"),
("bpy.types.view3doverlay.show_viewer_attribute*", "modeling/geometry_nodes/output/viewer.html#bpy-types-view3doverlay-show-viewer-attribute"),
("bpy.types.view3doverlay.show_viewer_attribute*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-show-viewer-attribute"),
("bpy.types.viewlayereevee.use_pass_transparent*", "render/layers/passes.html#bpy-types-viewlayereevee-use-pass-transparent"),
("bpy.ops.armature.copy_bone_color_to_selected*", "animation/armatures/bones/properties/display.html#bpy-ops-armature-copy-bone-color-to-selected"),
("bpy.ops.gpencil.bake_grease_pencil_animation*", "grease_pencil/animation/tools.html#bpy-ops-gpencil-bake-grease-pencil-animation"),
@ -690,6 +699,7 @@ url_manual_mapping = (
("bpy.ops.sequencer.retiming_segment_speed_set*", "video_editing/edit/montage/editing.html#bpy-ops-sequencer-retiming-segment-speed-set"),
("bpy.ops.view3d.edit_mesh_extrude_move_normal*", "modeling/meshes/editing/face/extrude_faces.html#bpy-ops-view3d-edit-mesh-extrude-move-normal"),
("bpy.types.bakesettings.use_pass_transmission*", "render/cycles/baking.html#bpy-types-bakesettings-use-pass-transmission"),
("bpy.types.brush.use_automasking_start_normal*", "sculpt_paint/brush/brush_settings.html#bpy-types-brush-use-automasking-start-normal"),
("bpy.types.brushgpencilsettings.input_samples*", "grease_pencil/modes/draw/tools/draw.html#bpy-types-brushgpencilsettings-input-samples"),
("bpy.types.clothsettings.use_internal_springs*", "physics/cloth/settings/physical_properties.html#bpy-types-clothsettings-use-internal-springs"),
("bpy.types.clothsettings.vertex_group_bending*", "physics/cloth/settings/property_weights.html#bpy-types-clothsettings-vertex-group-bending"),
@ -775,6 +785,7 @@ url_manual_mapping = (
("bpy.ops.geometry.color_attribute_render_set*", "modeling/meshes/properties/object_data.html#bpy-ops-geometry-color-attribute-render-set"),
("bpy.ops.object.geometry_nodes_move_to_nodes*", "modeling/modifiers/generate/geometry_nodes.html#bpy-ops-object-geometry-nodes-move-to-nodes"),
("bpy.ops.preferences.script_directory_remove*", "editors/preferences/file_paths.html#bpy-ops-preferences-script-directory-remove"),
("bpy.types.brush.use_automasking_view_normal*", "sculpt_paint/brush/brush_settings.html#bpy-types-brush-use-automasking-view-normal"),
("bpy.types.brushgpencilsettings.angle_factor*", "grease_pencil/modes/draw/tools/draw.html#bpy-types-brushgpencilsettings-angle-factor"),
("bpy.types.brushgpencilsettings.pen_strength*", "grease_pencil/modes/draw/tools/erase.html#bpy-types-brushgpencilsettings-pen-strength"),
("bpy.types.clothcollisionsettings.collection*", "physics/cloth/settings/collisions.html#bpy-types-clothcollisionsettings-collection"),
@ -1163,6 +1174,7 @@ url_manual_mapping = (
("bpy.types.toolsettings.vertex_group_user*", "editors/3dview/display/overlays.html#bpy-types-toolsettings-vertex-group-user"),
("bpy.types.userassetlibrary.import_method*", "editors/preferences/file_paths.html#bpy-types-userassetlibrary-import-method"),
("bpy.types.vertexpaint.use_group_restrict*", "sculpt_paint/weight_paint/tool_settings/options.html#bpy-types-vertexpaint-use-group-restrict"),
("bpy.types.view3doverlay.show_viewer_text*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-show-viewer-text"),
("bpy.types.volumedisplay.wireframe_detail*", "modeling/volumes/properties.html#bpy-types-volumedisplay-wireframe-detail"),
("bpy.types.windowmanager.asset_path_dummy*", "editors/asset_browser.html#bpy-types-windowmanager-asset-path-dummy"),
("bpy.ops.armature.rigify_add_bone_groups*", "addons/rigging/rigify/metarigs.html#bpy-ops-armature-rigify-add-bone-groups"),
@ -1197,6 +1209,8 @@ url_manual_mapping = (
("bpy.types.colormanagedviewsettings.look*", "render/color_management.html#bpy-types-colormanagedviewsettings-look"),
("bpy.types.compositornodecolorcorrection*", "compositing/types/color/adjust/color_correction.html#bpy-types-compositornodecolorcorrection"),
("bpy.types.compositornodemoviedistortion*", "compositing/types/transform/movie_distortion.html#bpy-types-compositornodemoviedistortion"),
("bpy.types.compositornodetree.chunk_size*", "compositing/sidebar.html#bpy-types-compositornodetree-chunk-size"),
("bpy.types.compositornodetree.use_opencl*", "compositing/sidebar.html#bpy-types-compositornodetree-use-opencl"),
("bpy.types.cyclesrendersettings.caustics*", "render/cycles/render_settings/light_paths.html#bpy-types-cyclesrendersettings-caustics"),
("bpy.types.cyclesrendersettings.denoiser*", "render/cycles/render_settings/sampling.html#bpy-types-cyclesrendersettings-denoiser"),
("bpy.types.editbone.use_inherit_rotation*", "animation/armatures/bones/properties/relations.html#bpy-types-editbone-use-inherit-rotation"),
@ -1220,6 +1234,7 @@ url_manual_mapping = (
("bpy.types.freestylelinestyle.sort_order*", "render/freestyle/view_layer/line_style/strokes.html#bpy-types-freestylelinestyle-sort-order"),
("bpy.types.freestylelinestyle.split_dash*", "render/freestyle/view_layer/line_style/strokes.html#bpy-types-freestylelinestyle-split-dash"),
("bpy.types.freestylesettings.use_culling*", "render/freestyle/view_layer/freestyle.html#bpy-types-freestylesettings-use-culling"),
("bpy.types.geometrynodebake.active_index*", "modeling/geometry_nodes/geometry/operations/bake.html#bpy-types-geometrynodebake-active-index"),
("bpy.types.geometrynodeduplicateelements*", "modeling/geometry_nodes/geometry/operations/duplicate_elements.html#bpy-types-geometrynodeduplicateelements"),
("bpy.types.geometrynodeedgepathstocurves*", "modeling/geometry_nodes/mesh/operations/edge_paths_to_curves.html#bpy-types-geometrynodeedgepathstocurves"),
("bpy.types.geometrynodeedgestofacegroups*", "modeling/geometry_nodes/mesh/read/edges_to_face_groups.html#bpy-types-geometrynodeedgestofacegroups"),
@ -1303,6 +1318,7 @@ url_manual_mapping = (
("bpy.types.bonecollection.rigify_ui_row*", "addons/rigging/rigify/metarigs.html#bpy-types-bonecollection-rigify-ui-row"),
("bpy.types.brush.pose_smooth_iterations*", "sculpt_paint/sculpting/tools/pose.html#bpy-types-brush-pose-smooth-iterations"),
("bpy.types.brush.snake_hook_deform_type*", "sculpt_paint/sculpting/tools/snake_hook.html#bpy-types-brush-snake-hook-deform-type"),
("bpy.types.brush.use_automasking_cavity*", "sculpt_paint/brush/brush_settings.html#bpy-types-brush-use-automasking-cavity"),
("bpy.types.brush.use_grab_active_vertex*", "sculpt_paint/sculpting/tools/grab.html#bpy-types-brush-use-grab-active-vertex"),
("bpy.types.brush.use_pose_lock_rotation*", "sculpt_paint/sculpting/tools/pose.html#bpy-types-brush-use-pose-lock-rotation"),
("bpy.types.clothsettings.rest_shape_key*", "physics/cloth/settings/shape.html#bpy-types-clothsettings-rest-shape-key"),
@ -1482,6 +1498,7 @@ url_manual_mapping = (
("bpy.types.object.visible_transmission*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-transmission"),
("bpy.types.particlesettingstextureslot*", "physics/particles/texture_influence.html#bpy-types-particlesettingstextureslot"),
("bpy.types.pointlight.shadow_soft_size*", "render/lights/light_object.html#bpy-types-pointlight-shadow-soft-size"),
("bpy.types.pointlight.use_soft_falloff*", "render/lights/light_object.html#bpy-types-pointlight-use-soft-falloff"),
("bpy.types.posebone.ik_rotation_weight*", "animation/armatures/posing/bone_constraints/inverse_kinematics/introduction.html#bpy-types-posebone-ik-rotation-weight"),
("bpy.types.preferencesedit.node_margin*", "editors/preferences/editing.html#bpy-types-preferencesedit-node-margin"),
("bpy.types.preferencesinput.tablet_api*", "editors/preferences/input.html#bpy-types-preferencesinput-tablet-api"),
@ -1529,7 +1546,7 @@ url_manual_mapping = (
("bpy.ops.mesh.normals_make_consistent*", "modeling/meshes/editing/mesh/normals.html#bpy-ops-mesh-normals-make-consistent"),
("bpy.ops.mesh.offset_edge_loops_slide*", "modeling/meshes/editing/edge/offset_edge_slide.html#bpy-ops-mesh-offset-edge-loops-slide"),
("bpy.ops.mesh.primitive_uv_sphere_add*", "modeling/meshes/primitives.html#bpy-ops-mesh-primitive-uv-sphere-add"),
("bpy.ops.object.curves_empty_hair_add*", "modeling/curves/primitives.html#bpy-ops-object-curves-empty-hair-add"),
("bpy.ops.object.curves_empty_hair_add*", "modeling/curves_new/primitives.html#bpy-ops-object-curves-empty-hair-add"),
("bpy.ops.object.duplicate_move_linked*", "scene_layout/object/editing/duplicate_linked.html#bpy-ops-object-duplicate-move-linked"),
("bpy.ops.object.make_override_library*", "files/linked_libraries/library_overrides.html#bpy-ops-object-make-override-library"),
("bpy.ops.object.parent_no_inverse_set*", "scene_layout/object/editing/parent.html#bpy-ops-object-parent-no-inverse-set"),
@ -1621,6 +1638,7 @@ url_manual_mapping = (
("bpy.types.spaceoutliner.filter_state*", "editors/outliner/interface.html#bpy-types-spaceoutliner-filter-state"),
("bpy.types.spaceuveditor.show_stretch*", "editors/uv/overlays.html#bpy-types-spaceuveditor-show-stretch"),
("bpy.types.spotlight.shadow_soft_size*", "render/lights/light_object.html#bpy-types-spotlight-shadow-soft-size"),
("bpy.types.spotlight.use_soft_falloff*", "render/lights/light_object.html#bpy-types-spotlight-use-soft-falloff"),
("bpy.types.textcurve.small_caps_scale*", "modeling/texts/properties.html#bpy-types-textcurve-small-caps-scale"),
("bpy.types.toolsettings.keyframe_type*", "editors/timeline.html#bpy-types-toolsettings-keyframe-type"),
("bpy.types.toolsettings.use_snap_anim*", "editors/graph_editor/introduction.html#bpy-types-toolsettings-use-snap-anim"),
@ -1637,7 +1655,7 @@ url_manual_mapping = (
("bpy.ops.armature.move_to_collection*", "animation/armatures/properties/bone_collections.html#bpy-ops-armature-move-to-collection"),
("bpy.ops.clip.tracking_object_remove*", "movie_clip/tracking/clip/sidebar/track/objects.html#bpy-ops-clip-tracking-object-remove"),
("bpy.ops.constraint.copy_to_selected*", "animation/constraints/interface/header.html#bpy-ops-constraint-copy-to-selected"),
("bpy.ops.curves.set_selection_domain*", "modeling/curves/primitives.html#bpy-ops-curves-set-selection-domain"),
("bpy.ops.curves.set_selection_domain*", "modeling/curves_new/selecting.html#bpy-ops-curves-set-selection-domain"),
("bpy.ops.gpencil.bake_mesh_animation*", "grease_pencil/animation/tools.html#bpy-ops-gpencil-bake-mesh-animation"),
("bpy.ops.gpencil.select_vertex_color*", "grease_pencil/selecting.html#bpy-ops-gpencil-select-vertex-color"),
("bpy.ops.gpencil.set_active_material*", "grease_pencil/modes/edit/stroke_menu.html#bpy-ops-gpencil-set-active-material"),
@ -1652,6 +1670,7 @@ url_manual_mapping = (
("bpy.ops.mesh.flip_quad_tessellation*", "modeling/meshes/editing/face/face_data.html#bpy-ops-mesh-flip-quad-tessellation"),
("bpy.ops.mesh.primitive_cylinder_add*", "modeling/meshes/primitives.html#bpy-ops-mesh-primitive-cylinder-add"),
("bpy.ops.mesh.set_normals_from_faces*", "modeling/meshes/editing/mesh/normals.html#bpy-ops-mesh-set-normals-from-faces"),
("bpy.ops.mesh.set_sharpness_by_angle*", "modeling/meshes/editing/edge/edge_data.html#bpy-ops-mesh-set-sharpness-by-angle"),
("bpy.ops.mesh.shape_propagate_to_all*", "modeling/meshes/editing/vertex/propagate_shapes.html#bpy-ops-mesh-shape-propagate-to-all"),
("bpy.ops.mesh.vert_connect_nonplanar*", "modeling/meshes/editing/mesh/cleanup.html#bpy-ops-mesh-vert-connect-nonplanar"),
("bpy.ops.object.duplicates_make_real*", "scene_layout/object/editing/apply.html#bpy-ops-object-duplicates-make-real"),
@ -1787,6 +1806,7 @@ url_manual_mapping = (
("bpy.ops.clip.lock_selection_toggle*", "editors/clip/introduction.html#bpy-ops-clip-lock-selection-toggle"),
("bpy.ops.ed.lib_id_generate_preview*", "editors/asset_browser.html#bpy-ops-ed-lib-id-generate-preview"),
("bpy.ops.geometry.attribute_convert*", "modeling/geometry_nodes/attributes_reference.html#bpy-ops-geometry-attribute-convert"),
("bpy.ops.mesh.customdata_mask_clear*", "modeling/meshes/properties/custom_data.html#bpy-ops-mesh-customdata-mask-clear"),
("bpy.ops.mesh.customdata_skin_clear*", "modeling/meshes/properties/custom_data.html#bpy-ops-mesh-customdata-skin-clear"),
("bpy.ops.mesh.extrude_vertices_move*", "modeling/meshes/editing/vertex/extrude_vertices.html#bpy-ops-mesh-extrude-vertices-move"),
("bpy.ops.mesh.mod_weighted_strength*", "modeling/meshes/editing/mesh/normals.html#bpy-ops-mesh-mod-weighted-strength"),
@ -1865,6 +1885,7 @@ url_manual_mapping = (
("bpy.types.geometrynoderepeatoutput*", "modeling/geometry_nodes/utilities/repeat_zone.html#bpy-types-geometrynoderepeatoutput"),
("bpy.types.geometrynodereversecurve*", "modeling/geometry_nodes/curve/operations/reverse_curve.html#bpy-types-geometrynodereversecurve"),
("bpy.types.geometrynodesetcurvetilt*", "modeling/geometry_nodes/curve/write/set_curve_tilt.html#bpy-types-geometrynodesetcurvetilt"),
("bpy.types.geometrynodesortelements*", "modeling/geometry_nodes/geometry/operations/sort_elements.html#bpy-types-geometrynodesortelements"),
("bpy.types.geometrynodesplinelength*", "modeling/geometry_nodes/curve/read/spline_length.html#bpy-types-geometrynodesplinelength"),
("bpy.types.geometrynodetool3dcursor*", "modeling/geometry_nodes/input/scene/3d_cursor.html#bpy-types-geometrynodetool3dcursor"),
("bpy.types.geometrynodetree.is_tool*", "editors/geometry_node.html#bpy-types-geometrynodetree-is-tool"),
@ -2013,6 +2034,7 @@ url_manual_mapping = (
("bpy.types.geometrynodecurvetomesh*", "modeling/geometry_nodes/curve/operations/curve_to_mesh.html#bpy-types-geometrynodecurvetomesh"),
("bpy.types.geometrynodeextrudemesh*", "modeling/geometry_nodes/mesh/operations/extrude_mesh.html#bpy-types-geometrynodeextrudemesh"),
("bpy.types.geometrynodefilletcurve*", "modeling/geometry_nodes/curve/operations/fillet_curve.html#bpy-types-geometrynodefilletcurve"),
("bpy.types.geometrynodeindexswitch*", "modeling/geometry_nodes/utilities/index_switch.html#bpy-types-geometrynodeindexswitch"),
("bpy.types.geometrynodeinputnormal*", "modeling/geometry_nodes/geometry/read/normal.html#bpy-types-geometrynodeinputnormal"),
("bpy.types.geometrynodeinputradius*", "modeling/geometry_nodes/geometry/read/radius.html#bpy-types-geometrynodeinputradius"),
("bpy.types.geometrynodemeshboolean*", "modeling/geometry_nodes/mesh/operations/mesh_boolean.html#bpy-types-geometrynodemeshboolean"),
@ -2079,6 +2101,7 @@ url_manual_mapping = (
("bpy.ops.clip.stabilize_2d_select*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-stabilize-2d-select"),
("bpy.ops.clip.tracking_object_new*", "movie_clip/tracking/clip/sidebar/track/objects.html#bpy-ops-clip-tracking-object-new"),
("bpy.ops.constraint.move_to_index*", "animation/constraints/interface/header.html#bpy-ops-constraint-move-to-index"),
("bpy.ops.font.text_insert_unicode*", "modeling/texts/editing.html#bpy-ops-font-text-insert-unicode"),
("bpy.ops.gpencil.frame_clean_fill*", "grease_pencil/modes/edit/grease_pencil_menu.html#bpy-ops-gpencil-frame-clean-fill"),
("bpy.ops.gpencil.generate_weights*", "grease_pencil/modes/weight_paint/weights_menu.html#bpy-ops-gpencil-generate-weights"),
("bpy.ops.gpencil.select_alternate*", "grease_pencil/selecting.html#bpy-ops-gpencil-select-alternate"),
@ -2204,6 +2227,7 @@ url_manual_mapping = (
("bpy.types.material.shadow_method*", "render/eevee/materials/settings.html#bpy-types-material-shadow-method"),
("bpy.types.modifier.show_viewport*", "modeling/modifiers/introduction.html#bpy-types-modifier-show-viewport"),
("bpy.types.motionpath.frame_start*", "animation/motion_paths.html#bpy-types-motionpath-frame-start"),
("bpy.types.nodesmodifierdatablock*", "modeling/geometry_nodes/baking.html#bpy-types-nodesmodifierdatablock"),
("bpy.types.object.visible_diffuse*", "render/cycles/object_settings/object_data.html#bpy-types-object-visible-diffuse"),
("bpy.types.objectsolverconstraint*", "animation/constraints/motion_tracking/object_solver.html#bpy-types-objectsolverconstraint"),
("bpy.types.opacitygpencilmodifier*", "grease_pencil/modifiers/color/opacity.html#bpy-types-opacitygpencilmodifier"),
@ -2257,6 +2281,7 @@ url_manual_mapping = (
("bpy.ops.gpencil.stroke_simplify*", "grease_pencil/modes/edit/stroke_menu.html#bpy-ops-gpencil-stroke-simplify"),
("bpy.ops.graph.blend_to_neighbor*", "editors/graph_editor/fcurves/editing.html#bpy-ops-graph-blend-to-neighbor"),
("bpy.ops.graph.snap_cursor_value*", "editors/graph_editor/fcurves/editing.html#bpy-ops-graph-snap-cursor-value"),
("bpy.ops.image.rotate_orthogonal*", "editors/image/editing.html#bpy-ops-image-rotate-orthogonal"),
("bpy.ops.image.save_all_modified*", "editors/image/editing.html#bpy-ops-image-save-all-modified"),
("bpy.ops.marker.make_links_scene*", "animation/markers.html#bpy-ops-marker-make-links-scene"),
("bpy.ops.marker.select_leftright*", "animation/markers.html#bpy-ops-marker-select-leftright"),
@ -2332,7 +2357,7 @@ url_manual_mapping = (
("bpy.types.compositornodevecblur*", "compositing/types/filter/blur/vector_blur.html#bpy-types-compositornodevecblur"),
("bpy.types.curve.use_fill_deform*", "modeling/curves/properties/shape.html#bpy-types-curve-use-fill-deform"),
("bpy.types.curve.use_path_follow*", "modeling/curves/properties/path_animation.html#bpy-types-curve-use-path-follow"),
("bpy.types.curves.surface_uv_map*", "modeling/curves/primitives.html#bpy-types-curves-surface-uv-map"),
("bpy.types.curves.surface_uv_map*", "modeling/curves_new/properties.html#bpy-types-curves-surface-uv-map"),
("bpy.types.dampedtrackconstraint*", "animation/constraints/tracking/damped_track.html#bpy-types-dampedtrackconstraint"),
("bpy.types.distortednoisetexture*", "render/materials/legacy_textures/types/distorted_noise.html#bpy-types-distortednoisetexture"),
("bpy.types.dopesheet.filter_text*", "editors/graph_editor/channels/introduction.html#bpy-types-dopesheet-filter-text"),
@ -2548,6 +2573,7 @@ url_manual_mapping = (
("bpy.ops.clip.track_copy_color*", "movie_clip/tracking/clip/sidebar/track/track.html#bpy-ops-clip-track-copy-color"),
("bpy.ops.curve.handle_type_set*", "modeling/curves/editing/control_points.html#bpy-ops-curve-handle-type-set"),
("bpy.ops.curve.spline_type_set*", "modeling/curves/editing/curve.html#bpy-ops-curve-spline-type-set"),
("bpy.ops.curves.duplicate_move*", "modeling/curves_new/editing/curves.html#bpy-ops-curves-duplicate-move"),
("bpy.ops.file.unpack_libraries*", "files/blend/packed_data.html#bpy-ops-file-unpack-libraries"),
("bpy.ops.gpencil.layer_isolate*", "grease_pencil/properties/layers.html#bpy-ops-gpencil-layer-isolate"),
("bpy.ops.gpencil.move_to_layer*", "grease_pencil/modes/edit/stroke_menu.html#bpy-ops-gpencil-move-to-layer"),
@ -2786,7 +2812,7 @@ url_manual_mapping = (
("bpy.types.curve.resolution_v*", "modeling/surfaces/properties/shape.html#bpy-types-curve-resolution-v"),
("bpy.types.curve.taper_object*", "modeling/curves/properties/geometry.html#bpy-types-curve-taper-object"),
("bpy.types.curve.twist_smooth*", "modeling/curves/properties/shape.html#bpy-types-curve-twist-smooth"),
("bpy.types.curvepaintsettings*", "modeling/curves/tools/draw.html#bpy-types-curvepaintsettings"),
("bpy.types.curvepaintsettings*", "modeling/curves_new/tools/draw.html#bpy-types-curvepaintsettings"),
("bpy.types.fcurve.array_index*", "editors/graph_editor/fcurves/properties.html#bpy-types-fcurve-array-index"),
("bpy.types.fieldsettings.flow*", "physics/forces/force_fields/introduction.html#bpy-types-fieldsettings-flow"),
("bpy.types.fieldsettings.seed*", "physics/forces/force_fields/introduction.html#bpy-types-fieldsettings-seed"),
@ -2860,6 +2886,7 @@ url_manual_mapping = (
("bpy.ops.curve.primitive*add*", "modeling/curves/primitives.html#bpy-ops-curve-primitive-add"),
("bpy.ops.curve.smooth_radius*", "modeling/curves/editing/control_points.html#bpy-ops-curve-smooth-radius"),
("bpy.ops.curve.smooth_weight*", "modeling/curves/editing/control_points.html#bpy-ops-curve-smooth-weight"),
("bpy.ops.curves.extrude_move*", "modeling/curves_new/editing/control_points.html#bpy-ops-curves-extrude-move"),
("bpy.ops.file.pack_libraries*", "files/blend/packed_data.html#bpy-ops-file-pack-libraries"),
("bpy.ops.font.change_spacing*", "modeling/texts/editing.html#bpy-ops-font-change-spacing"),
("bpy.ops.gpencil.interpolate*", "grease_pencil/modes/draw/tools/interpolate.html#bpy-ops-gpencil-interpolate"),
@ -2925,6 +2952,7 @@ url_manual_mapping = (
("bpy.types.alphaoversequence*", "video_editing/edit/montage/strips/effects/alpha_over_under_overdrop.html#bpy-types-alphaoversequence"),
("bpy.types.armatureeditbones*", "animation/armatures/bones/editing/index.html#bpy-types-armatureeditbones"),
("bpy.types.bonecolor.palette*", "animation/armatures/bones/properties/display.html#bpy-types-bonecolor-palette"),
("bpy.types.brush.automasking*", "sculpt_paint/brush/brush_settings.html#bpy-types-brush-automasking"),
("bpy.types.brush.jitter_unit*", "sculpt_paint/brush/stroke.html#bpy-types-brush-jitter-unit"),
("bpy.types.brush.pose_offset*", "sculpt_paint/sculpting/tools/pose.html#bpy-types-brush-pose-offset"),
("bpy.types.brush.rake_factor*", "sculpt_paint/sculpting/tools/snake_hook.html#bpy-types-brush-rake-factor"),
@ -3088,6 +3116,7 @@ url_manual_mapping = (
("bpy.types.fileselectparams*", "editors/file_browser.html#bpy-types-fileselectparams"),
("bpy.types.fmodifierstepped*", "editors/graph_editor/fcurves/modifiers.html#bpy-types-fmodifierstepped"),
("bpy.types.freestylelineset*", "render/freestyle/view_layer/line_set.html#bpy-types-freestylelineset"),
("bpy.types.geometrynodebake*", "modeling/geometry_nodes/geometry/operations/bake.html#bpy-types-geometrynodebake"),
("bpy.types.geometrynodetree*", "modeling/geometry_nodes/tools.html#bpy-types-geometrynodetree"),
("bpy.types.greasepencilgrid*", "grease_pencil/properties/display.html#bpy-types-greasepencilgrid"),
("bpy.types.image.alpha_mode*", "editors/image/image_settings.html#bpy-types-image-alpha-mode"),
@ -3152,6 +3181,7 @@ url_manual_mapping = (
("bpy.ops.constraint.delete*", "animation/constraints/interface/header.html#bpy-ops-constraint-delete"),
("bpy.ops.curve.smooth_tilt*", "modeling/curves/editing/control_points.html#bpy-ops-curve-smooth-tilt"),
("bpy.ops.curves.select_all*", "sculpt_paint/curves_sculpting/introduction.html#bpy-ops-curves-select-all"),
("bpy.ops.curves.tilt_clear*", "modeling/curves_new/editing/control_points.html#bpy-ops-curves-tilt-clear"),
("bpy.ops.file.reset_recent*", "editors/file_browser.html#bpy-ops-file-reset-recent"),
("bpy.ops.fluid.bake_guides*", "physics/fluid/type/domain/guides.html#bpy-ops-fluid-bake-guides"),
("bpy.ops.fluid.free_guides*", "physics/fluid/type/domain/guides.html#bpy-ops-fluid-free-guides"),
@ -3260,6 +3290,7 @@ url_manual_mapping = (
("bpy.ops.fluid.bake_noise*", "physics/fluid/type/domain/gas/noise.html#bpy-ops-fluid-bake-noise"),
("bpy.ops.fluid.free_noise*", "physics/fluid/type/domain/gas/noise.html#bpy-ops-fluid-free-noise"),
("bpy.ops.font.move_select*", "modeling/texts/selecting.html#bpy-ops-font-move-select"),
("bpy.ops.font.text_insert*", "modeling/texts/editing.html#bpy-ops-font-text-insert"),
("bpy.ops.font.textbox_add*", "modeling/texts/properties.html#bpy-ops-font-textbox-add"),
("bpy.ops.gpencil.dissolve*", "grease_pencil/modes/edit/grease_pencil_menu.html#bpy-ops-gpencil-dissolve"),
("bpy.ops.graph.frame_jump*", "editors/graph_editor/fcurves/editing.html#bpy-ops-graph-frame-jump"),
@ -3315,7 +3346,7 @@ url_manual_mapping = (
("bpy.types.bonecollection*", "animation/armatures/properties/bone_collections.html#bpy-types-bonecollection"),
("bpy.types.brush.hardness*", "sculpt_paint/brush/brush_settings.html#bpy-types-brush-hardness"),
("bpy.types.brush.strength*", "sculpt_paint/brush/brush_settings.html#bpy-types-brush-strength"),
("bpy.types.curves.surface*", "modeling/curves/primitives.html#bpy-types-curves-surface"),
("bpy.types.curves.surface*", "modeling/curves_new/properties.html#bpy-types-curves-surface"),
("bpy.types.curvesmodifier*", "editors/video_sequencer/sequencer/sidebar/modifiers.html#bpy-types-curvesmodifier"),
("bpy.types.editbone.color*", "animation/armatures/bones/properties/display.html#bpy-types-editbone-color"),
("bpy.types.ffmpegsettings*", "render/output/properties/output.html#bpy-types-ffmpegsettings"),
@ -3368,6 +3399,7 @@ url_manual_mapping = (
("bpy.ops.fluid.free_data*", "physics/fluid/type/domain/settings.html#bpy-ops-fluid-free-data"),
("bpy.ops.fluid.free_mesh*", "physics/fluid/type/domain/liquid/mesh.html#bpy-ops-fluid-free-mesh"),
("bpy.ops.font.select_all*", "modeling/texts/selecting.html#bpy-ops-font-select-all"),
("bpy.ops.font.text_paste*", "modeling/texts/editing.html#bpy-ops-font-text-paste"),
("bpy.ops.gpencil.convert*", "grease_pencil/modes/object/convert_to_geometry.html#bpy-ops-gpencil-convert"),
("bpy.ops.graph.bake_keys*", "editors/graph_editor/fcurves/editing.html#bpy-ops-graph-bake-keys"),
("bpy.ops.graph.breakdown*", "editors/graph_editor/fcurves/editing.html#bpy-ops-graph-breakdown"),
@ -3482,6 +3514,7 @@ url_manual_mapping = (
("bpy.ops.curve.separate*", "modeling/curves/editing/curve.html#bpy-ops-curve-separate"),
("bpy.ops.fluid.bake_all*", "physics/fluid/type/domain/cache.html#bpy-ops-fluid-bake-all"),
("bpy.ops.fluid.free_all*", "physics/fluid/type/domain/cache.html#bpy-ops-fluid-free-all"),
("bpy.ops.font.text_copy*", "modeling/texts/editing.html#bpy-ops-font-text-copy"),
("bpy.ops.gpencil.delete*", "grease_pencil/modes/edit/grease_pencil_menu.html#bpy-ops-gpencil-delete"),
("bpy.ops.gpencil.reveal*", "grease_pencil/properties/layers.html#bpy-ops-gpencil-reveal"),
("bpy.ops.gpencil.select*", "grease_pencil/selecting.html#bpy-ops-gpencil-select"),
@ -3561,9 +3594,11 @@ url_manual_mapping = (
("bpy.ops.asset.tag_add*", "editors/asset_browser.html#bpy-ops-asset-tag-add"),
("bpy.ops.clip.prefetch*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-prefetch"),
("bpy.ops.clip.set_axis*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-set-axis"),
("bpy.ops.curves.delete*", "modeling/curves/primitives.html#bpy-ops-curves-delete"),
("bpy.ops.curves.delete*", "modeling/curves_new/editing/curves.html#bpy-ops-curves-delete"),
("bpy.ops.file.pack_all*", "files/blend/packed_data.html#bpy-ops-file-pack-all"),
("bpy.ops.file.previous*", "editors/file_browser.html#bpy-ops-file-previous"),
("bpy.ops.font.case_set*", "modeling/texts/editing.html#bpy-ops-font-case-set"),
("bpy.ops.font.text_cut*", "modeling/texts/editing.html#bpy-ops-font-text-cut"),
("bpy.ops.gpencil.paste*", "grease_pencil/modes/edit/grease_pencil_menu.html#bpy-ops-gpencil-paste"),
("bpy.ops.image.project*", "sculpt_paint/texture_paint/tool_settings/options.html#bpy-ops-image-project"),
("bpy.ops.image.replace*", "editors/image/editing.html#bpy-ops-image-replace"),
@ -3680,6 +3715,7 @@ url_manual_mapping = (
("bpy.ops.file.delete*", "editors/file_browser.html#bpy-ops-file-delete"),
("bpy.ops.file.parent*", "editors/file_browser.html#bpy-ops-file-parent"),
("bpy.ops.file.rename*", "editors/file_browser.html#bpy-ops-file-rename"),
("bpy.ops.font.delete*", "modeling/texts/editing.html#bpy-ops-font-delete"),
("bpy.ops.graph.clean*", "editors/graph_editor/fcurves/editing.html#bpy-ops-graph-clean"),
("bpy.ops.graph.paste*", "editors/graph_editor/fcurves/editing.html#bpy-ops-graph-paste"),
("bpy.ops.graph.shear*", "editors/graph_editor/fcurves/editing.html#bpy-ops-graph-shear"),

View File

@ -96,7 +96,7 @@ def write_sysinfo(filepath):
output.write("datafiles: %r\n" % (bpy.utils.user_resource('DATAFILES')))
output.write("config: %r\n" % (bpy.utils.user_resource('CONFIG')))
output.write("scripts: %r\n" % (bpy.utils.user_resource('SCRIPTS')))
output.write("autosave: %r\n" % (bpy.utils.user_resource('AUTOSAVE')))
output.write("extensions: %r\n" % (bpy.utils.user_resource('EXTENSIONS')))
output.write("tempdir: %r\n" % (bpy.app.tempdir))
output.write(title("FFmpeg"))

View File

@ -1132,7 +1132,7 @@ class _defs_edit_mesh:
)
def curve_draw_settings(context, layout, _tool, *, extra=False):
def curve_draw_settings(context, layout, tool, *, extra=False):
# Tool settings initialize operator options.
tool_settings = context.tool_settings
cps = tool_settings.curve_paint_settings
@ -1187,6 +1187,11 @@ def curve_draw_settings(context, layout, _tool, *, extra=False):
colsub = layout.column(align=True)
colsub.prop(cps, "surface_plane")
props = tool.operator_properties("curves.draw")
col = layout.column(align=True)
col.prop(props, "is_curve_2d", text="Curve 2D")
col.prop(props, "bezier_as_nurbs", text="As NURBS")
class _defs_edit_curve:
@ -1287,12 +1292,6 @@ class _defs_edit_curves:
def curve_draw(context, layout, tool, *, extra=False):
curve_draw_settings(context, layout, tool, extra=extra)
if extra:
props = tool.operator_properties("curves.draw")
col = layout.column(align=True)
col.prop(props, "is_curve_2d", text="Curve 2D")
col.prop(props, "bezier_as_nurbs", text="As NURBS")
return dict(
idname="builtin.draw",
label="Draw",

View File

@ -2044,28 +2044,6 @@ class USERPREF_PT_extensions_repos(Panel):
# Show wider than most panels so the URL & directory aren't overly clipped.
bl_ui_units_x = 16
# NOTE: ideally `if panel := layout.panel("extensions_repo_advanced", default_closed=True):`
# would be used but it isn't supported here, use a kludge to achieve a similar UI.
_panel_layout_kludge_state = False
@classmethod
def _panel_layout_kludge(cls, layout, *, text):
row = layout.row(align=True)
row.alignment = 'LEFT'
show_advanced = USERPREF_PT_extensions_repos._panel_layout_kludge_state
props = row.operator(
"wm.context_toggle",
text="Advanced",
icon='DOWNARROW_HLT' if show_advanced else 'RIGHTARROW',
emboss=False,
)
props.module = "bl_ui.space_userpref"
props.data_path = "USERPREF_PT_extensions_repos._panel_layout_kludge_state"
if show_advanced:
return layout.column()
return None
def draw(self, context):
layout = self.layout
layout.use_property_split = False
@ -2114,8 +2092,9 @@ class USERPREF_PT_extensions_repos(Panel):
split.prop(active_repo, "remote_path", text="URL")
split = row.split()
if layout_panel := self._panel_layout_kludge(layout, text="Advanced"):
layout_header, layout_panel = layout.panel("advanced", default_closed=True)
layout_header.label(text="Advanced")
if layout_panel:
layout_panel.prop(active_repo, "use_custom_directory")
row = layout_panel.row()
@ -2695,6 +2674,7 @@ class USERPREF_PT_experimental_prototypes(ExperimentalPanel, Panel):
({"property": "use_sculpt_texture_paint"}, ("blender/blender/issues/96225", "#96225")),
({"property": "use_experimental_compositors"}, ("blender/blender/issues/88150", "#88150")),
({"property": "use_grease_pencil_version3"}, ("blender/blender/projects/6", "Grease Pencil 3.0")),
({"property": "use_grease_pencil_version3_convert_on_load"}, ("blender/blender/projects/6", "Grease Pencil 3.0")),
({"property": "use_new_matrix_socket"}, ("blender/blender/issues/116067", "Matrix Socket")),
({"property": "enable_overlay_next"}, ("blender/blender/issues/102179", "#102179")),
({"property": "use_extension_repos"}, ("/blender/blender/issues/117286", "#117286")),

View File

@ -30,8 +30,9 @@ class MESH_UL_mylist(bpy.types.UIList):
def filter_items(self, context, data, propname):
# This function gets the collection property (as the usual tuple (data, propname)), and must return two lists:
# * The first one is for filtering, it must contain 32bit integers were self.bitflag_filter_item marks the
# matching item as filtered (i.e. to be shown), and 31 other bits are free for custom needs. Here we use the
# first one to mark VGROUP_EMPTY.
# matching item as filtered (i.e. to be shown). The upper 16 bits (including self.bitflag_filter_item) are
# reseverd for internal use, the lower 16 bits are free for custom use. Here we use the first bit to mark
# VGROUP_EMPTY.
# * The second one is for reordering, it must return a list containing the new indices of the items (which
# gives us a mapping org_idx -> new_idx).
# Please note that the default UI_UL_list defines helper functions for common tasks (see its doc for more info).

View File

@ -51,7 +51,6 @@ void update_autoflags_fcurve_direct(FCurve *fcu, PropertyRNA *prop);
int insert_keyframe(Main *bmain,
ReportList *reports,
ID *id,
bAction *act,
const char group[],
const char rna_path[],
int array_index,

View File

@ -546,7 +546,6 @@ static void generate_keyframe_reports_from_result(ReportList *reports,
int insert_keyframe(Main *bmain,
ReportList *reports,
ID *id,
bAction *act,
const char group[],
const char rna_path[],
int array_index,
@ -577,18 +576,15 @@ int insert_keyframe(Main *bmain,
return 0;
}
/* If no action is provided, keyframe to the default one attached to this ID-block. */
bAction *act = id_action_ensure(bmain, id);
if (act == nullptr) {
act = id_action_ensure(bmain, id);
if (act == nullptr) {
BKE_reportf(reports,
RPT_ERROR,
"Could not insert keyframe, as this type does not support animation data (ID = "
"%s, path = %s)",
id->name,
rna_path);
return 0;
}
BKE_reportf(reports,
RPT_ERROR,
"Could not insert keyframe, as this type does not support animation data (ID = "
"%s, path = %s)",
id->name,
rna_path);
return 0;
}
/* Apply NLA-mapping to frame to use (if applicable). */

View File

@ -138,7 +138,6 @@ void autokeyframe_object(bContext *C, Scene *scene, Object *ob, Span<std::string
insert_keyframe(bmain,
reports,
id,
adt->action,
(fcu->grp ? fcu->grp->name : nullptr),
fcu->rna_path,
fcu->array_index,
@ -267,7 +266,6 @@ void autokeyframe_pose_channel(bContext *C,
blender::animrig::insert_keyframe(bmain,
reports,
id,
act,
((fcu->grp) ? (fcu->grp->name) : (nullptr)),
fcu->rna_path,
fcu->array_index,
@ -361,7 +359,6 @@ bool autokeyframe_property(bContext *C,
changed = insert_keyframe(bmain,
reports,
id,
action,
(fcu && fcu->grp) ? fcu->grp->name : nullptr,
fcu ? fcu->rna_path : (path ? path->c_str() : nullptr),
rnaindex,

View File

@ -32,8 +32,8 @@
#include "IMB_colormanagement.hh"
#include "GPU_matrix.h"
#include "GPU_shader.h"
#include "GPU_matrix.hh"
#include "GPU_shader.hh"
#include "blf_internal.hh"
#include "blf_internal_types.hh"

View File

@ -42,8 +42,8 @@
#include "BLF_api.hh"
#include "GPU_batch.h"
#include "GPU_matrix.h"
#include "GPU_batch.hh"
#include "GPU_matrix.hh"
#include "blf_internal.hh"
#include "blf_internal_types.hh"

View File

@ -32,7 +32,7 @@
#include "DNA_curve_types.h"
#include "GPU_capabilities.h"
#include "GPU_capabilities.hh"
#include "blf_internal.hh"
#include "blf_internal_types.hh"

View File

@ -13,8 +13,8 @@
#include "BLI_map.hh"
#include "BLI_vector.hh"
#include "GPU_texture.h"
#include "GPU_vertex_buffer.h"
#include "GPU_texture.hh"
#include "GPU_vertex_buffer.hh"
struct ColorManagedDisplay;
struct FontBLF;

View File

@ -168,7 +168,7 @@ enum {
BLENDER_USER_CONFIG = 31,
BLENDER_USER_DATAFILES = 32,
BLENDER_USER_SCRIPTS = 33,
BLENDER_USER_AUTOSAVE = 34,
BLENDER_USER_EXTENSIONS = 34,
/* system */
BLENDER_SYSTEM_DATAFILES = 52,

View File

@ -92,7 +92,7 @@ BVHTree *bvhtree_from_mesh_edges_ex(BVHTreeFromMesh *data,
int axis);
/**
* Builds a BVH-tree where nodes are the triangle faces (#MLoopTri) of the given mesh.
* Builds a BVH-tree where nodes are the triangle faces (#Mesh::corner_tris()) of the given mesh.
*/
BVHTree *bvhtree_from_mesh_corner_tris_ex(BVHTreeFromMesh *data,
blender::Span<blender::float3> vert_positions,

View File

@ -12,7 +12,12 @@
* only concerned with low level operations on the #BMEditMesh structure.
*/
#include <array>
#include "BLI_array.hh"
#include "DNA_customdata_types.h"
#include "bmesh.hh"
struct BMLoop;
@ -31,8 +36,7 @@ struct Scene;
* and various data that doesn't belong in the #BMesh struct itself
* (mostly related to mesh evaluation).
*
* The entire modifier system works with this structure, and not #BMesh.
* #Mesh.edit_bmesh stores a pointer to this structure.
* #Mesh.runtime.edit_mesh stores a pointer to this structure.
*/
struct BMEditMesh {
BMesh *bm;
@ -41,10 +45,9 @@ struct BMEditMesh {
* Face triangulation (tessellation) is stored as triplets of three loops,
* which each define a triangle.
*
* \see #MLoopTri as the documentation gives useful hints that apply to this data too.
* \see #Mesh::corner_tris() as the documentation gives useful hints that apply to this data too.
*/
BMLoop *(*looptris)[3];
int tottri;
blender::Array<std::array<BMLoop *, 3>> looptris;
/** Selection mode (#SCE_SELECT_VERTEX, #SCE_SELECT_EDGE & #SCE_SELECT_FACE). */
short selectmode;

View File

@ -8,9 +8,7 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "BLI_span.hh"
struct BMBVHTree;
struct BMEditMesh;
@ -29,16 +27,14 @@ BMBVHTree *BKE_bmbvh_new_from_editmesh(struct BMEditMesh *em,
const float (*cos_cage)[3],
bool cos_cage_free);
BMBVHTree *BKE_bmbvh_new_ex(struct BMesh *bm,
struct BMLoop *(*looptris)[3],
int looptris_tot,
blender::Span<std::array<BMLoop *, 3>> looptris,
int flag,
const float (*cos_cage)[3],
bool cos_cage_free,
bool (*test_fn)(struct BMFace *, void *user_data),
void *user_data);
BMBVHTree *BKE_bmbvh_new(struct BMesh *bm,
struct BMLoop *(*looptris)[3],
int looptris_tot,
blender::Span<std::array<BMLoop *, 3>> looptris,
int flag,
const float (*cos_cage)[3],
bool cos_cage_free);
@ -91,7 +87,3 @@ enum {
/** Omit hidden geometry. */
BMBVH_RESPECT_HIDDEN = (1 << 2),
};
#ifdef __cplusplus
}
#endif

View File

@ -10,6 +10,7 @@
struct bGPdata;
struct bGPDframe;
struct BlendFileReadReport;
struct GreasePencil;
struct GreasePencilDrawing;
struct ListBase;
@ -27,6 +28,9 @@ void legacy_gpencil_to_grease_pencil(Main &bmain, GreasePencil &grease_pencil, b
void legacy_gpencil_object(Main &bmain, Object &object);
/** Main entry point to convert all legacy GPData into GreasePencil data and objects. */
void legacy_main(Main &bmain, BlendFileReadReport &reports);
void thickness_factor_to_modifier(const bGPdata &src_object_data, Object &dst_object);
void layer_adjustments_to_modifiers(Main &bmain,
const bGPdata &src_object_data,

View File

@ -9,7 +9,6 @@
#include "BLI_sys_types.h"
struct AviCodecData;
struct Base;
struct Collection;
struct Depsgraph;
@ -61,8 +60,6 @@ enum eSceneCopyMethod {
*/
Base *_setlooper_base_step(Scene **sce_iter, ViewLayer *view_layer, Base *base);
void free_avicodecdata(AviCodecData *acd);
Scene *BKE_scene_add(Main *bmain, const char *name);
void BKE_scene_remove_rigidbody_object(Main *bmain, Scene *scene, Object *ob, bool free_us);

View File

@ -1149,9 +1149,9 @@ static void editbmesh_calc_modifiers(Depsgraph *depsgraph,
MEM_dupallocN(mesh_cage->runtime->edit_mesh));
mesh_final->runtime->edit_mesh->is_shallow_copy = true;
mesh_final->runtime->is_original_bmesh = true;
BKE_mesh_runtime_ensure_edit_data(mesh_final);
if (!mesh_cage->runtime->edit_data->vertexCos.is_empty()) {
mesh_final->runtime->edit_data->vertexCos = mesh_cage->runtime->edit_data->vertexCos;
if (mesh_cage->runtime->edit_data) {
mesh_final->runtime->edit_data = std::make_unique<blender::bke::EditMeshData>(
*mesh_cage->runtime->edit_data);
}
}
}

View File

@ -15,7 +15,7 @@
#include "BKE_anim_visualization.h"
#include "BKE_report.hh"
#include "GPU_batch.h"
#include "GPU_batch.hh"
#include "BLO_read_write.hh"

View File

@ -626,15 +626,6 @@ bool BKE_appdir_folder_id_ex(const int folder_id,
}
return false;
case BLENDER_USER_AUTOSAVE:
if (get_path_environment(path, path_maxncpy, subfolder, "BLENDER_USER_DATAFILES")) {
break;
}
if (get_path_user(path, path_maxncpy, "autosave", subfolder)) {
break;
}
return false;
case BLENDER_USER_CONFIG:
if (get_path_environment(path, path_maxncpy, subfolder, "BLENDER_USER_CONFIG")) {
break;
@ -665,6 +656,15 @@ bool BKE_appdir_folder_id_ex(const int folder_id,
}
return false;
case BLENDER_USER_EXTENSIONS:
if (get_path_environment(path, path_maxncpy, subfolder, "BLENDER_USER_EXTENSIONS")) {
break;
}
if (get_path_user(path, path_maxncpy, "extensions", subfolder)) {
break;
}
return false;
case BLENDER_SYSTEM_PYTHON:
if (get_path_environment(path, path_maxncpy, subfolder, "BLENDER_SYSTEM_PYTHON")) {
break;
@ -718,14 +718,6 @@ std::optional<std::string> BKE_appdir_folder_id_user_notest(const int folder_id,
}
get_path_user_ex(path, sizeof(path), "config", subfolder, version, check_is_dir);
break;
case BLENDER_USER_AUTOSAVE:
if (get_path_environment_ex(
path, sizeof(path), subfolder, "BLENDER_USER_AUTOSAVE", check_is_dir))
{
break;
}
get_path_user_ex(path, sizeof(path), "autosave", subfolder, version, check_is_dir);
break;
case BLENDER_USER_SCRIPTS:
if (get_path_environment_ex(
path, sizeof(path), subfolder, "BLENDER_USER_SCRIPTS", check_is_dir))
@ -734,6 +726,14 @@ std::optional<std::string> BKE_appdir_folder_id_user_notest(const int folder_id,
}
get_path_user_ex(path, sizeof(path), "scripts", subfolder, version, check_is_dir);
break;
case BLENDER_USER_EXTENSIONS:
if (get_path_environment_ex(
path, sizeof(path), subfolder, "BLENDER_USER_EXTENSIONS", check_is_dir))
{
break;
}
get_path_user_ex(path, sizeof(path), "extensions", subfolder, version, check_is_dir);
break;
default:
BLI_assert_unreachable();
break;
@ -752,7 +752,7 @@ std::optional<std::string> BKE_appdir_folder_id_create(const int folder_id, cons
BLENDER_USER_DATAFILES,
BLENDER_USER_CONFIG,
BLENDER_USER_SCRIPTS,
BLENDER_USER_AUTOSAVE))
BLENDER_USER_EXTENSIONS))
{
BLI_assert_unreachable();
return std::nullopt;

View File

@ -36,6 +36,7 @@
#include "BLT_translation.hh"
#include "BKE_grease_pencil_legacy_convert.hh"
#include "BKE_idtype.hh"
#include "BKE_key.hh"
#include "BKE_layer.hh"
@ -1379,6 +1380,14 @@ void BKE_blendfile_append(BlendfileLinkAppendContext *lapp_context, ReportList *
blendfile_link_append_proxies_convert(bmain, reports);
BKE_main_mesh_legacy_convert_auto_smooth(*bmain);
if (U.experimental.use_grease_pencil_version3 &&
U.experimental.use_grease_pencil_version3_convert_on_load)
{
BlendFileReadReport bf_reports{};
bf_reports.reports = reports;
blender::bke::greasepencil::convert::legacy_main(*bmain, bf_reports);
}
}
void BKE_blendfile_link(BlendfileLinkAppendContext *lapp_context, ReportList *reports)
@ -1496,6 +1505,14 @@ void BKE_blendfile_link(BlendfileLinkAppendContext *lapp_context, ReportList *re
if ((lapp_context->params->flag & FILE_LINK) != 0) {
blendfile_link_append_proxies_convert(lapp_context->params->bmain, reports);
BKE_main_mesh_legacy_convert_auto_smooth(*lapp_context->params->bmain);
if (U.experimental.use_grease_pencil_version3 &&
U.experimental.use_grease_pencil_version3_convert_on_load)
{
BlendFileReadReport bf_reports{};
bf_reports.reports = reports;
blender::bke::greasepencil::convert::legacy_main(*lapp_context->params->bmain, bf_reports);
}
}
BKE_main_namemap_clear(lapp_context->params->bmain);

View File

@ -1376,7 +1376,7 @@ void BKE_brush_gpencil_paint_presets(Main *bmain, ToolSettings *ts, const bool r
bool is_new = false;
Paint *paint = &ts->gp_paint->paint;
Brush *brush_prev = paint->brush;
Brush *brush_prev = BKE_paint_brush(paint);
Brush *brush, *deft_draw;
/* Airbrush brush. */
brush = gpencil_brush_ensure(bmain, ts, "Airbrush", OB_MODE_PAINT_GPENCIL_LEGACY, &is_new);
@ -1477,7 +1477,7 @@ void BKE_brush_gpencil_vertex_presets(Main *bmain, ToolSettings *ts, const bool
bool is_new = false;
Paint *vertexpaint = &ts->gp_vertexpaint->paint;
Brush *brush_prev = vertexpaint->brush;
Brush *brush_prev = BKE_paint_brush(vertexpaint);
Brush *brush, *deft_vertex;
/* Vertex Draw brush. */
brush = gpencil_brush_ensure(bmain, ts, "Vertex Draw", OB_MODE_VERTEX_GPENCIL_LEGACY, &is_new);
@ -1525,7 +1525,7 @@ void BKE_brush_gpencil_sculpt_presets(Main *bmain, ToolSettings *ts, const bool
bool is_new = false;
Paint *sculptpaint = &ts->gp_sculptpaint->paint;
Brush *brush_prev = sculptpaint->brush;
Brush *brush_prev = BKE_paint_brush(sculptpaint);
Brush *brush, *deft_sculpt;
/* Smooth brush. */
@ -1602,7 +1602,7 @@ void BKE_brush_gpencil_weight_presets(Main *bmain, ToolSettings *ts, const bool
bool is_new = false;
Paint *weightpaint = &ts->gp_weightpaint->paint;
Brush *brush_prev = weightpaint->brush;
Brush *brush_prev = BKE_paint_brush(weightpaint);
Brush *brush, *deft_weight;
/* Weight Draw brush. */

View File

@ -29,14 +29,14 @@
BMEditMesh *BKE_editmesh_create(BMesh *bm)
{
BMEditMesh *em = MEM_cnew<BMEditMesh>(__func__);
BMEditMesh *em = MEM_new<BMEditMesh>(__func__);
em->bm = bm;
return em;
}
BMEditMesh *BKE_editmesh_copy(BMEditMesh *em)
{
BMEditMesh *em_copy = MEM_cnew<BMEditMesh>(__func__);
BMEditMesh *em_copy = MEM_new<BMEditMesh>(__func__);
*em_copy = *em;
em_copy->bm = BM_mesh_copy(em->bm);
@ -47,7 +47,7 @@ BMEditMesh *BKE_editmesh_copy(BMEditMesh *em)
* it in the case of errors in an operation. For performance reasons,
* in that case it makes more sense to do the
* tessellation only when/if that copy ends up getting used. */
em_copy->looptris = nullptr;
em_copy->looptris = {};
/* Copy various settings. */
em_copy->selectmode = em->selectmode;
@ -62,48 +62,11 @@ BMEditMesh *BKE_editmesh_from_object(Object *ob)
return ((Mesh *)ob->data)->runtime->edit_mesh;
}
static void editmesh_tessface_calc_intern(BMEditMesh *em,
const BMeshCalcTessellation_Params *params)
{
/* allocating space before calculating the tessellation */
BMesh *bm = em->bm;
/* This assumes all faces can be scan-filled, which isn't always true,
* worst case we over allocate a little which is acceptable. */
const int looptris_tot = poly_to_tri_count(bm->totface, bm->totloop);
const int looptris_tot_prev_alloc = em->looptris ?
(MEM_allocN_len(em->looptris) / sizeof(*em->looptris)) :
0;
BMLoop *(*looptris)[3];
/* This means no reallocations for quad dominant models. */
if ((em->looptris != nullptr) &&
// (*em->tottri >= looptris_tot))
/* Check against allocated size in case we over allocated a little. */
((looptris_tot_prev_alloc >= looptris_tot) && (looptris_tot_prev_alloc <= looptris_tot * 2)))
{
looptris = em->looptris;
}
else {
if (em->looptris) {
MEM_freeN(em->looptris);
}
looptris = static_cast<BMLoop *(*)[3]>(
MEM_mallocN(sizeof(*looptris) * looptris_tot, __func__));
}
em->looptris = looptris;
em->tottri = looptris_tot;
/* after allocating the em->looptris, we're ready to tessellate */
BM_mesh_calc_tessellation_ex(em->bm, em->looptris, params);
}
void BKE_editmesh_looptris_calc_ex(BMEditMesh *em, const BMeshCalcTessellation_Params *params)
{
editmesh_tessface_calc_intern(em, params);
BMesh *bm = em->bm;
em->looptris.reinitialize(poly_to_tri_count(bm->totface, bm->totloop));
BM_mesh_calc_tessellation_ex(em->bm, em->looptris, params);
}
void BKE_editmesh_looptris_calc(BMEditMesh *em)
@ -127,8 +90,8 @@ void BKE_editmesh_looptris_calc_with_partial_ex(BMEditMesh *em,
BMPartialUpdate *bmpinfo,
const BMeshCalcTessellation_Params *params)
{
BLI_assert(em->tottri == poly_to_tri_count(em->bm->totface, em->bm->totloop));
BLI_assert(em->looptris != nullptr);
BLI_assert(em->looptris.size() == poly_to_tri_count(em->bm->totface, em->bm->totloop));
BLI_assert(!em->looptris.is_empty());
BM_mesh_calc_tessellation_with_partial_ex(em->bm, em->looptris, bmpinfo, params);
}
@ -152,10 +115,7 @@ void BKE_editmesh_looptris_and_normals_calc_with_partial(BMEditMesh *em, BMParti
void BKE_editmesh_free_data(BMEditMesh *em)
{
if (em->looptris) {
MEM_freeN(em->looptris);
}
em->looptris = {};
if (em->bm) {
BM_mesh_free(em->bm);

View File

@ -16,11 +16,12 @@
#include "BKE_editmesh_bvh.h" /* own include */
using blender::Span;
struct BMBVHTree {
BVHTree *tree;
BMLoop *(*looptris)[3];
int looptris_tot;
Span<std::array<BMLoop *, 3>> looptris;
BMesh *bm;
@ -35,12 +36,11 @@ BMBVHTree *BKE_bmbvh_new_from_editmesh(BMEditMesh *em,
const float (*cos_cage)[3],
const bool cos_cage_free)
{
return BKE_bmbvh_new(em->bm, em->looptris, em->tottri, flag, cos_cage, cos_cage_free);
return BKE_bmbvh_new(em->bm, em->looptris, flag, cos_cage, cos_cage_free);
}
BMBVHTree *BKE_bmbvh_new_ex(BMesh *bm,
BMLoop *(*looptris)[3],
int looptris_tot,
const Span<std::array<BMLoop *, 3>> looptris,
int flag,
const float (*cos_cage)[3],
const bool cos_cage_free,
@ -59,14 +59,13 @@ BMBVHTree *BKE_bmbvh_new_ex(BMesh *bm,
bool test_fn_ret;
/* BKE_editmesh_looptris_calc() must be called already */
BLI_assert(looptris_tot != 0 || bm->totface == 0);
BLI_assert(looptris.size() != 0 || bm->totface == 0);
if (cos_cage) {
BM_mesh_elem_index_ensure(bm, BM_VERT);
}
bmtree->looptris = looptris;
bmtree->looptris_tot = looptris_tot;
bmtree->bm = bm;
bmtree->cos_cage = cos_cage;
bmtree->cos_cage_free = cos_cage_free;
@ -80,7 +79,7 @@ BMBVHTree *BKE_bmbvh_new_ex(BMesh *bm,
test_fn_ret = false;
tottri = 0;
for (int i = 0; i < looptris_tot; i++) {
for (const int i : looptris.index_range()) {
f_test = looptris[i][0]->f;
if (f_test != f_test_prev) {
test_fn_ret = test_fn(f_test, user_data);
@ -93,7 +92,7 @@ BMBVHTree *BKE_bmbvh_new_ex(BMesh *bm,
}
}
else {
tottri = looptris_tot;
tottri = looptris.size();
}
bmtree->tree = BLI_bvhtree_new(tottri, epsilon, 8, 8);
@ -101,7 +100,7 @@ BMBVHTree *BKE_bmbvh_new_ex(BMesh *bm,
f_test_prev = nullptr;
test_fn_ret = false;
for (int i = 0; i < looptris_tot; i++) {
for (const int i : looptris.index_range()) {
if (test_fn) {
/* NOTE: the arrays won't align now! Take care. */
f_test = looptris[i][0]->f;
@ -145,8 +144,7 @@ static bool bm_face_is_not_hidden(BMFace *f, void * /*user_data*/)
}
BMBVHTree *BKE_bmbvh_new(BMesh *bm,
BMLoop *(*looptris)[3],
int looptris_tot,
const Span<std::array<BMLoop *, 3>> looptris,
int flag,
const float (*cos_cage)[3],
const bool cos_cage_free)
@ -165,8 +163,7 @@ BMBVHTree *BKE_bmbvh_new(BMesh *bm,
flag &= ~(BMBVH_RESPECT_SELECT | BMBVH_RESPECT_HIDDEN);
return BKE_bmbvh_new_ex(
bm, looptris, looptris_tot, flag, cos_cage, cos_cage_free, test_fn, nullptr);
return BKE_bmbvh_new_ex(bm, looptris, flag, cos_cage, cos_cage_free, test_fn, nullptr);
}
void BKE_bmbvh_free(BMBVHTree *bmtree)
@ -192,7 +189,7 @@ BVHTree *BKE_bmbvh_tree_get(BMBVHTree *bmtree)
* Return the coords from a triangle.
*/
static void bmbvh_tri_from_face(const float *cos[3],
const BMLoop **ltri,
const std::array<BMLoop *, 3> ltri,
const float (*cos_cage)[3])
{
if (cos_cage == nullptr) {
@ -214,7 +211,7 @@ static void bmbvh_tri_from_face(const float *cos[3],
struct RayCastUserData {
/* from the bmtree */
const BMLoop *(*looptris)[3];
Span<std::array<BMLoop *, 3>> looptris;
const float (*cos_cage)[3];
/* from the hit */
@ -230,7 +227,7 @@ static BMFace *bmbvh_ray_cast_handle_hit(BMBVHTree *bmtree,
{
if (r_hitout) {
if (bmtree->flag & BMBVH_RETURN_ORIG) {
BMLoop **ltri = bmtree->looptris[hit->index];
std::array<BMLoop *, 3> ltri = bmtree->looptris[hit->index];
interp_v3_v3v3v3_uv(r_hitout, ltri[0]->v->co, ltri[1]->v->co, ltri[2]->v->co, bmcb_data->uv);
}
else {
@ -252,7 +249,7 @@ static BMFace *bmbvh_ray_cast_handle_hit(BMBVHTree *bmtree,
static void bmbvh_ray_cast_cb(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
{
RayCastUserData *bmcb_data = static_cast<RayCastUserData *>(userdata);
const BMLoop **ltri = bmcb_data->looptris[index];
const std::array<BMLoop *, 3> ltri = bmcb_data->looptris[index];
float dist, uv[2];
const float *tri_cos[3];
bool isect;
@ -309,7 +306,7 @@ BMFace *BKE_bmbvh_ray_cast(BMBVHTree *bmtree,
hit.index = -1;
/* ok to leave 'uv' uninitialized */
bmcb_data.looptris = const_cast<const BMLoop *(*)[3]>(bmtree->looptris);
bmcb_data.looptris = bmtree->looptris;
bmcb_data.cos_cage = bmtree->cos_cage;
BLI_bvhtree_ray_cast(bmtree->tree, co, dir, radius, &hit, bmbvh_ray_cast_cb, &bmcb_data);
@ -341,7 +338,7 @@ static void bmbvh_ray_cast_cb_filter(void *userdata,
{
RayCastUserData_Filter *bmcb_data_filter = static_cast<RayCastUserData_Filter *>(userdata);
RayCastUserData *bmcb_data = &bmcb_data_filter->bmcb_data;
const BMLoop **ltri = bmcb_data->looptris[index];
const std::array<BMLoop *, 3> ltri = bmcb_data->looptris[index];
if (bmcb_data_filter->filter_cb(ltri[0]->f, bmcb_data_filter->filter_userdata)) {
bmbvh_ray_cast_cb(bmcb_data, index, ray, hit);
}
@ -374,7 +371,7 @@ BMFace *BKE_bmbvh_ray_cast_filter(BMBVHTree *bmtree,
hit.index = -1;
/* ok to leave 'uv' uninitialized */
bmcb_data->looptris = const_cast<const BMLoop *(*)[3]>(bmtree->looptris);
bmcb_data->looptris = bmtree->looptris;
bmcb_data->cos_cage = bmtree->cos_cage;
BLI_bvhtree_ray_cast(
@ -391,7 +388,7 @@ BMFace *BKE_bmbvh_ray_cast_filter(BMBVHTree *bmtree,
struct VertSearchUserData {
/* from the bmtree */
const BMLoop *(*looptris)[3];
Span<std::array<BMLoop *, 3>> looptris;
const float (*cos_cage)[3];
/* from the hit */
@ -405,7 +402,7 @@ static void bmbvh_find_vert_closest_cb(void *userdata,
BVHTreeNearest *hit)
{
VertSearchUserData *bmcb_data = static_cast<VertSearchUserData *>(userdata);
const BMLoop **ltri = bmcb_data->looptris[index];
const std::array<BMLoop *, 3> ltri = bmcb_data->looptris[index];
const float dist_max_sq = bmcb_data->dist_max_sq;
const float *tri_cos[3];
@ -437,13 +434,13 @@ BMVert *BKE_bmbvh_find_vert_closest(BMBVHTree *bmtree, const float co[3], const
hit.dist_sq = dist_max_sq;
hit.index = -1;
bmcb_data.looptris = const_cast<const BMLoop *(*)[3]>(bmtree->looptris);
bmcb_data.looptris = bmtree->looptris;
bmcb_data.cos_cage = bmtree->cos_cage;
bmcb_data.dist_max_sq = dist_max_sq;
BLI_bvhtree_find_nearest(bmtree->tree, co, &hit, bmbvh_find_vert_closest_cb, &bmcb_data);
if (hit.index != -1) {
BMLoop **ltri = bmtree->looptris[hit.index];
const std::array<BMLoop *, 3> ltri = bmtree->looptris[hit.index];
return ltri[bmcb_data.index_tri]->v;
}
@ -452,7 +449,7 @@ BMVert *BKE_bmbvh_find_vert_closest(BMBVHTree *bmtree, const float co[3], const
struct FaceSearchUserData {
/* from the bmtree */
const BMLoop *(*looptris)[3];
Span<std::array<BMLoop *, 3>> looptris;
const float (*cos_cage)[3];
/* from the hit */
@ -465,7 +462,7 @@ static void bmbvh_find_face_closest_cb(void *userdata,
BVHTreeNearest *hit)
{
FaceSearchUserData *bmcb_data = static_cast<FaceSearchUserData *>(userdata);
const BMLoop **ltri = bmcb_data->looptris[index];
const std::array<BMLoop *, 3> ltri = bmcb_data->looptris[index];
const float dist_max_sq = bmcb_data->dist_max_sq;
const float *tri_cos[3];
@ -496,13 +493,13 @@ BMFace *BKE_bmbvh_find_face_closest(BMBVHTree *bmtree, const float co[3], const
hit.dist_sq = dist_max_sq;
hit.index = -1;
bmcb_data.looptris = const_cast<const BMLoop *(*)[3]>(bmtree->looptris);
bmcb_data.looptris = bmtree->looptris;
bmcb_data.cos_cage = bmtree->cos_cage;
bmcb_data.dist_max_sq = dist_max_sq;
BLI_bvhtree_find_nearest(bmtree->tree, co, &hit, bmbvh_find_face_closest_cb, &bmcb_data);
if (hit.index != -1) {
BMLoop **ltri = bmtree->looptris[hit.index];
const std::array<BMLoop *, 3> ltri = bmtree->looptris[hit.index];
return ltri[0]->f;
}
@ -523,8 +520,8 @@ static bool bmbvh_overlap_cb(void *userdata, int index_a, int index_b, int /*thr
const BMBVHTree *bmtree_a = data->tree_pair[0];
const BMBVHTree *bmtree_b = data->tree_pair[1];
BMLoop **tri_a = bmtree_a->looptris[index_a];
BMLoop **tri_b = bmtree_b->looptris[index_b];
const std::array<BMLoop *, 3> tri_a = bmtree_a->looptris[index_a];
const std::array<BMLoop *, 3> tri_b = bmtree_b->looptris[index_b];
const float *tri_a_co[3] = {tri_a[0]->v->co, tri_a[1]->v->co, tri_a[2]->v->co};
const float *tri_b_co[3] = {tri_b[0]->v->co, tri_b[1]->v->co, tri_b[2]->v->co};
float ix_pair[2][3];

View File

@ -59,7 +59,7 @@ struct SGLSLEditMeshToTangent {
const BMLoop *GetLoop(const uint face_num, uint vert_index)
{
// BLI_assert(vert_index >= 0 && vert_index < 4);
const BMLoop **lt;
std::array<BMLoop *, 3> lt;
const BMLoop *l;
#ifdef USE_LOOPTRI_DETECT_QUADS
@ -129,7 +129,7 @@ struct SGLSLEditMeshToTangent {
const float (*precomputedFaceNormals)[3];
const float (*precomputedLoopNormals)[3];
const BMLoop *(*looptris)[3];
blender::Span<std::array<BMLoop *, 3>> looptris;
int cd_loop_uv_offset; /* texture coordinates */
const float (*orco)[3];
float (*tangent)[4]; /* destination */
@ -207,13 +207,13 @@ void BKE_editmesh_loop_tangent_calc(BMEditMesh *em,
BKE_mesh_add_loop_tangent_named_layer_for_uv(
&bm->ldata, loopdata_out, int(loopdata_out_len), ren_uv_name);
}
int totface = em->tottri;
int totface = em->looptris.size();
#ifdef USE_LOOPTRI_DETECT_QUADS
int num_face_as_quad_map;
int *face_as_quad_map = nullptr;
/* map faces to quads */
if (em->tottri != bm->totface) {
if (em->looptris.size() != bm->totface) {
/* Over allocate, since we don't know how many ngon or quads we have. */
/* map fake face index to looptri */
@ -233,7 +233,7 @@ void BKE_editmesh_loop_tangent_calc(BMEditMesh *em,
}
#endif
/* Calculation */
if (em->tottri != 0) {
if (em->looptris.size() != 0) {
TaskPool *task_pool;
task_pool = BLI_task_pool_create(nullptr, TASK_PRIORITY_HIGH);
@ -248,7 +248,7 @@ void BKE_editmesh_loop_tangent_calc(BMEditMesh *em,
index = CustomData_get_layer_index_n(loopdata_out, CD_TANGENT, n);
BLI_assert(n < MAX_MTFACE);
SGLSLEditMeshToTangent *mesh2tangent = &data_array[n];
mesh2tangent->numTessFaces = em->tottri;
mesh2tangent->numTessFaces = em->looptris.size();
#ifdef USE_LOOPTRI_DETECT_QUADS
mesh2tangent->face_as_quad_map = face_as_quad_map;
mesh2tangent->num_face_as_quad_map = num_face_as_quad_map;
@ -285,7 +285,7 @@ void BKE_editmesh_loop_tangent_calc(BMEditMesh *em,
}
BM_mesh_elem_index_ensure(bm, htype_index);
mesh2tangent->looptris = const_cast<const BMLoop *(*)[3]>(em->looptris);
mesh2tangent->looptris = em->looptris;
mesh2tangent->tangent = static_cast<float(*)[4]>(loopdata_out->layers[index].data);
BLI_task_pool_push(

View File

@ -1749,9 +1749,9 @@ Material *BKE_gpencil_object_material_ensure_from_active_input_toolsettings(Main
Object *ob,
ToolSettings *ts)
{
if (ts && ts->gp_paint && ts->gp_paint->paint.brush) {
if (ts && ts->gp_paint && BKE_paint_brush(&ts->gp_paint->paint)) {
return BKE_gpencil_object_material_ensure_from_active_input_brush(
bmain, ob, ts->gp_paint->paint.brush);
bmain, ob, BKE_paint_brush(&ts->gp_paint->paint));
}
return BKE_gpencil_object_material_ensure_from_active_input_brush(bmain, ob, nullptr);

View File

@ -6,6 +6,8 @@
* \ingroup bke
*/
#include <optional>
#include <fmt/format.h>
#include "BKE_anim_data.hh"
@ -19,15 +21,20 @@
#include "BKE_grease_pencil_legacy_convert.hh"
#include "BKE_idprop.hh"
#include "BKE_lib_id.hh"
#include "BKE_lib_remap.hh"
#include "BKE_main.hh"
#include "BKE_material.h"
#include "BKE_modifier.hh"
#include "BKE_node.hh"
#include "BKE_node_tree_update.hh"
#include "BKE_object.hh"
#include "BLO_readfile.hh"
#include "BLI_color.hh"
#include "BLI_function_ref.hh"
#include "BLI_listbase.h"
#include "BLI_map.hh"
#include "BLI_math_matrix.h"
#include "BLI_math_vector_types.hh"
#include "BLI_string.h"
@ -157,7 +164,7 @@ static void find_used_vertex_groups(const bGPDframe &gpf,
}
/*
* This takes the legacy uv tranforms and returns the stroke-space to texture-space matrix.
* This takes the legacy UV transforms and returns the stroke-space to texture-space matrix.
*/
static float3x2 get_legacy_stroke_to_texture_matrix(const float2 uv_translation,
const float uv_rotation,
@ -628,11 +635,10 @@ static bNodeTree *add_offset_radius_node_tree(Main &bmain)
}
group->geometry_node_asset_traits->flag |= GEO_NODE_ASSET_MODIFIER;
group->tree_interface.add_socket(DATA_("Geometry"),
"",
"NodeSocketGeometry",
NODE_INTERFACE_SOCKET_INPUT | NODE_INTERFACE_SOCKET_OUTPUT,
nullptr);
group->tree_interface.add_socket(
DATA_("Geometry"), "", "NodeSocketGeometry", NODE_INTERFACE_SOCKET_INPUT, nullptr);
group->tree_interface.add_socket(
DATA_("Geometry"), "", "NodeSocketGeometry", NODE_INTERFACE_SOCKET_OUTPUT, nullptr);
bNodeTreeInterfaceSocket *radius_offset = group->tree_interface.add_socket(
DATA_("Offset"), "", "NodeSocketFloat", NODE_INTERFACE_SOCKET_INPUT, nullptr);
@ -676,11 +682,11 @@ static bNodeTree *add_offset_radius_node_tree(Main &bmain)
set_curve_radius,
nodeFindSocket(set_curve_radius, SOCK_OUT, "Curve"),
group_output,
nodeFindSocket(group_output, SOCK_IN, "Socket_0"));
nodeFindSocket(group_output, SOCK_IN, "Socket_1"));
nodeAddLink(group,
group_input,
nodeFindSocket(group_input, SOCK_OUT, "Socket_2"),
nodeFindSocket(group_input, SOCK_OUT, "Socket_3"),
named_layer_selection,
nodeFindSocket(named_layer_selection, SOCK_IN, "Name"));
nodeAddLink(group,
@ -691,7 +697,7 @@ static bNodeTree *add_offset_radius_node_tree(Main &bmain)
nodeAddLink(group,
group_input,
nodeFindSocket(group_input, SOCK_OUT, "Socket_1"),
nodeFindSocket(group_input, SOCK_OUT, "Socket_2"),
add,
nodeFindSocket(add, SOCK_IN, "Value"));
nodeAddLink(group,
@ -781,14 +787,14 @@ void layer_adjustments_to_modifiers(Main &bmain,
md->settings.properties = bke::idprop::create_group("Nodes Modifier Settings").release();
IDProperty *radius_offset_prop =
bke::idprop::create(DATA_("Socket_1"), radius_offset).release();
bke::idprop::create(DATA_("Socket_2"), radius_offset).release();
auto *ui_data = reinterpret_cast<IDPropertyUIDataFloat *>(
IDP_ui_data_ensure(radius_offset_prop));
ui_data->soft_min = 0.0f;
ui_data->base.rna_subtype = PROP_TRANSLATION;
IDP_AddToGroup(md->settings.properties, radius_offset_prop);
IDP_AddToGroup(md->settings.properties,
bke::idprop::create(DATA_("Socket_2"), gpl->info).release());
bke::idprop::create(DATA_("Socket_3"), gpl->info).release());
}
}
@ -2024,21 +2030,41 @@ static void legacy_object_modifiers(Main & /*bmain*/, Object &object)
}
}
void legacy_gpencil_object(Main &bmain, Object &object)
static void legacy_gpencil_object_ex(
Main &bmain,
Object &object,
std::optional<blender::Map<bGPdata *, GreasePencil *>> legacy_to_greasepencil_data)
{
bGPdata *gpd = static_cast<bGPdata *>(object.data);
BLI_assert((GS(static_cast<ID *>(object.data)->name) == ID_GD_LEGACY));
bGPdata *gpd = static_cast<bGPdata *>(object.data);
GreasePencil *new_grease_pencil = nullptr;
bool do_gpencil_data_conversion = true;
if (legacy_to_greasepencil_data) {
new_grease_pencil = legacy_to_greasepencil_data->lookup_default(gpd, nullptr);
do_gpencil_data_conversion = (new_grease_pencil == nullptr);
}
if (!new_grease_pencil) {
new_grease_pencil = static_cast<GreasePencil *>(
BKE_id_new_in_lib(&bmain, gpd->id.lib, ID_GP, gpd->id.name + 2));
id_us_min(&new_grease_pencil->id);
}
GreasePencil *new_grease_pencil = static_cast<GreasePencil *>(
BKE_id_new(&bmain, ID_GP, gpd->id.name + 2));
object.data = new_grease_pencil;
object.type = OB_GREASE_PENCIL;
/* NOTE: Could also use #BKE_id_free_us, to also free the legacy GP if not used anymore? */
id_us_min(&gpd->id);
/* No need to increase user-count of `new_grease_pencil`,
* since ID creation already set it to 1. */
id_us_plus(&new_grease_pencil->id);
legacy_gpencil_to_grease_pencil(bmain, *new_grease_pencil, *gpd);
if (do_gpencil_data_conversion) {
legacy_gpencil_to_grease_pencil(bmain, *new_grease_pencil, *gpd);
if (legacy_to_greasepencil_data) {
legacy_to_greasepencil_data->add(gpd, new_grease_pencil);
}
}
legacy_object_modifiers(bmain, object);
@ -2050,6 +2076,45 @@ void legacy_gpencil_object(Main &bmain, Object &object)
BKE_object_free_derived_caches(&object);
}
void legacy_gpencil_object(Main &bmain, Object &object)
{
legacy_gpencil_object_ex(bmain, object, std::nullopt);
}
void legacy_main(Main &bmain, BlendFileReadReport & /*reports*/)
{
/* Allows to convert a legacy GPencil data only once, in case it's used by several objects. */
blender::Map<bGPdata *, GreasePencil *> legacy_to_greasepencil_data;
LISTBASE_FOREACH (Object *, object, &bmain.objects) {
if (object->type != OB_GPENCIL_LEGACY) {
continue;
}
legacy_gpencil_object_ex(bmain, *object, std::make_optional(legacy_to_greasepencil_data));
}
/* Potential other usages of legacy bGPdata IDs also need to be remapped to their matching new
* GreasePencil counterparts. */
blender::bke::id::IDRemapper gpd_remapper;
/* Allow remapping from legacy bGPdata IDs to new GreasePencil ones. */
gpd_remapper.allow_idtype_mismatch = true;
LISTBASE_FOREACH (bGPdata *, legacy_gpd, &bmain.gpencils) {
GreasePencil *new_grease_pencil = legacy_to_greasepencil_data.lookup_default(legacy_gpd,
nullptr);
if (!new_grease_pencil) {
new_grease_pencil = static_cast<GreasePencil *>(
BKE_id_new_in_lib(&bmain, legacy_gpd->id.lib, ID_GP, legacy_gpd->id.name + 2));
id_us_min(&new_grease_pencil->id);
legacy_gpencil_to_grease_pencil(bmain, *new_grease_pencil, *legacy_gpd);
legacy_to_greasepencil_data.add(legacy_gpd, new_grease_pencil);
}
gpd_remapper.add(&legacy_gpd->id, &new_grease_pencil->id);
}
BKE_libblock_remap_multiple(&bmain, gpd_remapper, ID_REMAP_ALLOW_IDTYPE_MISMATCH);
}
void lineart_wrap_v3(const LineartGpencilModifierData *lmd_legacy,
GreasePencilLineartModifierData *lmd)
{

View File

@ -88,7 +88,7 @@
#include "SEQ_utils.hh" /* SEQ_get_topmost_sequence() */
#include "GPU_material.hh"
#include "GPU_texture.h"
#include "GPU_texture.hh"
#include "BLI_sys_types.h" /* for intptr_t support */

View File

@ -26,9 +26,9 @@
#include "BKE_image_partial_update.hh"
#include "BKE_main.hh"
#include "GPU_capabilities.h"
#include "GPU_state.h"
#include "GPU_texture.h"
#include "GPU_capabilities.hh"
#include "GPU_state.hh"
#include "GPU_texture.hh"
using namespace blender::bke::image::partial_update;

View File

@ -36,6 +36,7 @@
#include "BKE_idprop.hh"
#include "BKE_lib_id.hh"
#include "BKE_main.hh"
#include "BKE_main_namemap.hh"
#include "BKE_mesh.hh"
#include "BKE_mesh_legacy_convert.hh"
#include "BKE_modifier.hh"
@ -816,7 +817,7 @@ void BKE_mesh_do_versions_convert_mfaces_to_mpolys(Mesh *mesh)
/* -------------------------------------------------------------------- */
/** \name MFace Tessellation
*
* #MFace is a legacy data-structure that should be avoided, use #MLoopTri instead.
* #MFace is a legacy data-structure that should be avoided, use #Mesh::corner_tris() instead.
* \{ */
#define MESH_MLOOPCOL_TO_MCOL(_mloopcol, _mcol) \
@ -2380,6 +2381,7 @@ void BKE_main_mesh_legacy_convert_auto_smooth(Main &bmain)
/* Move the node group to the requested library so that library data-blocks don't point to
* local data-blocks. This requires making sure the name is unique in that library and
* changing the name maps to be consistent with the new state. */
BKE_main_namemap_remove_name(&bmain, &new_group->id, new_group->id.name + 2);
new_group->id.lib = library;
BKE_id_new_name_validate(&bmain, &bmain.nodetrees, &new_group->id, nullptr, false);
if (library) {

View File

@ -65,7 +65,7 @@
#include "DRW_engine.hh"
#include "GPU_texture.h"
#include "GPU_texture.hh"
#include "BLO_read_write.hh"

View File

@ -260,7 +260,7 @@ void BKE_paint_invalidate_overlay_tex(Scene *scene, ViewLayer *view_layer, const
return;
}
Brush *br = p->brush;
Brush *br = BKE_paint_brush(p);
if (!br) {
return;
}
@ -280,7 +280,7 @@ void BKE_paint_invalidate_cursor_overlay(Scene *scene, ViewLayer *view_layer, Cu
return;
}
Brush *br = p->brush;
Brush *br = BKE_paint_brush(p);
if (br && br->curve == curve) {
overlay_flags |= PAINT_OVERLAY_INVALID_CURVE;
}

View File

@ -255,14 +255,14 @@ size_t BKE_preferences_extension_repo_dirpath_get(const bUserExtensionRepo *repo
return BLI_strncpy_rlen(dirpath, repo->custom_dirpath, dirpath_maxncpy);
}
/* TODO: support `BLENDER_USER_EXTENSIONS`, until then add to user resource. */
std::optional<std::string> path = BKE_appdir_resource_path_id(BLENDER_RESOURCE_PATH_USER, false);
std::optional<std::string> path = BKE_appdir_folder_id_user_notest(BLENDER_USER_EXTENSIONS,
nullptr);
/* Highly unlikely to fail as the directory doesn't have to exist. */
if (!path) {
dirpath[0] = '\0';
return 0;
}
return BLI_path_join(dirpath, dirpath_maxncpy, path.value().c_str(), "extensions", repo->module);
return BLI_path_join(dirpath, dirpath_maxncpy, path.value().c_str(), repo->module);
}
bUserExtensionRepo *BKE_preferences_extension_repo_find_index(const UserDef *userdef, int index)

View File

@ -31,7 +31,7 @@
#include "BLO_read_write.hh"
#include "GPU_texture.h"
#include "GPU_texture.hh"
#include "IMB_imbuf.hh"
#include "IMB_thumbs.hh"

View File

@ -333,14 +333,6 @@ static void scene_copy_data(Main *bmain,
/* tool settings */
scene_dst->toolsettings = BKE_toolsettings_copy(scene_dst->toolsettings, flag_subdata);
/* make a private copy of the avicodecdata */
if (scene_src->r.avicodecdata) {
scene_dst->r.avicodecdata = static_cast<AviCodecData *>(
MEM_dupallocN(scene_src->r.avicodecdata));
scene_dst->r.avicodecdata->lpFormat = MEM_dupallocN(scene_dst->r.avicodecdata->lpFormat);
scene_dst->r.avicodecdata->lpParms = MEM_dupallocN(scene_dst->r.avicodecdata->lpParms);
}
if (scene_src->display.shading.prop) {
scene_dst->display.shading.prop = IDP_CopyProperty(scene_src->display.shading.prop);
}
@ -411,12 +403,6 @@ static void scene_free_data(ID *id)
BKE_rigidbody_free_world(scene);
}
if (scene->r.avicodecdata) {
free_avicodecdata(scene->r.avicodecdata);
MEM_freeN(scene->r.avicodecdata);
scene->r.avicodecdata = nullptr;
}
scene_free_markers(scene, do_id_user);
BLI_freelistN(&scene->transform_spaces);
BLI_freelistN(&scene->r.views);
@ -1130,16 +1116,6 @@ static void scene_blend_write(BlendWriter *writer, ID *id, const void *id_addres
}
}
if (sce->r.avicodecdata) {
BLO_write_struct(writer, AviCodecData, sce->r.avicodecdata);
if (sce->r.avicodecdata->lpFormat) {
BLO_write_raw(writer, size_t(sce->r.avicodecdata->cbFormat), sce->r.avicodecdata->lpFormat);
}
if (sce->r.avicodecdata->lpParms) {
BLO_write_raw(writer, size_t(sce->r.avicodecdata->cbParms), sce->r.avicodecdata->lpParms);
}
}
/* writing dynamic list of TimeMarkers to the blend file */
LISTBASE_FOREACH (TimeMarker *, marker, &sce->markers) {
BLO_write_struct(writer, TimeMarker, marker);
@ -1450,11 +1426,6 @@ static void scene_blend_read_data(BlendDataReader *reader, ID *id)
sce->r.mode &= ~R_NO_CAMERA_SWITCH;
#endif
BLO_read_data_address(reader, &sce->r.avicodecdata);
if (sce->r.avicodecdata) {
BLO_read_data_address(reader, &sce->r.avicodecdata->lpFormat);
BLO_read_data_address(reader, &sce->r.avicodecdata->lpParms);
}
BLO_read_list(reader, &(sce->markers));
LISTBASE_FOREACH (TimeMarker *, marker, &sce->markers) {
BLO_read_data_address(reader, &marker->prop);
@ -1650,22 +1621,6 @@ const char *RE_engine_id_BLENDER_EEVEE_NEXT = "BLENDER_EEVEE_NEXT";
const char *RE_engine_id_BLENDER_WORKBENCH = "BLENDER_WORKBENCH";
const char *RE_engine_id_CYCLES = "CYCLES";
void free_avicodecdata(AviCodecData *acd)
{
if (acd) {
if (acd->lpFormat) {
MEM_freeN(acd->lpFormat);
acd->lpFormat = nullptr;
acd->cbFormat = 0;
}
if (acd->lpParms) {
MEM_freeN(acd->lpParms);
acd->lpParms = nullptr;
acd->cbParms = 0;
}
}
}
static void remove_sequencer_fcurves(Scene *sce)
{
AnimData *adt = BKE_animdata_from_id(&sce->id);
@ -1878,13 +1833,6 @@ Scene *BKE_scene_duplicate(Main *bmain, Scene *sce, eSceneCopyMethod type)
BKE_toolsettings_free(sce_copy->toolsettings);
sce_copy->toolsettings = BKE_toolsettings_copy(sce->toolsettings, 0);
/* make a private copy of the avicodecdata */
if (sce->r.avicodecdata) {
sce_copy->r.avicodecdata = static_cast<AviCodecData *>(MEM_dupallocN(sce->r.avicodecdata));
sce_copy->r.avicodecdata->lpFormat = MEM_dupallocN(sce_copy->r.avicodecdata->lpFormat);
sce_copy->r.avicodecdata->lpParms = MEM_dupallocN(sce_copy->r.avicodecdata->lpParms);
}
BKE_sound_reset_scene_runtime(sce_copy);
/* grease pencil */

View File

@ -27,7 +27,7 @@
#include "IMB_interp.hh"
#include "IMB_openexr.hh"
#include "GPU_texture.h"
#include "GPU_texture.hh"
#include "MEM_guardedalloc.h"

View File

@ -16,8 +16,8 @@
#include "BKE_modifier.hh"
#include "BKE_subdiv.hh"
#include "GPU_capabilities.h"
#include "GPU_context.h"
#include "GPU_capabilities.hh"
#include "GPU_context.hh"
SubdivSettings BKE_subsurf_modifier_settings_init(const SubsurfModifierData *smd,
const bool use_render_params)

View File

@ -31,3 +31,13 @@ bool BLO_main_validate_shapekeys(Main *bmain, ReportList *reports);
* was split in `ID.tag`, which can create crashing situations in some rare cases, see #117795.
*/
void BLO_main_validate_embedded_liboverrides(Main *bmain, ReportList *reports);
/**
* Check that the `LIB_EMBEDDED_DATA` flag is correctly set for embedded IDs, and not for any Main
* ID.
*
* NOTE: It is unknown why/how this can happen, but there are some files out there that have e.g.
* Objects flagged as embedded data... See e.g. the `(Anim) Hero p23 for 2.blend` file from our
* cloud gallery (https://cloud.blender.org/p/gallery/5b642e25bf419c1042056fc6).
*/
void BLO_main_validate_embedded_flag(Main *bmain, ReportList *reports);

View File

@ -13,6 +13,8 @@
#include <cstring> /* for #strrchr #strncmp #strstr */
#include "CLG_log.h"
#include "BLI_utildefines.h"
#include "BLI_linklist.h"
@ -38,6 +40,8 @@
#include "readfile.hh"
static CLG_LogRef LOG = {"blo.blend_validate"};
bool BLO_main_validate_libraries(Main *bmain, ReportList *reports)
{
ListBase mainlist;
@ -234,3 +238,37 @@ void BLO_main_validate_embedded_liboverrides(Main *bmain, ReportList * /*reports
}
FOREACH_MAIN_ID_END;
}
void BLO_main_validate_embedded_flag(Main *bmain, ReportList * /*reports*/)
{
ID *id_iter;
FOREACH_MAIN_ID_BEGIN (bmain, id_iter) {
if (id_iter->flag & LIB_EMBEDDED_DATA) {
CLOG_ERROR(
&LOG, "ID %s is flagged as embedded, while existing in Main data-base", id_iter->name);
id_iter->flag &= ~LIB_EMBEDDED_DATA;
}
bNodeTree *node_tree = ntreeFromID(id_iter);
if (node_tree) {
if ((node_tree->id.flag & LIB_EMBEDDED_DATA) == 0) {
CLOG_ERROR(&LOG,
"ID %s has an embedded nodetree which is not flagged as embedded",
id_iter->name);
node_tree->id.flag |= LIB_EMBEDDED_DATA;
}
}
if (GS(id_iter->name) == ID_SCE) {
Scene *scene = reinterpret_cast<Scene *>(id_iter);
if (scene->master_collection && (scene->master_collection->id.flag & LIB_EMBEDDED_DATA) == 0)
{
CLOG_ERROR(&LOG,
"ID %s has an embedded Collection which is not flagged as embedded",
id_iter->name);
scene->master_collection->id.flag |= LIB_EMBEDDED_DATA;
}
}
}
FOREACH_MAIN_ID_END;
}

View File

@ -3335,6 +3335,7 @@ static void after_liblink_merged_bmain_process(Main *bmain, BlendFileReadReport
* so simpler to just use it directly in this single call. */
BLO_main_validate_shapekeys(bmain, reports ? reports->reports : nullptr);
BLO_main_validate_embedded_flag(bmain, reports ? reports->reports : nullptr);
BLO_main_validate_embedded_liboverrides(bmain, reports ? reports->reports : nullptr);
/* We have to rebuild that runtime information *after* all data-blocks have been properly linked.

View File

@ -19,6 +19,7 @@
#include "BLI_string_ref.hh"
#include "BKE_animsys.h"
#include "BKE_grease_pencil_legacy_convert.hh"
#include "BKE_idprop.h"
#include "BKE_ipo.h"
#include "BKE_lib_id.hh"
@ -537,4 +538,10 @@ void do_versions_after_setup(Main *new_bmain, BlendFileReadReport *reports)
* been made idempotent. */
BKE_main_mesh_legacy_convert_auto_smooth(*new_bmain);
}
if (U.experimental.use_grease_pencil_version3 &&
U.experimental.use_grease_pencil_version3_convert_on_load)
{
blender::bke::greasepencil::convert::legacy_main(*new_bmain, *reports);
}
}

View File

@ -38,7 +38,7 @@
#include "BLT_translation.hh"
#include "GPU_platform.h"
#include "GPU_platform.hh"
#include "MEM_guardedalloc.h"

View File

@ -23,6 +23,8 @@
#include "bmesh.hh"
using blender::MutableSpan;
/**
* On systems with 32+ cores,
* only a very small number of faces has any advantage single threading (in the 100's).
@ -39,7 +41,7 @@
/**
* \param face_normal: This will be optimized out as a constant.
*/
BLI_INLINE void bmesh_calc_tessellation_for_face_impl(BMLoop *(*looptris)[3],
BLI_INLINE void bmesh_calc_tessellation_for_face_impl(std::array<BMLoop *, 3> *looptris,
BMFace *efa,
MemArena **pf_arena_p,
const bool face_normal)
@ -55,7 +57,7 @@ BLI_INLINE void bmesh_calc_tessellation_for_face_impl(BMLoop *(*looptris)[3],
case 3: {
/* `0 1 2` -> `0 1 2` */
BMLoop *l;
BMLoop **l_ptr = looptris[0];
BMLoop **l_ptr = looptris[0].data();
l_ptr[0] = l = BM_FACE_FIRST_LOOP(efa);
l_ptr[1] = l = l->next;
l_ptr[2] = l->next;
@ -67,8 +69,8 @@ BLI_INLINE void bmesh_calc_tessellation_for_face_impl(BMLoop *(*looptris)[3],
case 4: {
/* `0 1 2 3` -> (`0 1 2`, `0 2 3`) */
BMLoop *l;
BMLoop **l_ptr_a = looptris[0];
BMLoop **l_ptr_b = looptris[1];
BMLoop **l_ptr_a = looptris[0].data();
BMLoop **l_ptr_b = looptris[1].data();
(l_ptr_a[0] = l_ptr_b[0] = l = BM_FACE_FIRST_LOOP(efa));
(l_ptr_a[1] = l = l->next);
(l_ptr_a[2] = l_ptr_b[1] = l = l->next);
@ -125,7 +127,7 @@ BLI_INLINE void bmesh_calc_tessellation_for_face_impl(BMLoop *(*looptris)[3],
BLI_polyfill_calc_arena(projverts, efa->len, 1, tris, pf_arena);
for (i = 0; i < tris_len; i++) {
BMLoop **l_ptr = looptris[i];
BMLoop **l_ptr = looptris[i].data();
uint *tri = tris[i];
l_ptr[0] = l_arr[tri[0]];
@ -139,14 +141,14 @@ BLI_INLINE void bmesh_calc_tessellation_for_face_impl(BMLoop *(*looptris)[3],
}
}
static void bmesh_calc_tessellation_for_face(BMLoop *(*looptris)[3],
static void bmesh_calc_tessellation_for_face(std::array<BMLoop *, 3> *looptris,
BMFace *efa,
MemArena **pf_arena_p)
{
bmesh_calc_tessellation_for_face_impl(looptris, efa, pf_arena_p, false);
}
static void bmesh_calc_tessellation_for_face_with_normal(BMLoop *(*looptris)[3],
static void bmesh_calc_tessellation_for_face_with_normal(std::array<BMLoop *, 3> *looptris,
BMFace *efa,
MemArena **pf_arena_p)
{
@ -159,9 +161,8 @@ static void bmesh_calc_tessellation_for_face_with_normal(BMLoop *(*looptris)[3],
*
* \note \a looptris Must be pre-allocated to at least the size of given by: poly_to_tri_count
*/
static void bm_mesh_calc_tessellation__single_threaded(BMesh *bm,
BMLoop *(*looptris)[3],
const char face_normals)
static void bm_mesh_calc_tessellation__single_threaded(
BMesh *bm, MutableSpan<std::array<BMLoop *, 3>> looptris, const char face_normals)
{
#ifndef NDEBUG
const int looptris_tot = poly_to_tri_count(bm->totface, bm->totloop);
@ -177,14 +178,14 @@ static void bm_mesh_calc_tessellation__single_threaded(BMesh *bm,
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
BLI_assert(efa->len >= 3);
BM_face_calc_normal(efa, efa->no);
bmesh_calc_tessellation_for_face_with_normal(looptris + i, efa, &pf_arena);
bmesh_calc_tessellation_for_face_with_normal(looptris.data() + i, efa, &pf_arena);
i += efa->len - 2;
}
}
else {
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
BLI_assert(efa->len >= 3);
bmesh_calc_tessellation_for_face(looptris + i, efa, &pf_arena);
bmesh_calc_tessellation_for_face(looptris.data() + i, efa, &pf_arena);
i += efa->len - 2;
}
}
@ -206,7 +207,7 @@ static void bmesh_calc_tessellation_for_face_fn(void *__restrict userdata,
const TaskParallelTLS *__restrict tls)
{
TessellationUserTLS *tls_data = static_cast<TessellationUserTLS *>(tls->userdata_chunk);
BMLoop *(*looptris)[3] = static_cast<BMLoop *(*)[3]>(userdata);
std::array<BMLoop *, 3> *looptris = static_cast<std::array<BMLoop *, 3> *>(userdata);
BMFace *f = (BMFace *)mp_f;
BMLoop *l = BM_FACE_FIRST_LOOP(f);
const int offset = BM_elem_index_get(l) - (BM_elem_index_get(f) * 2);
@ -218,7 +219,7 @@ static void bmesh_calc_tessellation_for_face_with_normals_fn(void *__restrict us
const TaskParallelTLS *__restrict tls)
{
TessellationUserTLS *tls_data = static_cast<TessellationUserTLS *>(tls->userdata_chunk);
BMLoop *(*looptris)[3] = static_cast<BMLoop *(*)[3]>(userdata);
std::array<BMLoop *, 3> *looptris = static_cast<std::array<BMLoop *, 3> *>(userdata);
BMFace *f = (BMFace *)mp_f;
BMLoop *l = BM_FACE_FIRST_LOOP(f);
const int offset = BM_elem_index_get(l) - (BM_elem_index_get(f) * 2);
@ -234,9 +235,8 @@ static void bmesh_calc_tessellation_for_face_free_fn(const void *__restrict /*us
}
}
static void bm_mesh_calc_tessellation__multi_threaded(BMesh *bm,
BMLoop *(*looptris)[3],
const char face_normals)
static void bm_mesh_calc_tessellation__multi_threaded(
BMesh *bm, MutableSpan<std::array<BMLoop *, 3>> looptris, const char face_normals)
{
BM_mesh_elem_index_ensure(bm, BM_LOOP | BM_FACE);
@ -250,12 +250,12 @@ static void bm_mesh_calc_tessellation__multi_threaded(BMesh *bm,
BM_FACES_OF_MESH,
face_normals ? bmesh_calc_tessellation_for_face_with_normals_fn :
bmesh_calc_tessellation_for_face_fn,
looptris,
looptris.data(),
&settings);
}
void BM_mesh_calc_tessellation_ex(BMesh *bm,
BMLoop *(*looptris)[3],
MutableSpan<std::array<BMLoop *, 3>> looptris,
const BMeshCalcTessellation_Params *params)
{
if (bm->totface < BM_FACE_TESSELLATE_THREADED_LIMIT) {
@ -266,7 +266,7 @@ void BM_mesh_calc_tessellation_ex(BMesh *bm,
}
}
void BM_mesh_calc_tessellation(BMesh *bm, BMLoop *(*looptris)[3])
void BM_mesh_calc_tessellation(BMesh *bm, MutableSpan<std::array<BMLoop *, 3>> looptris)
{
BMeshCalcTessellation_Params params{};
params.face_normals = false;
@ -281,7 +281,7 @@ void BM_mesh_calc_tessellation(BMesh *bm, BMLoop *(*looptris)[3])
struct PartialTessellationUserData {
BMFace **faces;
BMLoop *(*looptris)[3];
MutableSpan<std::array<BMLoop *, 3>> looptris;
};
struct PartialTessellationUserTLS {
@ -298,7 +298,7 @@ static void bmesh_calc_tessellation_for_face_partial_fn(void *__restrict userdat
BMFace *f = data->faces[index];
BMLoop *l = BM_FACE_FIRST_LOOP(f);
const int offset = BM_elem_index_get(l) - (BM_elem_index_get(f) * 2);
bmesh_calc_tessellation_for_face(data->looptris + offset, f, &tls_data->pf_arena);
bmesh_calc_tessellation_for_face(data->looptris.data() + offset, f, &tls_data->pf_arena);
}
static void bmesh_calc_tessellation_for_face_partial_with_normals_fn(
@ -310,7 +310,8 @@ static void bmesh_calc_tessellation_for_face_partial_with_normals_fn(
BMFace *f = data->faces[index];
BMLoop *l = BM_FACE_FIRST_LOOP(f);
const int offset = BM_elem_index_get(l) - (BM_elem_index_get(f) * 2);
bmesh_calc_tessellation_for_face_with_normal(data->looptris + offset, f, &tls_data->pf_arena);
bmesh_calc_tessellation_for_face_with_normal(
data->looptris.data() + offset, f, &tls_data->pf_arena);
}
static void bmesh_calc_tessellation_for_face_partial_free_fn(const void *__restrict /*userdata*/,
@ -323,7 +324,7 @@ static void bmesh_calc_tessellation_for_face_partial_free_fn(const void *__restr
}
static void bm_mesh_calc_tessellation_with_partial__multi_threaded(
BMLoop *(*looptris)[3],
MutableSpan<std::array<BMLoop *, 3>> looptris,
const BMPartialUpdate *bmpinfo,
const BMeshCalcTessellation_Params *params)
{
@ -352,7 +353,7 @@ static void bm_mesh_calc_tessellation_with_partial__multi_threaded(
}
static void bm_mesh_calc_tessellation_with_partial__single_threaded(
BMLoop *(*looptris)[3],
MutableSpan<std::array<BMLoop *, 3>> looptris,
const BMPartialUpdate *bmpinfo,
const BMeshCalcTessellation_Params *params)
{
@ -366,7 +367,7 @@ static void bm_mesh_calc_tessellation_with_partial__single_threaded(
BMFace *f = faces[index];
BMLoop *l = BM_FACE_FIRST_LOOP(f);
const int offset = BM_elem_index_get(l) - (BM_elem_index_get(f) * 2);
bmesh_calc_tessellation_for_face_with_normal(looptris + offset, f, &pf_arena);
bmesh_calc_tessellation_for_face_with_normal(looptris.data() + offset, f, &pf_arena);
}
}
else {
@ -374,7 +375,7 @@ static void bm_mesh_calc_tessellation_with_partial__single_threaded(
BMFace *f = faces[index];
BMLoop *l = BM_FACE_FIRST_LOOP(f);
const int offset = BM_elem_index_get(l) - (BM_elem_index_get(f) * 2);
bmesh_calc_tessellation_for_face(looptris + offset, f, &pf_arena);
bmesh_calc_tessellation_for_face(looptris.data() + offset, f, &pf_arena);
}
}
@ -384,7 +385,7 @@ static void bm_mesh_calc_tessellation_with_partial__single_threaded(
}
void BM_mesh_calc_tessellation_with_partial_ex(BMesh *bm,
BMLoop *(*looptris)[3],
MutableSpan<std::array<BMLoop *, 3>> looptris,
const BMPartialUpdate *bmpinfo,
const BMeshCalcTessellation_Params *params)
{
@ -405,7 +406,7 @@ void BM_mesh_calc_tessellation_with_partial_ex(BMesh *bm,
}
void BM_mesh_calc_tessellation_with_partial(BMesh *bm,
BMLoop *(*looptris)[3],
MutableSpan<std::array<BMLoop *, 3>> looptris,
const BMPartialUpdate *bmpinfo)
{
BM_mesh_calc_tessellation_with_partial_ex(bm, looptris, bmpinfo, nullptr);
@ -419,7 +420,7 @@ void BM_mesh_calc_tessellation_with_partial(BMesh *bm,
* Avoid degenerate triangles.
* \{ */
static int bmesh_calc_tessellation_for_face_beauty(BMLoop *(*looptris)[3],
static int bmesh_calc_tessellation_for_face_beauty(std::array<BMLoop *, 3> *looptris,
BMFace *efa,
MemArena **pf_arena_p,
Heap **pf_heap_p)
@ -427,7 +428,7 @@ static int bmesh_calc_tessellation_for_face_beauty(BMLoop *(*looptris)[3],
switch (efa->len) {
case 3: {
BMLoop *l;
BMLoop **l_ptr = looptris[0];
BMLoop **l_ptr = looptris[0].data();
l_ptr[0] = l = BM_FACE_FIRST_LOOP(efa);
l_ptr[1] = l = l->next;
l_ptr[2] = l->next;
@ -459,8 +460,8 @@ static int bmesh_calc_tessellation_for_face_beauty(BMLoop *(*looptris)[3],
v_quad[0], v_quad[1], v_quad[2], v_quad[3]) < 0.0f;
#endif
BMLoop **l_ptr_a = looptris[0];
BMLoop **l_ptr_b = looptris[1];
BMLoop **l_ptr_a = looptris[0].data();
BMLoop **l_ptr_b = looptris[1].data();
if (split_13) {
l_ptr_a[0] = l_v1;
l_ptr_a[1] = l_v2;
@ -518,7 +519,7 @@ static int bmesh_calc_tessellation_for_face_beauty(BMLoop *(*looptris)[3],
BLI_polyfill_beautify(projverts, efa->len, tris, pf_arena, pf_heap);
for (i = 0; i < tris_len; i++) {
BMLoop **l_ptr = looptris[i];
BMLoop **l_ptr = looptris[i].data();
uint *tri = tris[i];
l_ptr[0] = l_arr[tri[0]];
@ -533,7 +534,7 @@ static int bmesh_calc_tessellation_for_face_beauty(BMLoop *(*looptris)[3],
}
}
void BM_mesh_calc_tessellation_beauty(BMesh *bm, BMLoop *(*looptris)[3])
void BM_mesh_calc_tessellation_beauty(BMesh *bm, MutableSpan<std::array<BMLoop *, 3>> looptris)
{
#ifndef NDEBUG
const int looptris_tot = poly_to_tri_count(bm->totface, bm->totloop);
@ -550,7 +551,7 @@ void BM_mesh_calc_tessellation_beauty(BMesh *bm, BMLoop *(*looptris)[3])
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
BLI_assert(efa->len >= 3);
i += bmesh_calc_tessellation_for_face_beauty(looptris + i, efa, &pf_arena, &pf_heap);
i += bmesh_calc_tessellation_for_face_beauty(looptris.data() + i, efa, &pf_arena, &pf_heap);
}
if (pf_arena) {

View File

@ -19,19 +19,21 @@ struct BMeshCalcTessellation_Params {
};
void BM_mesh_calc_tessellation_ex(BMesh *bm,
BMLoop *(*looptris)[3],
blender::MutableSpan<std::array<BMLoop *, 3>> looptris,
const BMeshCalcTessellation_Params *params);
void BM_mesh_calc_tessellation(BMesh *bm, BMLoop *(*looptris)[3]);
void BM_mesh_calc_tessellation(BMesh *bm, blender::MutableSpan<std::array<BMLoop *, 3>> looptris);
/**
* A version of #BM_mesh_calc_tessellation that avoids degenerate triangles.
*/
void BM_mesh_calc_tessellation_beauty(BMesh *bm, BMLoop *(*looptris)[3]);
void BM_mesh_calc_tessellation_beauty(BMesh *bm,
blender::MutableSpan<std::array<BMLoop *, 3>> looptris);
void BM_mesh_calc_tessellation_with_partial_ex(BMesh *bm,
BMLoop *(*looptris)[3],
const BMPartialUpdate *bmpinfo,
const BMeshCalcTessellation_Params *params);
void BM_mesh_calc_tessellation_with_partial_ex(
BMesh *bm,
blender::MutableSpan<std::array<BMLoop *, 3>> looptris,
const BMPartialUpdate *bmpinfo,
const BMeshCalcTessellation_Params *params);
void BM_mesh_calc_tessellation_with_partial(BMesh *bm,
BMLoop *(*looptris)[3],
blender::MutableSpan<std::array<BMLoop *, 3>> looptris,
const BMPartialUpdate *bmpinfo);

View File

@ -35,8 +35,7 @@ namespace blender::meshintersect {
* the faces in the returned (polygonal) mesh.
*/
static IMesh mesh_from_bm(BMesh *bm,
BMLoop *(*looptris)[3],
const int looptris_tot,
const Span<std::array<BMLoop *, 3>> looptris,
IMesh *r_triangulated,
IMeshArena *arena)
{
@ -75,10 +74,10 @@ static IMesh mesh_from_bm(BMesh *bm,
* The loop_tris have accurate v and f members for the triangles,
* but their next and e pointers are not correct for the loops
* that start added-diagonal edges. */
Array<Face *> tri_face(looptris_tot);
Array<Face *> tri_face(looptris.size());
face_vert.resize(3);
face_edge_orig.resize(3);
for (int i = 0; i < looptris_tot; ++i) {
for (const int i : looptris.index_range()) {
BMFace *bmf = looptris[i][0]->f;
int f = BM_elem_index_get(bmf);
for (int j = 0; j < 3; ++j) {
@ -336,8 +335,7 @@ static bool apply_mesh_output_to_bmesh(BMesh *bm, IMesh &m_out, bool keep_hidden
}
static bool bmesh_boolean(BMesh *bm,
BMLoop *(*looptris)[3],
const int looptris_tot,
const Span<std::array<BMLoop *, 3>> looptris,
int (*test_fn)(BMFace *f, void *user_data),
void *user_data,
int nshapes,
@ -352,7 +350,7 @@ static bool bmesh_boolean(BMesh *bm,
# ifdef PERF_DEBUG
double start_time = BLI_time_now_seconds();
# endif
IMesh m_in = mesh_from_bm(bm, looptris, looptris_tot, &m_triangulated, &arena);
IMesh m_in = mesh_from_bm(bm, looptris, &m_triangulated, &arena);
# ifdef PERF_DEBUG
double mesh_time = BLI_time_now_seconds();
std::cout << "bmesh_boolean, imesh_from_bm done, time = " << mesh_time - start_time << "\n";
@ -420,8 +418,7 @@ static bool bmesh_boolean(BMesh *bm,
*/
#ifdef WITH_GMP
bool BM_mesh_boolean(BMesh *bm,
BMLoop *(*looptris)[3],
const int looptris_tot,
const blender::Span<std::array<BMLoop *, 3>> looptris,
int (*test_fn)(BMFace *f, void *user_data),
void *user_data,
const int nshapes,
@ -433,7 +430,6 @@ bool BM_mesh_boolean(BMesh *bm,
return blender::meshintersect::bmesh_boolean(
bm,
looptris,
looptris_tot,
test_fn,
user_data,
nshapes,
@ -445,8 +441,7 @@ bool BM_mesh_boolean(BMesh *bm,
}
bool BM_mesh_boolean_knife(BMesh *bm,
BMLoop *(*looptris)[3],
const int looptris_tot,
const blender::Span<std::array<BMLoop *, 3>> looptris,
int (*test_fn)(BMFace *f, void *user_data),
void *user_data,
const int nshapes,
@ -457,7 +452,6 @@ bool BM_mesh_boolean_knife(BMesh *bm,
{
return blender::meshintersect::bmesh_boolean(bm,
looptris,
looptris_tot,
test_fn,
user_data,
nshapes,
@ -469,8 +463,7 @@ bool BM_mesh_boolean_knife(BMesh *bm,
}
#else
bool BM_mesh_boolean(BMesh * /*bm*/,
BMLoop *(*looptris)[3],
const int /*looptris_tot*/,
blender::Span<std::array<BMLoop *, 3>> looptris,
int (*test_fn)(BMFace *, void *),
void * /*user_data*/,
const int /*nshapes*/,
@ -492,8 +485,7 @@ bool BM_mesh_boolean(BMesh * /*bm*/,
* to the intersection result faces.
*/
bool BM_mesh_boolean_knife(BMesh * /*bm*/,
BMLoop *(*looptris)[3],
const int /*looptris_tot*/,
blender::Span<std::array<BMLoop *, 3>> looptris,
int (*test_fn)(BMFace *, void *),
void * /*user_data*/,
const int /*nshapes*/,

View File

@ -9,8 +9,7 @@
*/
bool BM_mesh_boolean(BMesh *bm,
BMLoop *(*looptris)[3],
int looptris_tot,
blender::Span<std::array<BMLoop *, 3>> looptris,
int (*test_fn)(BMFace *f, void *user_data),
void *user_data,
int nshapes,
@ -30,8 +29,7 @@ bool BM_mesh_boolean(BMesh *bm,
* to the intersection result faces.
*/
bool BM_mesh_boolean_knife(BMesh *bm,
BMLoop *(*looptris)[3],
int looptris_tot,
blender::Span<std::array<BMLoop *, 3>> looptris,
int (*test_fn)(BMFace *f, void *user_data),
void *user_data,
int nshapes,

View File

@ -497,11 +497,15 @@ static bool bm_loop_filter_fn(const BMLoop *l, void *user_data)
/**
* Return true if we have any intersections.
*/
static void bm_isect_tri_tri(
ISectState *s, int a_index, int b_index, BMLoop **a, BMLoop **b, bool no_shared)
static void bm_isect_tri_tri(ISectState *s,
int a_index,
int b_index,
const std::array<BMLoop *, 3> &a,
const std::array<BMLoop *, 3> &b,
bool no_shared)
{
BMFace *f_a = (*a)->f;
BMFace *f_b = (*b)->f;
BMFace *f_a = a[0]->f;
BMFace *f_b = b[0]->f;
BMVert *fv_a[3] = {UNPACK3_EX(, a, ->v)};
BMVert *fv_b[3] = {UNPACK3_EX(, b, ->v)};
const float *f_a_cos[3] = {UNPACK3_EX(, fv_a, ->co)};
@ -946,8 +950,7 @@ static int isect_bvhtree_point_v3(BVHTree *tree, const float **looptris, const f
#endif /* USE_BVH */
bool BM_mesh_intersect(BMesh *bm,
BMLoop *(*looptris)[3],
const int looptris_tot,
const blender::Span<std::array<BMLoop *, 3>> looptris,
int (*test_fn)(BMFace *f, void *user_data),
void *user_data,
const bool use_self,
@ -1031,8 +1034,8 @@ bool BM_mesh_intersect(BMesh *bm,
int i, j;
cos = static_cast<float **>(
MEM_mallocN(size_t(looptris_tot) * sizeof(*looptri_coords) * 3, __func__));
for (i = 0, j = 0; i < looptris_tot; i++) {
MEM_mallocN(size_t(looptris.size()) * sizeof(*looptri_coords) * 3, __func__));
for (i = 0, j = 0; i < int(looptris.size()); i++) {
cos[j++] = looptris[i][0]->v->co;
cos[j++] = looptris[i][1]->v->co;
cos[j++] = looptris[i][2]->v->co;
@ -1043,8 +1046,8 @@ bool BM_mesh_intersect(BMesh *bm,
#ifdef USE_BVH
{
int i;
tree_a = BLI_bvhtree_new(looptris_tot, s.epsilon.eps_margin, 8, 8);
for (i = 0; i < looptris_tot; i++) {
tree_a = BLI_bvhtree_new(int(looptris.size()), s.epsilon.eps_margin, 8, 8);
for (i = 0; i < int(looptris.size()); i++) {
if (test_fn(looptris[i][0]->f, user_data) == 0) {
const float t_cos[3][3] = {
{UNPACK3(looptris[i][0]->v->co)},
@ -1060,8 +1063,8 @@ bool BM_mesh_intersect(BMesh *bm,
if (use_self == false) {
int i;
tree_b = BLI_bvhtree_new(looptris_tot, s.epsilon.eps_margin, 8, 8);
for (i = 0; i < looptris_tot; i++) {
tree_b = BLI_bvhtree_new(int(looptris.size()), s.epsilon.eps_margin, 8, 8);
for (i = 0; i < int(looptris.size()); i++) {
if (test_fn(looptris[i][0]->f, user_data) == 1) {
const float t_cos[3][3] = {
{UNPACK3(looptris[i][0]->v->co)},
@ -1088,7 +1091,7 @@ bool BM_mesh_intersect(BMesh *bm,
# ifndef NDEBUG
/* The overlap result must match that obtained in Release to succeed
* in the `bmesh_boolean` test. */
if (looptris_tot < 1024) {
if (looptris.size() < 1024) {
flag &= ~BVH_OVERLAP_USE_THREADING;
}
# endif
@ -1124,9 +1127,9 @@ bool BM_mesh_intersect(BMesh *bm,
#else
{
for (i_a = 0; i_a < looptris_tot; i_a++) {
for (i_a = 0; i_a < looptris.size(); i_a++) {
const int t_a = test_fn(looptris[i_a][0]->f, user_data);
for (i_b = i_a + 1; i_b < looptris_tot; i_b++) {
for (i_b = i_a + 1; i_b < looptris.size(); i_b++) {
const int t_b = test_fn(looptris[i_b][0]->f, user_data);
if (use_self) {

View File

@ -17,8 +17,7 @@
* \return true if the mesh is changed (intersections cut or faces removed from boolean).
*/
bool BM_mesh_intersect(BMesh *bm,
struct BMLoop *(*looptris)[3],
int looptris_tot,
blender::Span<std::array<BMLoop *, 3>> looptris,
int (*test_fn)(BMFace *f, void *user_data),
void *user_data,
bool use_self,

View File

@ -25,6 +25,8 @@ enum class DataType {
Vector = 1,
/** \brief Color data type */
Color = 2,
/** \brief Float2 data type */
Float2 = 3,
};
/**
@ -35,6 +37,8 @@ constexpr int COM_data_type_num_channels(const DataType datatype)
switch (datatype) {
case DataType::Value:
return 1;
case DataType::Float2:
return 2;
case DataType::Vector:
return 3;
case DataType::Color:
@ -49,10 +53,12 @@ constexpr int COM_data_type_bytes_len(DataType data_type)
}
constexpr int COM_DATA_TYPE_VALUE_CHANNELS = COM_data_type_num_channels(DataType::Value);
constexpr int COM_DATA_TYPE_FLOAT2_CHANNELS = COM_data_type_num_channels(DataType::Float2);
constexpr int COM_DATA_TYPE_VECTOR_CHANNELS = COM_data_type_num_channels(DataType::Vector);
constexpr int COM_DATA_TYPE_COLOR_CHANNELS = COM_data_type_num_channels(DataType::Color);
constexpr float COM_COLOR_TRANSPARENT[4] = {0.0f, 0.0f, 0.0f, 0.0f};
constexpr float COM_FLOAT2_ZERO[2] = {0.0f, 0.0f};
constexpr float COM_VECTOR_ZERO[3] = {0.0f, 0.0f, 0.0f};
constexpr float COM_COLOR_BLACK[4] = {0.0f, 0.0f, 0.0f, 1.0f};
constexpr float COM_VALUE_ZERO[1] = {0.0f};
@ -66,6 +72,8 @@ constexpr DataType COM_num_channels_data_type(const int num_channels)
switch (num_channels) {
case 1:
return DataType::Value;
case 2:
return DataType::Float2;
case 3:
return DataType::Vector;
case 4:

View File

@ -6,6 +6,7 @@
#include "COM_Debug.h"
#include "BLI_assert.h"
#include "BLI_fileops.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
@ -106,6 +107,10 @@ int DebugInfo::graphviz_operation(const ExecutionSystem *system,
case DataType::Color:
len += snprintf(str + len, maxlen > len ? maxlen - len : 0, "Color");
break;
case DataType::Float2:
/* An internal type that needn't be handled. */
BLI_assert_unreachable();
break;
}
}
len += snprintf(str + len, maxlen > len ? maxlen - len : 0, "}");
@ -166,6 +171,10 @@ int DebugInfo::graphviz_operation(const ExecutionSystem *system,
len += snprintf(str + len, maxlen > len ? maxlen - len : 0, "Color");
break;
}
case DataType::Float2:
/* An internal type that needn't be handled. */
BLI_assert_unreachable();
break;
}
}
len += snprintf(str + len, maxlen > len ? maxlen - len : 0, "}");
@ -284,6 +293,10 @@ bool DebugInfo::graphviz_system(const ExecutionSystem *system, char *str, int ma
case DataType::Color:
color = "orange";
break;
case DataType::Float2:
/* An internal type that needn't be handled. */
BLI_assert_unreachable();
break;
}
NodeOperation *to_op = &to.get_operation();

View File

@ -363,6 +363,10 @@ void NodeOperationBuilder::add_input_constant_value(NodeOperationInput *input,
add_link(op->get_output_socket(), input);
break;
}
case DataType::Float2:
/* An internal type that needn't be handled. */
BLI_assert_unreachable();
break;
}
}

View File

@ -2,8 +2,10 @@
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#include "COM_ImageNode.h"
#include "BLI_assert.h"
#include "COM_ConvertOperation.h"
#include "COM_ImageNode.h"
#include "COM_MultilayerImageOperation.h"
#include "COM_SetColorOperation.h"
@ -255,6 +257,10 @@ void ImageNode::convert_to_operations(NodeConverter &converter,
operation = coloroperation;
break;
}
case DataType::Float2:
/* An internal type that needn't be handled. */
BLI_assert_unreachable();
break;
}
if (operation) {

View File

@ -4,6 +4,7 @@
#include <memory>
#include "BLI_assert.h"
#include "BLI_fileops.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
@ -254,6 +255,10 @@ void FileOutputOperation::add_pass_for_input(realtime_compositor::FileOutput &fi
case DataType::Value:
file_output.add_pass(pass_name, view_name, "V", input.output_buffer);
break;
case DataType::Float2:
/* An internal type that needn't be handled. */
BLI_assert_unreachable();
break;
}
}
@ -272,6 +277,10 @@ void FileOutputOperation::add_view_for_input(realtime_compositor::FileOutput &fi
case DataType::Value:
file_output.add_view(view_name, 1, input.output_buffer);
break;
case DataType::Float2:
/* An internal type that needn't be handled. */
BLI_assert_unreachable();
break;
}
}

View File

@ -54,39 +54,6 @@ void RenderLayersProg::init_execution()
}
}
void RenderLayersProg::do_interpolation(float output[4], float x, float y, PixelSampler sampler)
{
int width = this->get_width(), height = this->get_height();
int ix = x, iy = y;
if (ix < 0 || iy < 0 || ix >= width || iy >= height) {
if (elementsize_ == 1) {
output[0] = 0.0f;
}
else if (elementsize_ == 3) {
zero_v3(output);
}
else {
zero_v4(output);
}
return;
}
switch (sampler) {
case PixelSampler::Nearest:
math::interpolate_nearest_border_fl(
input_buffer_, output, width, height, elementsize_, x, y);
break;
case PixelSampler::Bilinear:
math::interpolate_bilinear_border_fl(
input_buffer_, output, width, height, elementsize_, x, y);
break;
case PixelSampler::Bicubic:
math::interpolate_cubic_bspline_fl(input_buffer_, output, width, height, elementsize_, x, y);
break;
}
}
void RenderLayersProg::deinit_execution()
{
input_buffer_ = nullptr;

View File

@ -69,8 +69,6 @@ class RenderLayersProg : public MultiThreadedOperation {
return input_buffer_;
}
void do_interpolation(float output[4], float x, float y, PixelSampler sampler);
public:
/**
* Constructor

View File

@ -11,8 +11,8 @@
#include "DNA_scene_types.h"
#include "DNA_vec_types.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_domain.hh"
#include "COM_render_context.hh"

View File

@ -4,7 +4,7 @@
#pragma once
#include "GPU_shader.h"
#include "GPU_shader.hh"
#include "COM_context.hh"
#include "COM_input_descriptor.hh"

View File

@ -4,7 +4,7 @@
#pragma once
#include "GPU_shader.h"
#include "GPU_shader.hh"
#include "COM_context.hh"
#include "COM_domain.hh"

View File

@ -7,8 +7,8 @@
#include "BLI_math_matrix_types.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_domain.hh"
#include "COM_texture_pool.hh"

View File

@ -11,7 +11,7 @@
#include "BLI_vector_set.hh"
#include "GPU_material.hh"
#include "GPU_shader.h"
#include "GPU_shader.hh"
#include "gpu_shader_create_info.hh"

View File

@ -10,7 +10,7 @@
#include "BLI_math_vector_types.hh"
#include "BLI_vector.hh"
#include "GPU_texture.h"
#include "GPU_texture.hh"
namespace blender::realtime_compositor {

View File

@ -9,7 +9,7 @@
#include "NOD_derived_node_tree.hh"
#include "GPU_shader.h"
#include "GPU_shader.hh"
#include "COM_input_descriptor.hh"
#include "COM_result.hh"

View File

@ -6,7 +6,7 @@
#include "BLI_math_vector_types.hh"
#include "GPU_texture.h"
#include "GPU_texture.hh"
#include "COM_context.hh"

View File

@ -8,7 +8,7 @@
#include "BLI_math_base.h"
#include "BLI_math_base.hh"
#include "GPU_shader.h"
#include "GPU_shader.hh"
#include "COM_context.hh"
#include "COM_result.hh"

View File

@ -5,7 +5,7 @@
#include "BLI_assert.h"
#include "BLI_math_vector_types.hh"
#include "GPU_shader.h"
#include "GPU_shader.hh"
#include "COM_context.hh"
#include "COM_result.hh"

View File

@ -4,8 +4,8 @@
#include "BLI_math_base.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_context.hh"
#include "COM_result.hh"

View File

@ -5,8 +5,8 @@
#include "BLI_math_base.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_algorithm_morphological_distance_feather.hh" /* Own include. */
#include "COM_context.hh"

View File

@ -7,9 +7,9 @@
#include "MEM_guardedalloc.h"
#include "GPU_compute.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_compute.hh"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_context.hh"

View File

@ -8,9 +8,9 @@
#include "BLI_math_vector_types.hh"
#include "BLI_utildefines.h"
#include "GPU_capabilities.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_capabilities.hh"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_context.hh"
#include "COM_domain.hh"

View File

@ -6,8 +6,8 @@
#include "IMB_colormanagement.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_context.hh"
#include "COM_result.hh"

View File

@ -7,9 +7,9 @@
#include "BLI_math_vector.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_compute.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_compute.hh"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_context.hh"
#include "COM_result.hh"

View File

@ -7,8 +7,8 @@
#include "BLI_math_vector.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_context.hh"
#include "COM_result.hh"

View File

@ -7,8 +7,8 @@
#include "BLI_math_vector.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_context.hh"
#include "COM_result.hh"

View File

@ -7,9 +7,9 @@
#include "BLI_math_matrix_types.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_capabilities.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_capabilities.hh"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_algorithm_realize_on_domain.hh"
#include "COM_context.hh"

View File

@ -10,8 +10,8 @@
#include "BLI_map.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_cached_resource.hh"

View File

@ -10,7 +10,7 @@
#include "BLI_map.hh"
#include "GPU_texture.h"
#include "GPU_texture.hh"
#include "DNA_image_types.h"

View File

@ -11,7 +11,7 @@
#include "BLI_map.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_texture.h"
#include "GPU_texture.hh"
#include "DNA_mask_types.h"
#include "DNA_scene_types.h"

View File

@ -10,7 +10,7 @@
#include "BLI_map.hh"
#include "GPU_shader.h"
#include "GPU_shader.hh"
#include "COM_cached_resource.hh"
#include "COM_result.hh"

View File

@ -11,7 +11,7 @@
#include "BLI_map.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_texture.h"
#include "GPU_texture.hh"
#include "DNA_texture_types.h"

View File

@ -10,8 +10,8 @@
#include "BLI_map.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "DNA_movieclip_types.h"

View File

@ -11,8 +11,8 @@
#include "BLI_map.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "DNA_movieclip_types.h"
#include "DNA_tracking_types.h"

View File

@ -9,8 +9,8 @@
#include "BLI_map.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_cached_resource.hh"

View File

@ -6,8 +6,8 @@
#include <memory>
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_cached_resource.hh"

View File

@ -10,8 +10,8 @@
#include "BLI_map.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_cached_resource.hh"

View File

@ -10,8 +10,8 @@
#include "BLI_map.hh"
#include "BLI_math_vector_types.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_cached_resource.hh"

View File

@ -9,8 +9,8 @@
#include "BLI_math_base.h"
#include "BLI_math_vector_types.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_bokeh_kernel.hh"
#include "COM_context.hh"

View File

@ -12,8 +12,8 @@
#include "RE_pipeline.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "IMB_imbuf.hh"
#include "IMB_imbuf_types.hh"

View File

@ -11,7 +11,7 @@
#include "BLI_math_vector_types.hh"
#include "BLI_task.hh"
#include "GPU_texture.h"
#include "GPU_texture.hh"
#include "BKE_lib_id.hh"
#include "BKE_mask.h"

View File

@ -8,8 +8,8 @@
#include "BLI_hash.hh"
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_shader.hh"
#include "GPU_texture.hh"
#include "COM_cached_shader.hh"
#include "COM_result.hh"

Some files were not shown because too many files have changed in this diff Show More