载入中...
搜索中...
未找到
PcgFrameRateManager.cpp
浏览该文件的文档.
9 {800,100,40,30,80,.7f,5,0,800},{1000,150,50,50,120,1,5,0,1000},{2000,200,50,100,150,1,5,0,1000}}};
11Result<void> PcgFrameRateManager::configure(int target,float interval,int minimum,int maximum,int current){
12 if(target<=0||!std::isfinite(interval)||interval<=0||minimum<0||maximum>=int(k.size())||minimum>maximum||current<minimum||current>maximum)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"invalid frame-rate manager configuration","procgen.frameRate.configure"));
13 target_=target;interval_=interval;min_=minimum;max_=maximum;quality_=current;left_=interval;fpsLeft_=.5f;accum_=fps_=0;frames_=0;changed_=false;return Result<void>::success();}
15 if(!std::isfinite(dt)||dt<=0||!std::isfinite(scale)||scale<0)return Result<int>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"dt must be positive and timeScale non-negative","procgen.frameRate.update"));
16 changed_=false;fpsLeft_-=dt;accum_+=scale/dt;++frames_;if(fpsLeft_<=0){fps_=accum_/float(frames_);fpsLeft_=.5f;accum_=0;frames_=0;}
19Result<void> PcgFrameRateManager::selectManualQuality(int q){if(q<min_||q>max_)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"quality is outside configured range","procgen.frameRate.quality"));changed_=q!=quality_;quality_=q;automatic_=false;return Result<void>::success();}
21void exposePcgFrameRateManagerBindings(ssq::Table& t){auto p=t.addClass("PcgTerrainQualityPreset",ssq::Class::Ctor<PcgTerrainQualityPreset()>());
22 p.addVar("treeDistance",&PcgTerrainQualityPreset::treeDistance);p.addVar("treeBillboardDistance",&PcgTerrainQualityPreset::treeBillboardDistance);p.addVar("treeCrossFadeLength",&PcgTerrainQualityPreset::treeCrossFadeLength);p.addVar("treeMaximumFullLodCount",&PcgTerrainQualityPreset::treeMaximumFullLodCount);p.addVar("detailObjectDistance",&PcgTerrainQualityPreset::detailObjectDistance);p.addVar("detailObjectDensity",&PcgTerrainQualityPreset::detailObjectDensity);p.addVar("heightmapPixelError",&PcgTerrainQualityPreset::heightmapPixelError);p.addVar("heightmapMaximumLod",&PcgTerrainQualityPreset::heightmapMaximumLod);p.addVar("basemapDistance",&PcgTerrainQualityPreset::basemapDistance);
23 auto m=t.addClass("PcgFrameRateManager",ssq::Class::Ctor<PcgFrameRateManager()>());auto vm=t.getHandle();m.addFunc("configure",[vm](PcgFrameRateManager*s,int a,float b,int c,int d,int e){return eve::script::projectResult(vm,s->configure(a,b,c,d,e));});m.addFunc("update",[vm](PcgFrameRateManager*s,float d,float scale){return eve::script::projectResult(vm,s->update(d,scale),[](int q){return eve::Value(q);});});m.addFunc("setAutomatic",[](PcgFrameRateManager*s,bool v){s->setAutomatic(v);});m.addFunc("getAutomatic",[](const PcgFrameRateManager*s){return s->getAutomatic();});m.addFunc("selectManualQuality",[vm](PcgFrameRateManager*s,int q){return eve::script::projectResult(vm,s->selectManualQuality(q));});m.addFunc("getQuality",[](const PcgFrameRateManager*s){return s->getQuality();});m.addFunc("getFps",[](const PcgFrameRateManager*s){return s->getFps();});m.addFunc("getQualityChanged",[](const PcgFrameRateManager*s){return s->getQualityChanged();});m.addFunc("getPreset",&PcgFrameRateManager::getPreset);}
The single Squirrel projection for common Result, Status and Value.
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
Caller-owned deterministic Pcg frame-rate sampling and quality policy.
Definition PcgFrameRateManager.h:13
PcgTerrainQualityPreset getPreset() const
Copy the current Pcg terrain preset.
Definition PcgFrameRateManager.cpp:20
Result< int > update(float dt, float timeScale)
Add one rendered frame from caller-provided timing and return the selected level.
Definition PcgFrameRateManager.cpp:14
Result< void > configure(int target, float interval, int minimum, int maximum, int current)
Configure target, check interval, inclusive quality range, and initial level atomically.
Definition PcgFrameRateManager.cpp:11
Result< void > selectManualQuality(int q)
Select a level and disable automatic changes.
Definition PcgFrameRateManager.cpp:19
Definition EvpackPointGraphLoader.h:12
void exposePcgFrameRateManagerBindings(ssq::Table &t)
Register Pcg frame-rate manager bindings.
Definition PcgFrameRateManager.cpp:21
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
Definition SquirrelBinding.cpp:470
@ InvalidArgument
Terrain quality values selected by Pcg's six-level frame-rate manager.
Definition PcgFrameRateManager.h:8
int heightmapMaximumLod
Definition PcgFrameRateManager.h:10
float heightmapPixelError
Definition PcgFrameRateManager.h:10
float treeCrossFadeLength
Definition PcgFrameRateManager.h:9
float basemapDistance
Definition PcgFrameRateManager.h:10
float treeBillboardDistance
Definition PcgFrameRateManager.h:9
float detailObjectDistance
Definition PcgFrameRateManager.h:10
float treeDistance
Definition PcgFrameRateManager.h:9
float detailObjectDensity
Definition PcgFrameRateManager.h:10
int treeMaximumFullLodCount
Definition PcgFrameRateManager.h:9