Implement the next phases of bounds improvement design #96968. Mainly the following changes: Don't use `Object.runtime.bb` for performance caching volume bounds. This is redundant with the cache in most geometry data-block types. Instead, this becomes `Object.runtime.bounds_eval`, and is only used where it's actually needed: syncing the bounds from the evaluated geometry in the active depsgraph to the original object. Remove all redundant functions to access geometry bounds with an Object argument. These make the whole design confusing, since they access geometry bounds at an object level. Use `std::optional<Bounds<float3>>` to pass and store bounds instead of an allocated `BoundBox` struct. This uses less space, avoids small heap allocations, and generally simplifies code, since we usually only want the min and max anyway. After this, to avoid performance regressions, we should also cache bounds in volumes, and maybe the legacy curve and GP data types (though it might not be worth the effort for those legacy types). Pull Request: https://projects.blender.org/blender/blender/pulls/114933
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
/* SPDX-FileCopyrightText: 2023 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#pragma once
|
|
|
|
#include "DNA_curves_types.h"
|
|
|
|
/** \file
|
|
* \ingroup bke
|
|
* \brief Low-level operations for curves that cannot be defined in the C++ header yet.
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct Curves;
|
|
struct Depsgraph;
|
|
struct Main;
|
|
struct Object;
|
|
struct Scene;
|
|
|
|
void *BKE_curves_add(struct Main *bmain, const char *name);
|
|
|
|
bool BKE_curves_attribute_required(const struct Curves *curves, const char *name);
|
|
|
|
/* Depsgraph */
|
|
|
|
struct Curves *BKE_curves_copy_for_eval(const struct Curves *curves_src);
|
|
|
|
void BKE_curves_data_update(struct Depsgraph *depsgraph,
|
|
struct Scene *scene,
|
|
struct Object *object);
|
|
|
|
/* Draw Cache */
|
|
|
|
enum {
|
|
BKE_CURVES_BATCH_DIRTY_ALL = 0,
|
|
};
|
|
|
|
void BKE_curves_batch_cache_dirty_tag(struct Curves *curves, int mode);
|
|
void BKE_curves_batch_cache_free(struct Curves *curves);
|
|
|
|
extern void (*BKE_curves_batch_cache_dirty_tag_cb)(struct Curves *curves, int mode);
|
|
extern void (*BKE_curves_batch_cache_free_cb)(struct Curves *curves);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|