59 switch (tonemapMode) {
60 case QSSGRenderLayer::TonemapMode::None:
61 return 0 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
62 case QSSGRenderLayer::TonemapMode::Linear:
63 return 1 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
64 case QSSGRenderLayer::TonemapMode::Aces:
65 return 2 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
66 case QSSGRenderLayer::TonemapMode::HejlDawson:
67 return 3 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
68 case QSSGRenderLayer::TonemapMode::Filmic:
69 return 4 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
70 case QSSGRenderLayer::TonemapMode::Custom:
71 return 5 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
75# if !defined(Q_CC_GNU_ONLY) || (Q_CC_GNU >= 900
)
82QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiSkyBoxShader(QSSGRenderLayer::TonemapMode tonemapMode,
bool isRGBE,
int viewCount)
86 static constexpr char variant[][23] {
"skybox_hdr_none",
89 "skybox_hdr_hejldawson",
95 "skybox_rgbe_hejldawson",
100 const size_t skyboxIndex = getSkyboxIndex(tonemapMode, isRGBE);
101 return getBuiltinRhiShader(QByteArray::fromRawData(variant[skyboxIndex], std::char_traits<
char>::length(variant[skyboxIndex])), m_cache.skyBoxRhiShader[skyboxIndex], viewCount);
125QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiParticleShader(QSSGRenderParticles::FeatureLevel featureLevel,
int viewCount, QSSGRenderLayer::OITMethod method)
127#define particleShaderName(name, oit)
128 appendOitMethod(QByteArrayLiteral(name), oit)
130 const uint idx = uint(method);
131 switch (featureLevel) {
132 case QSSGRenderParticles::FeatureLevel::Simple:
133 return getBuiltinRhiShader(
particleShaderName(
"particles_nolight_simple", method), m_cache.particlesNoLightingSimpleRhiShader[idx], viewCount);
135 case QSSGRenderParticles::FeatureLevel::Mapped:
136 return getBuiltinRhiShader(
particleShaderName(
"particles_nolight_mapped", method), m_cache.particlesNoLightingMappedRhiShader[idx], viewCount);
138 case QSSGRenderParticles::FeatureLevel::Animated:
139 return getBuiltinRhiShader(
particleShaderName(
"particles_nolight_animated", method), m_cache.particlesNoLightingAnimatedRhiShader[idx], viewCount);
141 case QSSGRenderParticles::FeatureLevel::SimpleVLight:
142 return getBuiltinRhiShader(
particleShaderName(
"particles_vlight_simple", method), m_cache.particlesVLightingSimpleRhiShader[idx], viewCount);
144 case QSSGRenderParticles::FeatureLevel::MappedVLight:
145 return getBuiltinRhiShader(
particleShaderName(
"particles_vlight_mapped", method), m_cache.particlesVLightingMappedRhiShader[idx], viewCount);
147 case QSSGRenderParticles::FeatureLevel::AnimatedVLight:
148 return getBuiltinRhiShader(
particleShaderName(
"particles_vlight_animated", method), m_cache.particlesVLightingAnimatedRhiShader[idx], viewCount);
150 case QSSGRenderParticles::FeatureLevel::Line:
151 return getBuiltinRhiShader(
particleShaderName(
"lineparticles_nolight_simple", method), m_cache.lineParticlesRhiShader[idx], viewCount);
153 case QSSGRenderParticles::FeatureLevel::LineMapped:
154 return getBuiltinRhiShader(
particleShaderName(
"lineparticles_nolight_mapped", method), m_cache.lineParticlesMappedRhiShader[idx], viewCount);
156 case QSSGRenderParticles::FeatureLevel::LineAnimated:
157 return getBuiltinRhiShader(
particleShaderName(
"lineparticles_nolight_animated", method), m_cache.lineParticlesAnimatedRhiShader[idx], viewCount);
159 case QSSGRenderParticles::FeatureLevel::LineVLight:
160 return getBuiltinRhiShader(
particleShaderName(
"lineparticles_vlight_simple", method), m_cache.lineParticlesVLightRhiShader[idx], viewCount);
162 case QSSGRenderParticles::FeatureLevel::LineMappedVLight:
163 return getBuiltinRhiShader(
particleShaderName(
"lineparticles_vlight_mapped", method), m_cache.lineParticlesMappedVLightRhiShader[idx], viewCount);
165 case QSSGRenderParticles::FeatureLevel::LineAnimatedVLight:
166 return getBuiltinRhiShader(
particleShaderName(
"lineparticles_vlight_animated", method), m_cache.lineParticlesAnimatedVLightRhiShader[idx], viewCount);
169 return getBuiltinRhiShader(
particleShaderName(
"particles_nolight_animated", method), m_cache.particlesNoLightingAnimatedRhiShader[idx], viewCount);
177QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiLightmapUVRasterizationShader(LightmapUVRasterizationShaderMode mode)
180 case LightmapUVRasterizationShaderMode::Uv:
181 return getBuiltinRhiShader(QByteArrayLiteral(
"lightmapuvraster_uv"), m_cache.lightmapUVRasterShader_uv);
182 case LightmapUVRasterizationShaderMode::UvTangent:
183 return getBuiltinRhiShader(QByteArrayLiteral(
"lightmapuvraster_uv_tangent"), m_cache.lightmapUVRasterShader_uv_tangent);
184 case LightmapUVRasterizationShaderMode::Default:
185 return getBuiltinRhiShader(QByteArrayLiteral(
"lightmapuvraster"), m_cache.lightmapUVRasterShader);
188 Q_UNREACHABLE_RETURN(getBuiltinRhiShader(QByteArrayLiteral(
"lightmapuvraster"), m_cache.lightmapUVRasterShader));
206QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhienvironmentmapPreFilterShader(
bool isRGBE)
208 static constexpr char variant[][29] {
"environmentmapprefilter",
"environmentmapprefilter_rgbe" };
209 const quint8 idx = quint8(isRGBE);
210 return getBuiltinRhiShader(QByteArray::fromRawData(variant[idx], std::char_traits<
char>::length(variant[idx])), m_cache.environmentmapPreFilterShader[idx]);
223QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiOitCompositeShader(QSSGRenderLayer::OITMethod method,
bool multisample)
225 if (method == QSSGRenderLayer::OITMethod::WeightedBlended){
227 return getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_weightedblended_ms"), m_cache.oitCompositeShader[1]);
229 return getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_weightedblended"), m_cache.oitCompositeShader[0]);
231 Q_UNREACHABLE_RETURN(getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_weightedblended"), m_cache.oitCompositeShader[0]));