]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/compiler.cpp
Use a different method of adding builtins to stages
[libs/gl.git] / source / glsl / compiler.cpp
index d5ee6691ff83cd3d877c845431ab9a29698c1edb..c2a0656d412265c94d789489a9f3099b8c352f84 100644 (file)
@@ -206,13 +206,6 @@ void Compiler::append_stage(Stage &stage)
                target = &*i;
        }
 
-       if(target->content.body.empty())
-       {
-               Stage *builtins = get_builtins(stage.type);
-               if(builtins && builtins!=&stage)
-                       append_stage(*builtins);
-       }
-
        if(stage.required_features.glsl_version>target->required_features.glsl_version)
                target->required_features.glsl_version = stage.required_features.glsl_version;
        for(NodeList<Statement>::iterator i=stage.content.body.begin(); i!=stage.content.body.end(); ++i)
@@ -239,7 +232,12 @@ void Compiler::generate(Stage &stage, Mode mode)
        stage.required_features.gl_api = features.gl_api;
        if(module->shared.required_features.glsl_version>stage.required_features.glsl_version)
                stage.required_features.glsl_version = module->shared.required_features.glsl_version;
+
        inject_block(stage.content, module->shared.content);
+       if(Stage *builtins = get_builtins(stage.type))
+               inject_block(stage.content, builtins->content);
+       if(Stage *builtins = get_builtins(Stage::SHARED))
+               inject_block(stage.content, builtins->content);
 
        // Initial resolving pass
        BlockHierarchyResolver().apply(stage);