@@ -103,6 +103,8 @@ class GLShader {
103103
104104 GLuint std430Size = 0 ;
105105 uint32_t padding = 0 ;
106+
107+ const bool worldShader;
106108protected:
107109 int _activeMacros = 0 ;
108110 ShaderProgramDescriptor* currentProgram;
@@ -131,19 +133,21 @@ class GLShader {
131133 fragmentShaderName ( newFragmentShaderName ),
132134 hasVertexShader ( true ),
133135 hasFragmentShader ( true ),
134- hasComputeShader ( false ) {
136+ hasComputeShader ( false ),
137+ worldShader ( false ) {
135138 }
136139
137140 GLShader ( const std::string& name,
138141 const bool useMaterialSystem,
139- const std::string newComputeShaderName ) :
142+ const std::string newComputeShaderName, const bool newWorldShader = false ) :
140143 _name ( name ),
141144 _vertexAttribsRequired ( 0 ),
142145 _useMaterialSystem ( useMaterialSystem ),
143146 computeShaderName ( newComputeShaderName ),
144147 hasVertexShader ( false ),
145148 hasFragmentShader ( false ),
146- hasComputeShader ( true ) {
149+ hasComputeShader ( true ),
150+ worldShader ( newWorldShader ) {
147151 }
148152
149153public:
@@ -387,19 +391,34 @@ class GLShaderManager {
387391 void GenerateWorldHeaders ();
388392
389393 template <class T >
390- void LoadShader ( T *& shader ) {
391- if ( !deformShaderCount ) {
394+ void LoadShader ( T*& shader ) {
395+ if ( !deformShaderCount ) {
392396 Q_UNUSED ( GetDeformShaderIndex ( nullptr , 0 ) );
393397 initTime = 0 ;
394398 initCount = 0 ;
395399 }
396400
397401 shader = new T ();
398- InitShader ( shader );
399402 _shaders.emplace_back ( shader );
400403 _shaderBuildQueue.push ( shader );
401404 }
402405
406+ void InitShaders () {
407+ for ( const std::unique_ptr<GLShader>& shader : _shaders ) {
408+ if ( !shader.get ()->worldShader ) {
409+ InitShader ( shader.get () );
410+ }
411+ }
412+ }
413+
414+ void InitWorldShaders () {
415+ for ( const std::unique_ptr<GLShader>& shader : _shaders ) {
416+ if ( shader.get ()->worldShader ) {
417+ InitShader ( shader.get () );
418+ }
419+ }
420+ }
421+
403422 int GetDeformShaderIndex ( deformStage_t *deforms, int numDeforms );
404423
405424 bool BuildPermutation ( GLShader* shader, int macroIndex, int deformIndex, const bool buildOneShader );
0 commit comments