6const char *kKnownFeatures[] = {
"depthTest",
"shadow",
"gbuffer",
"gbufferAlbedo",
7 "forward",
"hair",
"clustered",
"ao",
"gi",
"aa",
"msaa",
8 "outline",
"frustumCull"};
10bool isKnownFeature(
const std::string &feature) {
11 for (
const char *
f : kKnownFeatures) {
12 if (feature ==
f)
return true;
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;
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;
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;
57 if (feature ==
"gbuffer" && !
enabled) {
58 features_[
"gbufferAlbedo"] =
false;
59 features_[
"ao"] =
false;
60 features_[
"gi"] =
false;
61 features_[
"outline"] =
false;
71 auto it = features_.find(feature);
72 return it != features_.end() && it->second;
77 if (
isEnabled(
"shadow")) passes_.push_back(
"shadow");
79 passes_.push_back(
"gbuffer");
80 if (
isEnabled(
"forward")) passes_.push_back(
"forward");
81 if (
isEnabled(
"hair")) passes_.push_back(
"hair");
91 if (index < 0 || index >=
int(passes_.size()))
return {};
92 return passes_[size_t(index)];
96 for (
const auto &
p : passes_) {
97 if (
p ==
name)
return true;
void attach(Graphics *gfx)
void ensureCompiled()
Ensure compiled; no-op when already clean.
void compile()
Rebuild the executable pass list from current feature flags.
void attach(Graphics *gfx)
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:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...