]> git.tdb.fi Git - libs/gl.git/blobdiff - source/resources.cpp
Integrate ProgramCompiler with Program and Resources
[libs/gl.git] / source / resources.cpp
index 68b8fd5bdded8aa12489d7bda38c42a301e4c0f0..bba69315de900890e5c365a1c7a325e356394e63 100644 (file)
@@ -9,6 +9,7 @@
 #include "object.h"
 #include "pose.h"
 #include "program.h"
+#include "programcompiler.h"
 #include "resourcemanager.h"
 #include "resources.h"
 #include "technique.h"
@@ -35,7 +36,7 @@ Resources::Resources():
        add_type<Mesh>().keyword("mesh").creator(&Resources::create_mesh);
        add_type<Object>().keyword("object");
        add_type<Pose>().keyword("pose");
-       add_type<Program>().keyword("shader");
+       add_type<Program>().keyword("shader").suffix(".glsl").creator(&Resources::create_program);
        add_type<Technique>().suffix(".tech").keyword("technique");
        add_type<Texture1D>().base<Texture>().suffix(".tex1d").keyword("texture1d");
        add_type<Texture2D>().base<Texture>().suffix(".tex2d").suffix(".png").suffix(".jpg").keyword("texture2d").creator(&Resources::create_texture2d);
@@ -107,5 +108,24 @@ Texture2D *Resources::create_texture2d(const string &name)
        return 0;
 }
 
+Program *Resources::create_program(const string &name)
+{
+       string ext = FS::extpart(name);
+       if(ext==".shader")
+               return 0;
+
+       if(RefPtr<IO::Seekable> io = open_from_sources(name))
+       {
+               ProgramCompiler compiler;
+               compiler.compile(*io);
+               RefPtr<Program> program = new Program;
+               compiler.add_shaders(*program);
+               program->link();
+               return program.release();
+       }
+
+       return 0;
+}
+
 } // namespace GL
 } // namespace Msp