Merge branch 'blender-v4.3-release'

This commit is contained in:
Julian Eisel
2024-10-03 19:54:14 +02:00
2 changed files with 26 additions and 6 deletions

View File

@@ -932,8 +932,8 @@ void IrradianceBake::surfels_create(const Object &probe_object)
capture_info_buf_.do_surfel_count = false;
capture_info_buf_.do_surfel_output = false;
int neg_flt_max = int(0xFF7FFFFFu ^ 0x7FFFFFFFu); /* floatBitsToOrderedInt(-FLT_MAX) */
int pos_flt_max = 0x7F7FFFFF; /* floatBitsToOrderedInt(FLT_MAX) */
const int neg_flt_max = int(0xFF7FFFFFu ^ 0x7FFFFFFFu); /* floatBitsToOrderedInt(-FLT_MAX) */
const int pos_flt_max = 0x7F7FFFFF; /* floatBitsToOrderedInt(FLT_MAX) */
capture_info_buf_.scene_bound_x_min = pos_flt_max;
capture_info_buf_.scene_bound_y_min = pos_flt_max;
capture_info_buf_.scene_bound_z_min = pos_flt_max;
@@ -948,6 +948,12 @@ void IrradianceBake::surfels_create(const Object &probe_object)
GPU_memory_barrier(GPU_BARRIER_BUFFER_UPDATE);
capture_info_buf_.read();
if (capture_info_buf_.scene_bound_x_min == pos_flt_max) {
/* No valid object has been found. */
do_break_ = true;
return;
}
auto ordered_int_bits_to_float = [](int32_t int_value) -> float {
int32_t float_bits = (int_value < 0) ? (int_value ^ 0x7FFFFFFF) : int_value;
return *reinterpret_cast<float *>(&float_bits);

View File

@@ -71,6 +71,8 @@ static AssetShelf *get_shelf_for_popup(const bContext &C, AssetShelfType &shelf_
if (type_poll_for_popup(C, &shelf_type)) {
AssetShelf *new_shelf = create_shelf_from_type(shelf_type);
new_shelf->settings.display_flag |= ASSETSHELF_SHOW_NAMES;
/* Increased size of previews, to leave more space for the name. */
new_shelf->settings.preview_size = ASSET_SHELF_PREVIEW_SIZE_DEFAULT;
popup_shelves.append(new_shelf);
return new_shelf;
}
@@ -180,18 +182,29 @@ static AssetShelfType *lookup_type_from_idname_in_context(const bContext *C)
}
constexpr int LEFT_COL_WIDTH_UNITS = 10;
constexpr int RIGHT_COL_WIDTH_UNITS = 30;
constexpr int LAYOUT_WIDTH_UNITS = LEFT_COL_WIDTH_UNITS + RIGHT_COL_WIDTH_UNITS;
constexpr int RIGHT_COL_WIDTH_UNITS_DEFAULT = 50;
/**
* Ensure the popover width fits into the window: Clamp width by the window width, minus some
* padding.
*/
static int layout_width_units_clamped(const wmWindow *win)
{
const int max_units_x = (win->sizex / UI_UNIT_X) - 2;
return std::min(LEFT_COL_WIDTH_UNITS + RIGHT_COL_WIDTH_UNITS_DEFAULT, max_units_x);
}
static void popover_panel_draw(const bContext *C, Panel *panel)
{
const wmWindow *win = CTX_wm_window(C);
const int layout_width_units = layout_width_units_clamped(win);
AssetShelfType *shelf_type = lookup_type_from_idname_in_context(C);
BLI_assert_msg(shelf_type != nullptr, "couldn't find asset shelf type from context");
const ARegion *region = CTX_wm_region_popup(C) ? CTX_wm_region_popup(C) : CTX_wm_region(C);
uiLayout *layout = panel->layout;
uiLayoutSetUnitsX(layout, LAYOUT_WIDTH_UNITS);
uiLayoutSetUnitsX(layout, layout_width_units);
AssetShelf *shelf = get_shelf_for_popup(*C, *shelf_type);
if (!shelf) {
@@ -224,7 +237,8 @@ static void popover_panel_draw(const bContext *C, Panel *panel)
ICON_VIEWZOOM);
uiLayout *asset_view_col = uiLayoutColumn(right_col, false);
uiLayoutSetUnitsX(asset_view_col, RIGHT_COL_WIDTH_UNITS);
BLI_assert((layout_width_units - LEFT_COL_WIDTH_UNITS) > 0);
uiLayoutSetUnitsX(asset_view_col, layout_width_units - LEFT_COL_WIDTH_UNITS);
uiLayoutSetFixedSize(asset_view_col, true);
build_asset_view(*asset_view_col, shelf->settings.asset_library_reference, *shelf, *C, *region);