Geometry Nodes: Make simulation caching optional #107767
|
@ -31,7 +31,7 @@ extern "C" {
|
|||
* version. Older Blender versions will test this and show a warning if the file
|
||||
* was written with too new a version. */
|
||||
#define BLENDER_FILE_MIN_VERSION 305
|
||||
#define BLENDER_FILE_MIN_SUBVERSION 8
|
||||
#define BLENDER_FILE_MIN_SUBVERSION 9
|
||||
|
||||
/** User readable version string. */
|
||||
const char *BKE_blender_version_string(void);
|
||||
|
|
|
@ -4336,6 +4336,13 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!MAIN_VERSION_ATLEAST(bmain, 306, 8)) {
|
||||
LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
|
||||
ob->flag |= OB_FLAG_USE_SIMULATION_CACHE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Versioning code until next subversion bump goes here.
|
||||
*
|
||||
|
@ -4347,8 +4354,5 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain)
|
|||
*/
|
||||
{
|
||||
/* Keep this block, even when empty. */
|
||||
LISTBASE_FOREACH (Object *, ob, &bmain->objects) {
|
||||
ob->flag |= OB_FLAG_USE_SIMULATION_CACHE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,15 +17,6 @@ namespace blender::nodes::node_geo_simulation_input_cc {
|
|||
|
||||
NODE_STORAGE_FUNCS(NodeGeometrySimulationInput);
|
||||
|
||||
static const bke::sim::SimulationZoneState *try_get_prev_state(
|
||||
const GeoNodesModifierData &modifier_data, const bke::sim::SimulationZoneID &zone_id)
|
||||
{
|
||||
if (!modifier_data.prev_simulation_state) {
|
||||
return nullptr;
|
||||
}
|
||||
return modifier_data.prev_simulation_state->get_zone_state(zone_id);
|
||||
}
|
||||
|
||||
class LazyFunctionForSimulationInputNode final : public LazyFunction {
|
||||
const bNode &node_;
|
||||
int32_t output_node_id_;
|
||||
|
@ -85,10 +76,14 @@ class LazyFunctionForSimulationInputNode final : public LazyFunction {
|
|||
output_values[i] = params.get_output_data_ptr(i + 1);
|
||||
}
|
||||
|
||||
if (const bke::sim::SimulationZoneState *prev_state = try_get_prev_state(modifier_data,
|
||||
zone_id)) {
|
||||
const bke::sim::SimulationZoneState *prev_zone_state =
|
||||
modifier_data.prev_simulation_state == nullptr ?
|
||||
nullptr :
|
||||
modifier_data.prev_simulation_state->get_zone_state(zone_id);
|
||||
|
||||
if (prev_zone_state) {
|
||||
simulation_state_to_values(simulation_items_,
|
||||
*prev_state,
|
||||
*prev_zone_state,
|
||||
*modifier_data.self_object,
|
||||
*user_data.compute_context,
|
||||
node_,
|
||||
|
@ -98,7 +93,6 @@ class LazyFunctionForSimulationInputNode final : public LazyFunction {
|
|||
}
|
||||
}
|
||||
else {
|
||||
std::cout << "Fetching initial values\n";
|
||||
Array<void *> input_values(simulation_items_.size(), nullptr);
|
||||
for (const int i : simulation_items_.index_range()) {
|
||||
input_values[i] = params.try_get_input_data_ptr_or_request(i);
|
||||
|
|
Loading…
Reference in New Issue