载入中...
搜索中...
未找到
TerrainVegetationGpu.cpp
浏览该文件的文档.
18Result<TerrainVegetationGpuPlan> buildTerrainVegetationGpuPlan(const TerrainVegetationRealization& realization,
23 Diagnostic::error(DiagnosticCode::InvalidArgument, "terrain vegetation frame time is invalid", {}, {},
29 if (prototype.prototype.empty() || !prototypeMetadata.emplace(prototype.prototype, &prototype).second)
35 if (bucket.prototype.empty() || bucket.firstInstance != expectedFirst || bucket.instanceCount == 0 ||
38 Diagnostic::error(DiagnosticCode::InvalidArgument, "terrain vegetation bucket layout is invalid",
42 resolver.resolve({bucket.prototype, metadata == prototypeMetadata.end() ? nullptr : metadata->second});
51 if (part.meshId == graphics::kInvalidGpuDrivenSlot || part.materialId == graphics::kInvalidGpuDrivenSlot)
53 Diagnostic::error(DiagnosticCode::NotFound, "vegetation prefab part has no GPU mesh or material",
59 Diagnostic::error(DiagnosticCode::Conflict, "vegetation bucket does not match instance prototype",
61 const glm::quat rotation(source.rotation[3], source.rotation[0], source.rotation[1], source.rotation[2]);
70 const float healthy = span > 0.f ? std::clamp((source.scale[1] - detail.minHeight) / span, 0.f, 1.f) : 1.f;
73 detail.dryColor[component] + (detail.healthyColor[component] - detail.dryColor[component]) * healthy;
112 Diagnostic::error(DiagnosticCode::InvalidArgument, "terrain vegetation buckets do not cover every instance",
117Result<void> submitTerrainVegetation(graphics::Graphics& graphics, const TerrainVegetationRealization& realization,
148 auto plan = buildTerrainVegetationGpuPlan(state_->realization, *state_->resolver, state_->frame);
160 [this](graphics::Graphics&, const glm::mat4& lightViewProjection, const graphics::Camera3D::Data&) {
169 glm::translate(glm::mat4(1.f), {instance.position[0], instance.position[1], instance.position[2]}) *
GPU-driven adapter for realized terrain vegetation.
A structured explanation of a failed, degraded, or noteworthy result.
Definition Diagnostic.h:94
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
Provider boundary from stable prototype names to backend table slots.
Definition TerrainVegetationGpu.h:41
virtual Result< TerrainVegetationGpuPrototype > resolve(const TerrainVegetationGpuPrototypeRequest &prototype)=0
Resolve one prototype and optional terrain Detail metadata without mutating the realization.
TerrainVegetationRenderer(TerrainVegetationRealization realization, ITerrainVegetationGpuResolver &resolver)
Terrain vegetation renderer.
Definition TerrainVegetationGpu.cpp:140
Result< void > setFrame(TerrainVegetationGpuFrame frame)
Replace the explicit animation clock used by the next render frame.
Definition TerrainVegetationGpu.cpp:192
const Diagnostic * lastSubmissionError() const
Return the most recent asynchronous submission failure, or null when healthy.
Definition TerrainVegetationGpu.cpp:201
Definition Graphics.h:125
virtual bool gpuDrivenSubmitOpaque(const GpuInstance *instances, uint32_t instanceCount)
Upload + record GPU-driven opaque draws (call inside the open 3D frame). The backend sorts instances ...
Definition Graphics.h:365
static void removeShadowExtraDrawer(uint64_t token)
Remove one shadow callback before destroying its captured state.
Definition RenderSystem3D.cpp:533
static uint64_t addShadowExtraDrawer(ShadowExtraDrawer drawer)
Adds shadow extra drawer.
Definition RenderSystem3D.cpp:526
static void removeGpuOpaqueCollector(uint64_t token)
Unregister a GPU-driven opaque contributor.
Definition RenderSystem3D.cpp:518
static uint64_t addGpuOpaqueCollector(GpuOpaqueCollector collector)
Register a GPU-driven opaque contributor.
Definition RenderSystem3D.cpp:511
Result< void > submitTerrainVegetation(graphics::Graphics &graphics, const TerrainVegetationRealization &realization, ITerrainVegetationGpuResolver &resolver, const TerrainVegetationGpuFrame &frame)
Build and submit one terrain vegetation realization to the current GPU-driven frame.
Definition TerrainVegetationGpu.cpp:117
Result< TerrainVegetationGpuPlan > buildTerrainVegetationGpuPlan(const TerrainVegetationRealization &realization, ITerrainVegetationGpuResolver &resolver, const TerrainVegetationGpuFrame &frame)
Resolve every prototype and build GPU records transactionally.
Definition TerrainVegetationGpu.cpp:18
constexpr uint32_t kInvalidGpuDrivenSlot
GPU-driven rendering shared constants + std430 GPU layouts.
Definition GpuDrivenTypes.h:19
@ InvalidArgument
@ NotFound
@ Failed
@ Conflict
Definition Container.h:602
Explicit frame inputs for deterministic terrain Detail animation.
Definition TerrainVegetationGpu.h:77
double timeSeconds
Definition TerrainVegetationGpu.h:78
Detached CPU upload plan accepted by both Vulkan and WebGPU GPU-driven paths.
Definition TerrainVegetationGpu.h:72
std::vector< graphics::GpuInstance > instances
Definition TerrainVegetationGpu.h:73
Owning, prototype-sorted result plus scalability evidence.
Definition TerrainVegetationRuntime.h:45
float wavingGrassAmount
Definition TerrainVegetationRuntime.h:46
std::vector< RuntimeInstancePrototype > prototypes
Definition TerrainVegetationRuntime.h:50
std::vector< TerrainVegetationInstance > instances
Definition TerrainVegetationRuntime.h:51
float wavingGrassSpeed
Definition TerrainVegetationRuntime.h:47
float wavingGrassStrength
Definition TerrainVegetationRuntime.h:48
std::vector< TerrainVegetationBucket > buckets
Definition TerrainVegetationRuntime.h:52
std::array< float, 4 > wavingGrassTint
Definition TerrainVegetationRuntime.h:49
std::unique_ptr< Diagnostic > shadowError
Definition TerrainVegetationGpu.cpp:136
std::unique_ptr< Diagnostic > gpuError
Definition TerrainVegetationGpu.cpp:135
TerrainVegetationGpuFrame frame
Definition TerrainVegetationGpu.cpp:134
ITerrainVegetationGpuResolver * resolver
Definition TerrainVegetationGpu.cpp:133
bool shadowFailedThisFrame
Definition TerrainVegetationGpu.cpp:137
TerrainVegetationRealization realization
Definition TerrainVegetationGpu.cpp:132
Per-instance GPU record (std430). Mirrors GLSL GpuInstance.
Definition GpuDrivenTypes.h:106