45 static inline std::array<float, 4> sBaseColor = {1.0, 1.0, 1.0, 1.0};
49 static inline std::array<float, 4> sFactorsPack = {
58 static inline std::array<float, 4> sEmissiveAlphaCutoffPack =
64 static inline std::array<float, 4> sSettings = {0.0, 0.0, 0.0, 0.0};
66 static inline Uniform sBaseColorUniform;
67 static inline Uniform sFactorsPackUniform;
68 static inline Uniform sEmissiveAlphaCutoffPackUniform;
69 static inline Uniform sSettingsUniform;
79 bool imageBasedLighting)
92 sEmissiveAlphaCutoffPack[3] =
m.alphaCutoff();
95 if (imageBasedLighting) {
103 for (
int i = 0;
i < N_TEXTURES; ++
i) {
112 sBaseColor[0] =
m.baseColor().redF();
113 sBaseColor[1] =
m.baseColor().greenF();
114 sBaseColor[2] =
m.baseColor().blueF();
115 sBaseColor[3] =
m.baseColor().alphaF();
119 sFactorsPack[0] =
m.occlusionStrength();
120 sFactorsPack[1] =
m.roughness();
121 sFactorsPack[2] =
m.metallic();
122 sFactorsPack[3] =
m.normalScale();
124 sEmissiveAlphaCutoffPack[0] =
m.emissiveColor().redF();
125 sEmissiveAlphaCutoffPack[1] =
m.emissiveColor().greenF();
126 sEmissiveAlphaCutoffPack[2] =
m.emissiveColor().blueF();
133 if (!sBaseColorUniform.
isValid())
135 Uniform(
"u_baseColorFactor", bgfx::UniformType::Vec4);
136 if (!sFactorsPackUniform.
isValid())
137 sFactorsPackUniform =
138 Uniform(
"u_FactorsPack", bgfx::UniformType::Vec4);
139 if (!sEmissiveAlphaCutoffPackUniform.
isValid())
140 sEmissiveAlphaCutoffPackUniform =
141 Uniform(
"u_emissiveAlphaCutoffPack", bgfx::UniformType::Vec4);
142 if (!sSettingsUniform.
isValid())
143 sSettingsUniform =
Uniform(
"u_settings", bgfx::UniformType::Vec4);
145 sBaseColorUniform.
bind(&sBaseColor);
146 sFactorsPackUniform.
bind(&sFactorsPack);
147 sEmissiveAlphaCutoffPackUniform.
bind(&sEmissiveAlphaCutoffPack);
148 sSettingsUniform.
bind(&sSettings);