Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/simulation/intern/simulation_solver_influences.hh')
-rw-r--r--source/blender/simulation/intern/simulation_solver_influences.hh234
1 files changed, 0 insertions, 234 deletions
diff --git a/source/blender/simulation/intern/simulation_solver_influences.hh b/source/blender/simulation/intern/simulation_solver_influences.hh
deleted file mode 100644
index d33aec855b2..00000000000
--- a/source/blender/simulation/intern/simulation_solver_influences.hh
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#pragma once
-
-#include "BLI_float3.hh"
-#include "BLI_float4x4.hh"
-#include "BLI_multi_value_map.hh"
-#include "BLI_span.hh"
-
-#include "DNA_simulation_types.h"
-
-#include "FN_attributes_ref.hh"
-
-#include "BKE_persistent_data_handle.hh"
-#include "BKE_simulation.h"
-
-#include "particle_allocator.hh"
-#include "time_interval.hh"
-
-namespace blender::sim {
-
-using fn::AttributesInfo;
-using fn::AttributesInfoBuilder;
-using fn::AttributesRef;
-using fn::CPPType;
-using fn::GMutableSpan;
-using fn::GSpan;
-using fn::MutableAttributesRef;
-
-struct ParticleActionContext;
-struct ParticleEmitterContext;
-struct ParticleEventFilterContext;
-struct ParticleForceContext;
-
-class ParticleEmitter {
- public:
- virtual ~ParticleEmitter();
- virtual void emit(ParticleEmitterContext &context) const = 0;
-};
-
-class ParticleForce {
- public:
- virtual ~ParticleForce();
- virtual void add_force(ParticleForceContext &context) const = 0;
-};
-
-class ParticleAction {
- public:
- virtual ~ParticleAction();
- virtual void execute(ParticleActionContext &context) const = 0;
-};
-
-class ParticleEvent {
- public:
- virtual ~ParticleEvent();
- virtual void filter(ParticleEventFilterContext &context) const = 0;
- virtual void execute(ParticleActionContext &context) const = 0;
-};
-
-struct SimulationInfluences {
- MultiValueMap<std::string, const ParticleForce *> particle_forces;
- MultiValueMap<std::string, const ParticleAction *> particle_birth_actions;
- MultiValueMap<std::string, const ParticleAction *> particle_time_step_begin_actions;
- MultiValueMap<std::string, const ParticleAction *> particle_time_step_end_actions;
- MultiValueMap<std::string, const ParticleEvent *> particle_events;
- Map<std::string, AttributesInfoBuilder *> particle_attributes_builder;
- Vector<const ParticleEmitter *> particle_emitters;
-};
-
-class SimulationStateMap {
- private:
- Map<StringRefNull, SimulationState *> states_by_name_;
- MultiValueMap<StringRefNull, SimulationState *> states_by_type_;
-
- public:
- void add(SimulationState *state)
- {
- states_by_name_.add_new(state->name, state);
- states_by_type_.add(state->type, state);
- }
-
- template<typename StateType> StateType *lookup(StringRef name) const
- {
- const char *type = BKE_simulation_get_state_type_name<StateType>();
- return reinterpret_cast<StateType *>(this->lookup_name_type(name, type));
- }
-
- template<typename StateType> Span<StateType *> lookup() const
- {
- const char *type = BKE_simulation_get_state_type_name<StateType>();
- return this->lookup_type(type).cast<StateType *>();
- }
-
- SimulationState *lookup_name_type(StringRef name, StringRef type) const
- {
- SimulationState *state = states_by_name_.lookup_default_as(name, nullptr);
- if (state == nullptr) {
- return nullptr;
- }
- if (state->type == type) {
- return state;
- }
- return nullptr;
- }
-
- Span<SimulationState *> lookup_type(StringRef type) const
- {
- return states_by_type_.lookup_as(type);
- }
-};
-
-class DependencyAnimations {
- public:
- ~DependencyAnimations();
-
- virtual bool is_object_transform_changing(Object &object) const;
- virtual void get_object_transforms(Object &object,
- Span<float> simulation_times,
- MutableSpan<float4x4> r_transforms) const;
-};
-
-struct SimulationSolveContext {
- Simulation &simulation;
- Depsgraph &depsgraph;
- const SimulationInfluences &influences;
- TimeInterval solve_interval;
- const SimulationStateMap &state_map;
- const bke::PersistentDataHandleMap &handle_map;
- const DependencyAnimations &dependency_animations;
-};
-
-class ParticleAllocators {
- private:
- Map<std::string, std::unique_ptr<ParticleAllocator>> &allocators_;
-
- public:
- ParticleAllocators(Map<std::string, std::unique_ptr<ParticleAllocator>> &allocators)
- : allocators_(allocators)
- {
- }
-
- ParticleAllocator *try_get_allocator(StringRef particle_simulation_name)
- {
- auto *ptr = allocators_.lookup_ptr_as(particle_simulation_name);
- if (ptr != nullptr) {
- return ptr->get();
- }
- else {
- return nullptr;
- }
- }
-};
-
-struct ParticleChunkIntegrationContext {
- MutableSpan<float3> position_diffs;
- MutableSpan<float3> velocity_diffs;
- MutableSpan<float> durations;
- float end_time;
-};
-
-struct ParticleChunkContext {
- ParticleSimulationState &state;
- IndexMask index_mask;
- MutableAttributesRef attributes;
- ParticleChunkIntegrationContext *integration = nullptr;
-
- void update_diffs_after_velocity_change()
- {
- if (integration == nullptr) {
- return;
- }
-
- Span<float> remaining_durations = integration->durations;
- MutableSpan<float3> position_diffs = integration->position_diffs;
- Span<float3> velocities = attributes.get<float3>("Velocity");
-
- for (int i : index_mask) {
- const float duration = remaining_durations[i];
- /* This is certainly not a perfect way to "re-integrate" the velocity, but it should be good
- * enough for most use cases. Changing the velocity in an instant is not physically correct
- * anyway. */
- position_diffs[i] = velocities[i] * duration;
- }
- }
-};
-
-struct ParticleEmitterContext {
- SimulationSolveContext &solve_context;
- ParticleAllocators &particle_allocators;
- TimeInterval emit_interval;
-
- template<typename StateType> StateType *lookup_state(StringRef name)
- {
- return solve_context.state_map.lookup<StateType>(name);
- }
-
- ParticleAllocator *try_get_particle_allocator(StringRef particle_simulation_name)
- {
- return particle_allocators.try_get_allocator(particle_simulation_name);
- }
-};
-
-struct ParticleForceContext {
- SimulationSolveContext &solve_context;
- ParticleChunkContext &particles;
- MutableSpan<float3> force_dst;
-};
-
-struct ParticleActionContext {
- SimulationSolveContext &solve_context;
- ParticleChunkContext &particles;
-};
-
-struct ParticleEventFilterContext {
- SimulationSolveContext &solve_context;
- ParticleChunkContext &particles;
- MutableSpan<float> factor_dst;
-};
-
-} // namespace blender::sim