]> git.tdb.fi Git - libs/gl.git/blobdiff - demos/shaders.cpp
Set both min and mag filters when exporting textures
[libs/gl.git] / demos / shaders.cpp
index 27538e4eb2e6a2c35e1bf5aa9e7fa4465a5b8bd8..44d0b440795cad881dc8f4c6cad7916f96a070c9 100644 (file)
@@ -16,8 +16,8 @@
 #include <msp/gl/texture2d.h>
 #include <msp/gl/texturing.h>
 #include <msp/time/timestamp.h>
+#include <msp/time/timedelta.h>
 #include <msp/time/utils.h>
-#include <msp/time/units.h>
 
 using namespace std;
 using namespace Msp;
@@ -56,10 +56,10 @@ int main()
        tex2.image(0, GL::RGB, GL::UNSIGNED_BYTE, data);
        delete[] data;
 
-       GL::Mesh mesh((GL::VERTEX3, GL::NORMAL3, GL::TEXCOORD2, GL::COLOR4_UBYTE, GL::ATTRIB3,4, GL::ATTRIB3,5));
+       GL::Mesh mesh((GL::VERTEX3, GL::NORMAL3, GL::TEXCOORD2, GL::COLOR4_UBYTE, GL::TANGENT3, GL::BINORMAL3));
        GL::MeshBuilder bld(mesh);
        bld.color(0.5f, 1.0f, 0.0f);
-       GL::CapsuleBuilder(1, 0.72498, 32, 17).texture_fit(GL::GeometryBuilder::WRAP).tangent(4).binormal(5).build(bld);
+       GL::CapsuleBuilder(1, 0.72498, 32, 17).texture_fit(GL::GeometryBuilder::WRAP).tbn().build(bld);
        GL::Material mat;
        mat.set_diffuse(GL::Color(0.5, 1.0, 0.0));
        mat.set_specular(GL::Color(0.45, 0.5, 0.4));
@@ -67,31 +67,24 @@ int main()
        vector<GL::Program *> programs;
        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;
-               feat.normalmap = i%4>1;
+               feat.normal_map = i%4>1;
                feat.specular = i%4>2;
                programs.push_back(new GL::Program(feat));
-               if(feat.normalmap)
-               {
-                       programs.back()->bind_attribute(4, "tangent");
-                       programs.back()->bind_attribute(5, "binormal");
-                       programs.back()->link();
-               }
        }
 
        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));
+       light.set_position(GL::Vector4(0, -0.781, 0.625, 0));
        lighting.attach(0, light);
 
-       GL::Bind bind_light(lighting);
-
        GL::Texturing texturing;
        texturing.attach(0, tex1);
        texturing.attach(1, tex2);
@@ -110,15 +103,16 @@ int main()
                {
                        GL::Bind bind_depth(GL::DepthTest::lequal());
                        GL::Renderer renderer(0);
+                       renderer.set_lighting(&lighting);
                        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());
+                               GL::Renderer::Push push(renderer);
                                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);
+                               renderer.transform(GL::Matrix::translation(-3.3+(i%4)*2.2, 0, -3.5+(i/4)*3.0));
+                               renderer.transform(GL::Matrix::rotation(angle, 0, 0, 1));
                                mesh.draw(renderer);
                        }
                }