52QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiSkyBoxCubeShader(QSSGRenderLayer::TonemapMode tonemapMode,
bool isLinear,
int viewCount)
54 const bool rawPixels = (!isLinear && tonemapMode == QSSGRenderLayer::TonemapMode::Linear) || (isLinear && tonemapMode == QSSGRenderLayer::TonemapMode::None);
55 auto shaderName = rawPixels ? QByteArrayLiteral(
"skyboxcube") : QByteArrayLiteral(
"skyboxcube_runtime_tonemapping");
56 return getBuiltinRhiShader(shaderName, m_cache.skyBoxCubeRhiShader, viewCount);
61 switch (tonemapMode) {
62 case QSSGRenderLayer::TonemapMode::None:
63 return 0 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
64 case QSSGRenderLayer::TonemapMode::Linear:
65 return 1 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
66 case QSSGRenderLayer::TonemapMode::Aces:
67 return 2 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
68 case QSSGRenderLayer::TonemapMode::HejlDawson:
69 return 3 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
70 case QSSGRenderLayer::TonemapMode::Filmic:
71 return 4 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
72 case QSSGRenderLayer::TonemapMode::Custom:
73 return 5 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
77# if !defined(Q_CC_GNU_ONLY) || (Q_CC_GNU >= 900
)
84QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiSkyBoxShader(QSSGRenderLayer::TonemapMode tonemapMode,
bool isRGBE,
int viewCount)
88 static constexpr char variant[][23] {
"skybox_hdr_none",
91 "skybox_hdr_hejldawson",
97 "skybox_rgbe_hejldawson",
102 const size_t skyboxIndex = getSkyboxIndex(tonemapMode, isRGBE);
103 return getBuiltinRhiShader(QByteArray::fromRawData(variant[skyboxIndex], std::char_traits<
char>::length(variant[skyboxIndex])), m_cache.skyBoxRhiShader[skyboxIndex], viewCount);
127QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiParticleShader(QSSGRenderParticles::FeatureLevel featureLevel,
int viewCount, QSSGRenderLayer::OITMethod method)
129#define particleShaderName(name, oit)
130 appendOitMethod(QByteArrayLiteral(name), oit)
132 const uint idx = uint(method);
133 switch (featureLevel) {
134 case QSSGRenderParticles::FeatureLevel::Simple:
135 return getBuiltinRhiShader(
particleShaderName(
"particles_nolight_simple", method), m_cache.particlesNoLightingSimpleRhiShader[idx], viewCount);
137 case QSSGRenderParticles::FeatureLevel::Mapped:
138 return getBuiltinRhiShader(
particleShaderName(
"particles_nolight_mapped", method), m_cache.particlesNoLightingMappedRhiShader[idx], viewCount);
140 case QSSGRenderParticles::FeatureLevel::Animated:
141 return getBuiltinRhiShader(
particleShaderName(
"particles_nolight_animated", method), m_cache.particlesNoLightingAnimatedRhiShader[idx], viewCount);
143 case QSSGRenderParticles::FeatureLevel::SimpleVLight:
144 return getBuiltinRhiShader(
particleShaderName(
"particles_vlight_simple", method), m_cache.particlesVLightingSimpleRhiShader[idx], viewCount);
146 case QSSGRenderParticles::FeatureLevel::MappedVLight:
147 return getBuiltinRhiShader(
particleShaderName(
"particles_vlight_mapped", method), m_cache.particlesVLightingMappedRhiShader[idx], viewCount);
149 case QSSGRenderParticles::FeatureLevel::AnimatedVLight:
150 return getBuiltinRhiShader(
particleShaderName(
"particles_vlight_animated", method), m_cache.particlesVLightingAnimatedRhiShader[idx], viewCount);
152 case QSSGRenderParticles::FeatureLevel::Line:
153 return getBuiltinRhiShader(
particleShaderName(
"lineparticles_nolight_simple", method), m_cache.lineParticlesRhiShader[idx], viewCount);
155 case QSSGRenderParticles::FeatureLevel::LineMapped:
156 return getBuiltinRhiShader(
particleShaderName(
"lineparticles_nolight_mapped", method), m_cache.lineParticlesMappedRhiShader[idx], viewCount);
158 case QSSGRenderParticles::FeatureLevel::LineAnimated:
159 return getBuiltinRhiShader(
particleShaderName(
"lineparticles_nolight_animated", method), m_cache.lineParticlesAnimatedRhiShader[idx], viewCount);
161 case QSSGRenderParticles::FeatureLevel::LineVLight:
162 return getBuiltinRhiShader(
particleShaderName(
"lineparticles_vlight_simple", method), m_cache.lineParticlesVLightRhiShader[idx], viewCount);
164 case QSSGRenderParticles::FeatureLevel::LineMappedVLight:
165 return getBuiltinRhiShader(
particleShaderName(
"lineparticles_vlight_mapped", method), m_cache.lineParticlesMappedVLightRhiShader[idx], viewCount);
167 case QSSGRenderParticles::FeatureLevel::LineAnimatedVLight:
168 return getBuiltinRhiShader(
particleShaderName(
"lineparticles_vlight_animated", method), m_cache.lineParticlesAnimatedVLightRhiShader[idx], viewCount);
171 return getBuiltinRhiShader(
particleShaderName(
"particles_nolight_animated", method), m_cache.particlesNoLightingAnimatedRhiShader[idx], viewCount);
179QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiLightmapUVRasterizationShader(LightmapUVRasterizationShaderMode mode)
182 case LightmapUVRasterizationShaderMode::Uv:
183 return getBuiltinRhiShader(QByteArrayLiteral(
"lightmapuvraster_uv"), m_cache.lightmapUVRasterShader_uv);
184 case LightmapUVRasterizationShaderMode::UvTangent:
185 return getBuiltinRhiShader(QByteArrayLiteral(
"lightmapuvraster_uv_tangent"), m_cache.lightmapUVRasterShader_uv_tangent);
186 case LightmapUVRasterizationShaderMode::Default:
187 return getBuiltinRhiShader(QByteArrayLiteral(
"lightmapuvraster"), m_cache.lightmapUVRasterShader);
190 Q_UNREACHABLE_RETURN(getBuiltinRhiShader(QByteArrayLiteral(
"lightmapuvraster"), m_cache.lightmapUVRasterShader));
208QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhienvironmentmapPreFilterShader(
bool isRGBE)
210 static constexpr char variant[][29] {
"environmentmapprefilter",
"environmentmapprefilter_rgbe" };
211 const quint8 idx = quint8(isRGBE);
212 return getBuiltinRhiShader(QByteArray::fromRawData(variant[idx], std::char_traits<
char>::length(variant[idx])), m_cache.environmentmapPreFilterShader[idx]);
225QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiOitCompositeShader(QSSGRenderLayer::OITMethod method,
bool multisample)
227 if (method == QSSGRenderLayer::OITMethod::WeightedBlended){
229 return getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_weightedblended_ms"), m_cache.oitCompositeShader[1]);
231 return getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_weightedblended"), m_cache.oitCompositeShader[0]);
233 Q_UNREACHABLE_RETURN(getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_weightedblended"), m_cache.oitCompositeShader[0]));