]> git.tdb.fi Git - libs/gl.git/blobdiff - source/resources/resources.cpp
Add support for loading SPIR-V shaders
[libs/gl.git] / source / resources / resources.cpp
index bb3243f6fde4601d0f452901dfe4b6a4d3c02625..a2d9219b0f6075a97f7be5d6d54b3341a98f88e4 100644 (file)
@@ -45,7 +45,7 @@ Resources::Resources():
        add_type<Lighting>().suffix(".lightn").keyword("lighting");
        add_type<Material>().suffix(".mat").creator(&Resources::create_material);
        add_type<Mesh>().keyword("mesh").creator(&Resources::create_mesh);
-       add_type<Module>().suffix(".glsl").creator(&Resources::create_module);
+       add_type<Module>().suffix(".glsl").suffix(".spv").creator(&Resources::create_module);
        add_type<Object>().keyword("object");
        add_type<PipelineTemplate>().suffix(".pipe").keyword("pipeline");
        add_type<Pose>().keyword("pose");
@@ -175,7 +175,7 @@ Texture2D *Resources::create_texture2d(const string &name)
 Module *Resources::create_module(const string &name)
 {
        string ext = FS::extpart(name);
-       if(ext!=".glsl")
+       if(ext!=".glsl" && ext!=".spv")
                return 0;
 
        if(RefPtr<IO::Seekable> io = open_raw(name))
@@ -186,6 +186,12 @@ Module *Resources::create_module(const string &name)
                        module->load_source(*io, this, name);
                        return module.release();
                }
+               else if(ext==".spv")
+               {
+                       RefPtr<SpirVModule> module = new SpirVModule;
+                       module->load_code(*io);
+                       return module.release();
+               }
        }
 
        return 0;
@@ -196,7 +202,7 @@ Program *Resources::create_program(const string &name)
        string ext = FS::extpart(name);
        string base = FS::basepart(name);
        string ext2 = FS::extpart(base);
-       if(ext==".shader" && ext2==".glsl")
+       if(ext==".shader" && (ext2==".glsl" || ext2==".spv"))
        {
                Module &module = get<Module>(base);
                RefPtr<Program> shprog = new Program;