载入中...
搜索中...
未找到
GpuAgents.cpp
浏览该文件的文档.
17 const float a = static_cast<float>((static_cast<std::uint32_t>(i) * 1103515245u + seed) & 0xFFFFu) / 65535.f;
18 const float b = static_cast<float>(((static_cast<std::uint32_t>(i) * 12345u) ^ seed) & 0xFFFFu) / 65535.f;
51Result<void> GpuAgents::spawnCloud(EffectBackend* backend, int count, float centerX, float centerY, float centerZ,
55 Diagnostic::error(DiagnosticCode::InvalidArgument, "backend is null", "backend", {}, "gpuagents"));
58 return Result<void>::failure(Diagnostic::error(DiagnosticCode::PreconditionViolation, "backend not configured",
85 s.rotation = lookRotation(glm::length(s.velocity) > 1e-4f ? s.velocity : glm::vec3(0.f, 0.f, 1.f));
99 DiagnosticCode::InvalidArgument, "positions must be interleaved xyz floats", "positions", {}, "gpuagents"));
106 return SurfaceCapture::captureFromTriangles(world->surface(), verts, indices, glm::vec3(originX, originY, originZ),
110Result<void> GpuAgents::syncLifeFieldBinding(GpuAgentWorld* world, LifeFieldMaterialBinding* binding) const {
113 Diagnostic::error(DiagnosticCode::InvalidArgument, "world or binding is null", "binding", {}, "gpuagents"));
123 "GpuAgentWorld", std::function<GpuAgentWorld*()>([]() -> GpuAgentWorld* { return nullptr; }), true);
141 world.addFunc("initFlatSurface", [](GpuAgentWorld* w, float ox, float oy, float oz, float size, int res) {
147 "GpuAgentEffectBackend", std::function<EffectBackend*()>([]() -> EffectBackend* { return nullptr; }), true);
149 backend.addFunc("aliveCount", [](EffectBackend* b) { return b ? b->simulation().aliveCount() : 0; });
150 backend.addFunc("instanceCount", [](EffectBackend* b) { return b ? b->renderer().instanceCount() : 0; });
164 cls.addFunc("spawnCloud", [](GpuAgents* m, EffectBackend* b, int count, float x, float y, float z, float spread) {
168 cls.addFunc("registerBackend", [](GpuAgents*, GpuAgentWorld* w, const std::string& name, EffectBackend* b) {
173 cls.addFunc("captureSurface", [](GpuAgents* m, GpuAgentWorld* w, ssq::Array positions, ssq::Array indices, float ox,
181 for (size_t i = 0; i < indices.size(); ++i) idx.push_back(static_cast<std::uint32_t>(indices.get<int>(i)));
Stable, structured diagnostics shared by engine modules.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Binds an EffectProfile to a GpuAgentSimulation and optional renderer.
Definition EffectBackend.h:19
Result< void > initialize(int count, const std::function< AgentState(int)> &spawnFn)
Spawn count alive agents using spawnFn(index) -> AgentState.
Definition GpuAgentSimulation.cpp:75
World-level registry for GPU agent simulations and environment semantics.
Definition GpuAgentWorld.h:27
void setWaterCurrent(float x, float y, float z)
Set uniform water current.
Definition GpuAgentWorld.h:43
void setVerticalBounds(float groundY, float ceilingY)
Set ground / ceiling heights for bird clearance.
Definition GpuAgentWorld.h:47
GPU Agents module — extensible fixed-step agent FX simulation.
Definition GpuAgents.h:29
Result< void > captureSurface(GpuAgentWorld *world, const std::vector< float > &positions, const std::vector< std::uint32_t > &indices, float originX, float originY, float originZ, float worldSize, int resolution) const
Orthographic triangle bake into a world's surface field.
Definition GpuAgents.cpp:90
EffectBackend * newBackend(int kind, int maxAgents)
Create a configured EffectBackend.
Definition GpuAgents.cpp:43
EffectProfile makeProfile(int kind, int maxAgents) const
Build a default EffectProfile value for script helpers.
Definition GpuAgents.cpp:33
GpuAgentWorld * newWorld()
Create an empty World. @ownership Caller / script VM owns the returned world; delete or let the VM fr...
Definition GpuAgents.cpp:29
Result< void > syncLifeFieldBinding(GpuAgentWorld *world, LifeFieldMaterialBinding *binding) const
Pack a world's surface into CPU LifeField / SurfaceData RGBA buffers.
Definition GpuAgents.cpp:110
Result< void > spawnCloud(EffectBackend *backend, int count, float centerX, float centerY, float centerZ, float spread) const
Spawn a simple school / flock / petal cloud into a backend.
Definition GpuAgents.cpp:51
Packs SurfaceField channels into Graphics-uploadable RGBA8 textures.
Definition LifeFieldMaterialBinding.h:37
static Result< void > captureFromTriangles(SurfaceField &out, std::span< const glm::vec3 > positions, std::span< const std::uint32_t > indices, const glm::vec3 &originMin, float worldSize, int resolution, float baseHeight=0.f)
Bake triangle positions into out over the given XZ domain.
Definition SurfaceCapture.cpp:56
Definition AgentInstanceRenderer.cpp:5
glm::quat lookRotation(const glm::vec3 &forward, const glm::vec3 &upHint=glm::vec3(0.f, 1.f, 0.f))
Builds a facing quaternion from a unit forward and approximate up.
Definition AgentState.h:36
@ LifeNetwork
@ InvalidArgument
@ PreconditionViolation
Standardized per-agent simulation output shared by all effect kinds.
Definition AgentState.h:12
Type-erased profile bundle owned by an EffectBackend.
Definition EffectProfile.h:130
static EffectProfile makePetal(int maxAgents=512)
Factory for a default petal profile.
Definition EffectProfile.h:188
const EffectProfileBase & base() const
Returns the shared base slice for the active kind.
Definition EffectProfile.h:138
static EffectProfile makeBird(int maxAgents=256)
Factory for a default bird profile.
Definition EffectProfile.h:179
static EffectProfile makeFish(int maxAgents=256)
Factory for a default fish profile.
Definition EffectProfile.h:160
static EffectProfile makeLife(int maxAgents=128, int resolution=64)
Factory for a default life-network profile.
Definition EffectProfile.h:169