3838
3939#include < maya/MGlobal.h>
4040#include < maya/MProfiler.h>
41+ #include < maya/MString.h>
42+ #include < maya/MStringArray.h>
4143
4244#include < tbb/spin_rw_mutex.h>
4345
@@ -103,9 +105,6 @@ bool WantStandardSurfaceFallback()
103105 return useStandardSurface;
104106}
105107
106- // ! Boolean of whether or not to use shader fragments using the default standardSurface material
107- const bool _useStandardSurface = WantStandardSurfaceFallback();
108-
109108// ! Enum class for fallback shader types
110109enum class FallbackShaderType
111110{
@@ -121,24 +120,6 @@ enum class FallbackShaderType
121120// ! Total number of fallback shader types
122121constexpr size_t FallbackShaderTypeCount = static_cast <size_t >(FallbackShaderType::kCount );
123122
124- // ! Array of constant-color shader fragment names indexed by FallbackShaderType
125- const MString _fallbackShaderNames[]
126- = { _useStandardSurface ? " FallbackShaderStandardSurface" : " FallbackShader" ,
127- " BasisCurvesLinearFallbackShader" ,
128- " BasisCurvesCubicFallbackShader" ,
129- " BasisCurvesCubicFallbackShader" ,
130- " BasisCurvesCubicFallbackShader" ,
131- " PointsFallbackShader" };
132-
133- // ! Array of varying-color shader fragment names indexed by FallbackShaderType
134- const MString _cpvFallbackShaderNames[]
135- = { _useStandardSurface ? " FallbackCPVShaderStandardSurface" : " FallbackCPVShader" ,
136- " BasisCurvesLinearCPVShader" ,
137- " BasisCurvesCubicCPVShader" ,
138- " BasisCurvesCubicCPVShader" ,
139- " BasisCurvesCubicCPVShader" ,
140- " PointsFallbackCPVShader" };
141-
142123// ! "curveBasis" parameter values for three different cubic curves
143124const std::unordered_map<FallbackShaderType, int > _curveBasisParameterValueMapping
144125 = { { FallbackShaderType::kBasisCurvesCubicBezier , 0 },
@@ -203,6 +184,24 @@ class MShaderCache final
203184 if (_isInitialized)
204185 return ;
205186
187+ _useStandardSurface = WantStandardSurfaceFallback ();
188+
189+ _fallbackShaderNames.append (
190+ _useStandardSurface ? " FallbackShaderStandardSurface" : " FallbackShader" );
191+ _fallbackShaderNames.append (" BasisCurvesLinearFallbackShader" );
192+ _fallbackShaderNames.append (" BasisCurvesCubicFallbackShader" );
193+ _fallbackShaderNames.append (" BasisCurvesCubicFallbackShader" );
194+ _fallbackShaderNames.append (" BasisCurvesCubicFallbackShader" );
195+ _fallbackShaderNames.append (" PointsFallbackShader" );
196+
197+ _cpvFallbackShaderNames.append (
198+ _useStandardSurface ? " FallbackCPVShaderStandardSurface" : " FallbackCPVShader" );
199+ _cpvFallbackShaderNames.append (" BasisCurvesLinearCPVShader" );
200+ _cpvFallbackShaderNames.append (" BasisCurvesCubicCPVShader" );
201+ _cpvFallbackShaderNames.append (" BasisCurvesCubicCPVShader" );
202+ _cpvFallbackShaderNames.append (" BasisCurvesCubicCPVShader" );
203+ _cpvFallbackShaderNames.append (" PointsFallbackCPVShader" );
204+
206205 MHWRender::MRenderer* renderer = MHWRender::MRenderer::theRenderer ();
207206 const MHWRender::MShaderManager* shaderMgr
208207 = renderer ? renderer->getShaderManager () : nullptr ;
@@ -545,6 +544,16 @@ class MShaderCache final
545544private:
546545 bool _isInitialized { false }; // !< Whether the shader cache is initialized
547546
547+ // ! Boolean of whether or not to use shader fragments using the default
548+ // ! standardSurface material.
549+ bool _useStandardSurface { false };
550+
551+ // ! Array of constant-color shader fragment names indexed by FallbackShaderType
552+ MStringArray _fallbackShaderNames;
553+
554+ // ! Array of varying-color shader fragment names indexed by FallbackShaderType
555+ MStringArray _cpvFallbackShaderNames;
556+
548557 // ! Shader registry used by fallback shaders
549558 MShaderMap _fallbackShaders[FallbackShaderTypeCount];
550559 MShaderMap _3dSolidShaders;
0 commit comments