载入中...
搜索中...
未找到
RenderControl.cpp
浏览该文件的文档.
2
3namespace eve::graphics {
4namespace {
5
6const char *kKnownFeatures[] = {"depthTest", "shadow", "gbuffer", "gbufferAlbedo",
7 "forward", "hair", "clustered", "ao", "gi", "aa", "msaa",
8 "outline", "frustumCull"};
9
10bool isKnownFeature(const std::string &feature) {
11 for (const char *f : kKnownFeatures) {
12 if (feature == f) return true;
13 }
14 return false;
15}
16
17} // namespace
18
20 features_["depthTest"] = true;
21 features_["shadow"] = true;
22 features_["gbuffer"] = true;
23 features_["gbufferAlbedo"] = true;
24 features_["forward"] = true;
25 features_["hair"] = true;
26 features_["clustered"] = true;
27 features_["ao"] = true;
28 features_["gi"] = true;
29 features_["aa"] = true;
30 features_["msaa"] = true;
31 features_["outline"] = false;
32 features_["frustumCull"] = false; // opt-in: conservative sphere culling in frame prep
33 dirty_ = true;
34 compiled_ = false;
35}
36
38 gfx_ = gfx;
39 gbuffer_.attach(gfx);
40}
41
42bool RenderControl::supports(const std::string &feature) const { return isKnownFeature(feature); }
43
44void RenderControl::setFeature(const std::string &feature, bool enabled) {
45 if (!isKnownFeature(feature)) return;
46 auto it = features_.find(feature);
47 const bool cur = it == features_.end() ? false : it->second;
48 if (cur == enabled) return;
49 features_[feature] = enabled;
50 if (feature == "gbufferAlbedo" && enabled) features_["gbuffer"] = true;
51 if (feature == "ao" && enabled) features_["gbuffer"] = true;
52 if (feature == "outline" && enabled) features_["gbuffer"] = true;
53 if (feature == "gi" && enabled) {
54 features_["gbuffer"] = true;
55 features_["gbufferAlbedo"] = true;
56 }
57 if (feature == "gbuffer" && !enabled) {
58 features_["gbufferAlbedo"] = false;
59 features_["ao"] = false;
60 features_["gi"] = false;
61 features_["outline"] = false;
62 }
63 dirty_ = true;
64}
65
66void RenderControl::enable(const std::string &feature) { setFeature(feature, true); }
67
68void RenderControl::disable(const std::string &feature) { setFeature(feature, false); }
69
70bool RenderControl::isEnabled(const std::string &feature) const {
71 auto it = features_.find(feature);
72 return it != features_.end() && it->second;
73}
74
76 passes_.clear();
77 if (isEnabled("shadow")) passes_.push_back("shadow");
78 if (isEnabled("gbuffer") || isEnabled("gbufferAlbedo") || isEnabled("ao") || isEnabled("gi"))
79 passes_.push_back("gbuffer");
80 if (isEnabled("forward")) passes_.push_back("forward");
81 if (isEnabled("hair")) passes_.push_back("hair");
82 dirty_ = false;
83 compiled_ = true;
84}
85
89
90std::string RenderControl::getPassName(int index) const {
91 if (index < 0 || index >= int(passes_.size())) return {};
92 return passes_[size_t(index)];
93}
94
95bool RenderControl::hasPass(const std::string &name) const {
96 for (const auto &p : passes_) {
97 if (p == name) return true;
98 }
99 return false;
100}
101
102} // namespace eve::graphics
float f
glm::vec4 p[6]
const char * name
Definition RockMesh.cpp:21
bool enabled
void attach(Graphics *gfx)
Definition GBuffer.h:32
void ensureCompiled()
Ensure compiled; no-op when already clean.
void compile()
Rebuild the executable pass list from current feature flags.
void enable(const std::string &feature)
void disable(const std::string &feature)
bool isEnabled(const std::string &feature) const
bool hasPass(const std::string &name) const
std::string getPassName(int index) const
Pass names: "shadow" | "gbuffer" | "forward" | "hair"
bool supports(const std::string &feature) const
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition AnimTrail.h:6