]> git.tdb.fi Git - libs/gl.git/blobdiff - demos/shaders.cpp
Entirely new system for building standard shaders
[libs/gl.git] / demos / shaders.cpp
index b7f2a1961cabdc8707fd71a5ef46914d787d9126..73ae1b721321696ddc3114bfbb97676df16e00bd 100644 (file)
@@ -65,10 +65,9 @@ int main()
        mat.set_specular(GL::Color(0.45, 0.5, 0.4));
        mat.set_shininess(50);
        vector<GL::Program *> programs;
-       vector<GL::ProgramData *> progdata;
        for(unsigned i=0; i<12; ++i)
        {
-               GL::Program::StandardFeatures feat;
+               GL::ProgramBuilder::StandardFeatures feat;
                feat.material = i/4>0;
                feat.texture = i/4>1;
                feat.lighting = i%4>0;
@@ -80,13 +79,13 @@ int main()
                        programs.back()->bind_attribute(4, "tangent");
                        programs.back()->bind_attribute(5, "binormal");
                        programs.back()->link();
-                       progdata.push_back(new GL::ProgramData(*programs.back()));
-                       progdata.back()->uniform("normalmap", 1);
                }
-               else
-                       progdata.push_back(0);
        }
 
+       GL::ProgramData progdata;
+       progdata.uniform("texture", 0);
+       progdata.uniform("normalmap", 1);
+
        GL::Lighting lighting;
        GL::Light light;
        light.set_position(GL::Vector4(0, 2, 3, 0));
@@ -114,10 +113,11 @@ int main()
                        GL::Renderer renderer(0);
                        renderer.set_material(&mat);
                        renderer.set_texturing(&texturing);
+                       renderer.add_shader_data(progdata);
                        for(unsigned i=0; i<12; ++i)
                        {
                                GL::MatrixStack::Push push(renderer.matrix_stack());
-                               renderer.set_shader(programs[i], progdata[i]);
+                               renderer.set_shader_program(programs[i]);
                                renderer.matrix_stack() *= GL::Matrix::translation(-3.3+(i%4)*2.2, 0, -3.5+(i/4)*3.0);
                                renderer.matrix_stack() *= GL::Matrix::rotation(angle, 0, 0, 1);
                                mesh.draw(renderer);