载入中...
搜索中...
未找到
PcgTerrainPhotoMode.cpp
浏览该文件的文档.
6PcgTerrainPhotoModeAuthority::~PcgTerrainPhotoModeAuthority(){if(authority_)cap::removeListener<IPhotoModeFieldSink>(this);}
7void PcgTerrainPhotoModeAuthority::setAuthority(bool enabled){if(enabled==authority_)return;if(enabled)cap::addListener<IPhotoModeFieldSink>(this);else cap::removeListener<IPhotoModeFieldSink>(this);authority_=enabled;}
8PhotoModeFieldAcceptance PcgTerrainPhotoModeAuthority::acceptsPhotoModeField(const PhotoModeAssignment&a)const noexcept{
12 auto fail=[&](const char*m){return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,m,a.field,{},"procgen.pcgTerrainPhotoMode"));};
14 if(a.field=="m_drawInstanced"){if(!b)return fail("draw-instanced requires a bool");next.drawInstanced=*b;}
15 else if(a.field=="m_terrainDetailDensity"){if(!f||!std::isfinite(*f)||*f<0||*f>1)return fail("detail density must be finite in [0,1]");next.detailDensity=*f;}
16 else if(a.field=="m_terrainDetailDistance"){if(!f||!std::isfinite(*f)||*f<0)return fail("detail distance must be finite and non-negative");next.detailDistance=*f;}
17 else if(a.field=="m_terrainPixelError"){if(!f||!std::isfinite(*f)||*f<=0)return fail("pixel error must be positive and finite");next.pixelError=*f;}
22int PcgTerrainPhotoModeAuthority::selectLod(const Heightmap&h,TerrainMeshSettings s,int maxLod,float distance,float viewportHeight,float fov)const{
26 return std::isfinite(distance)&&distance>=state_.basemapDistance?PcgTerrainTextureTier::Basemap:PcgTerrainTextureTier::Detailed;
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
In-memory terrain heightmap: a dense float grid (row-major, index = y * width + x) materialized from ...
Definition Heightmap.h:21
void setAuthority(bool enabled)
Register or revoke the unique terrain photo-mode authority.
Definition PcgTerrainPhotoMode.cpp:7
~PcgTerrainPhotoModeAuthority() override
Pcg terrain photo mode authority.
Definition PcgTerrainPhotoMode.cpp:6
PhotoModeFieldAcceptance acceptsPhotoModeField(const PhotoModeAssignment &assignment) const noexcept override
Accepts photo mode field.
Definition PcgTerrainPhotoMode.cpp:8
int selectLod(const Heightmap &heightmap, TerrainMeshSettings settings, int maxLod, float distance, float viewportHeight, float verticalFovDegrees) const
Select terrain mesh LOD using the current Pcg pixel-error budget.
Definition PcgTerrainPhotoMode.cpp:22
PcgTerrainTextureTier textureTier(float distance) const noexcept
Return whether distance has crossed Pcg's basemap texture threshold.
Definition PcgTerrainPhotoMode.cpp:25
Result< void > applyPhotoModeField(const PhotoModeAssignment &assignment) override
Applies photo mode field.
Definition PcgTerrainPhotoMode.cpp:11
static int select(const Heightmap &heightmap, TerrainMeshSettings settings, int maxLod, float distance, float viewportHeight, float verticalFovDegrees, float targetPixelError)
Select the coarsest LOD whose projected geometric error is within budget.
Definition TerrainMesh.cpp:202
Definition EvpackPointGraphLoader.h:12
PcgTerrainTextureTier
Terrain material tier selected from Pcg's basemap distance.
Definition PcgTerrainPhotoMode.h:17
@ InvalidArgument
PhotoModeFieldAcceptance
Capability implemented by the composition root that routes assignments to domain owners.
Definition PcgPhotoModeApply.h:32
@ Accepted
@ Rejected
@ Terrain
One reversible field assignment in a photo-mode transaction.
Definition PcgPhotoModeApply.h:15
float pixelError
Definition PcgTerrainPhotoMode.h:13