]> git.tdb.fi Git - libs/gl.git/blobdiff - demos/desertpillars.cpp
Rename Pipeline to Sequence
[libs/gl.git] / demos / desertpillars.cpp
index 242a9e73c0f1234732ff52006cb402a8cd0db643..d741beea5390b0eb8307fdb78d401fb47c62b314 100644 (file)
@@ -17,7 +17,7 @@
 #include <msp/gl/mesh.h>
 #include <msp/gl/meshbuilder.h>
 #include <msp/gl/object.h>
-#include <msp/gl/pipeline.h>
+#include <msp/gl/sequence.h>
 #include <msp/gl/program.h>
 #include <msp/gl/renderer.h>
 #include <msp/gl/resources.h>
@@ -46,7 +46,7 @@ including:
 - Shadow mapping
 - Environment mapped reflections
 - Skybox using a cube map texture
-- Effects with nested pipelines
+- Effects with nested sequences
 - Complex multitexturing
 - Shader-based deformations
 - Creating a normalmapped texture through rendering
@@ -132,7 +132,7 @@ private:
        GL::EnvironmentMap *env_cube;
 
        GL::WindowView view;
-       GL::Pipeline pipeline;
+       GL::Sequence sequence;
        GL::Camera camera;
        GL::SimpleScene sky_scene;
        GL::InstanceScene scene;
@@ -142,7 +142,7 @@ private:
        GL::Bloom bloom;
        GL::ColorCurve colorcurve;
 
-       GL::Pipeline env_pipeline;
+       GL::Sequence env_sequence;
 
        Time::TimeStamp last_tick;
        float camera_angle;
@@ -166,7 +166,7 @@ public:
 
 private:
        void setup_view();
-       void create_pipeline();
+       void create_sequence();
        void create_skybox();
        static void create_skybox_face(GL::TextureCube &, GL::TextureCubeFace);
        void create_tiles_texture();
@@ -227,13 +227,17 @@ const char DesertPillars::ground_src[] =
        "const bool use_normal_map = true;\n"
        "const bool use_shadow_map = true;\n"
        "#pragma MSP stage(vertex)\n"
-       "layout(location=7) in float ground_type;\n"
+       "layout(location=11) in float ground_type;\n"
+       "void custom_transform() override\n"
+       "{\n"
+       "       passthrough;\n"
+       "}\n"
        "#pragma MSP stage(fragment)\n"
-       "vec4 get_diffuse_color()\n"
+       "vec4 get_diffuse_color() override\n"
        "{\n"
        "       return mix(texture(texture1, texcoord.xy*3.0), texture(texture2, texcoord.xy), ground_type);\n"
        "}\n"
-       "vec4 get_fragment_normal()\n"
+       "vec3 get_fragment_normal() override\n"
        "{\n"
        "       return mix(texture(normalmap1, texcoord.xy*3.0).rgb, texture(normalmap2, texcoord.xy).rgb, ground_type);\n"
        "}\n";
@@ -244,12 +248,12 @@ const char DesertPillars::cube_src[] =
        "const bool use_reflectivity = true;\n"
        "uniform float spherify;\n"
        "#pragma MSP stage(vertex)\n"
-       "layout(location=7) in vec3 sphere_coord;\n"
-       "vec4 transform_position(vec4 pos)\n"
+       "layout(location=11) in vec3 sphere_coord;\n"
+       "vec4 transform_position(vec4 pos) override\n"
        "{\n"
        "       return eye_obj_matrix*vec4(mix(vertex.xyz, sphere_coord, spherify), 1.0);\n"
        "}\n"
-       "vec3 transform_normal(vec3 pos)\n"
+       "vec3 transform_normal(vec3 pos) override\n"
        "{\n"
        "       return eye_obj_normal_matrix*normalize(mix(normal, normalize(sphere_coord), spherify));\n"
        "}\n";
@@ -295,11 +299,11 @@ DesertPillars::DesertPillars(int argc, char **argv):
        cube_shprog(cube_src),
        cube_shadow_shprog(string(cube_src)+cube_shadow_src_tail),
        view(window, gl_context),
-       pipeline(view),
+       sequence(view),
        shadow_scene(resources, 2048, scene, light),
        bloom(resources, window.get_width(), window.get_height()),
        colorcurve(resources),
-       env_pipeline(512, 512),
+       env_sequence(512, 512),
        camera_angle(0),
        camera_stopped(false),
        cube_angle(0),
@@ -315,7 +319,7 @@ DesertPillars::DesertPillars(int argc, char **argv):
        keyboard.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &DesertPillars::key_press), false));
 
        setup_view();
-       create_pipeline();
+       create_sequence();
        create_skybox();
        create_ground();
        create_pillars();
@@ -336,13 +340,13 @@ void DesertPillars::setup_view()
        camera.set_up_direction(GL::Vector3(0, 0, 1));
        camera.set_depth_clip(1, 50);
        view.set_camera(&camera);
-       view.set_content(&pipeline);
+       view.set_content(&sequence);
 }
 
-void DesertPillars::create_pipeline()
+void DesertPillars::create_sequence()
 {
-       pipeline.set_multisample(8);
-       pipeline.set_hdr(true);
+       sequence.set_multisample(8);
+       sequence.set_hdr(true);
 
        /* The shadow map is focused on the part of the scene that contains the
        pillars and the cube.  Making the ground cast shadows as well would result
@@ -358,26 +362,26 @@ void DesertPillars::create_pipeline()
        lighting.set_ambient(GL::Color(0.2));
 
        // The skybox is rendered first
-       pipeline.add_pass(0, sky_scene);
+       sequence.add_pass(0, sky_scene);
 
-       GL::Pipeline::Pass *pass = &pipeline.add_pass(0, shadow_scene);
+       GL::Sequence::Pass *pass = &sequence.add_pass(0, shadow_scene);
        pass->set_lighting(&lighting);
        pass->set_depth_test(&GL::DepthTest::lequal());
 
        /* A bloom filter enhances the realism of bright surfaces, even if there
        isn't anything really glowy in the scene. */
        bloom.set_strength(0.3);
-       pipeline.add_postprocessor(bloom);
+       sequence.add_postprocessor(bloom);
 
        /* Lighting calculations are best done in linear color space, so the final
        image must be converted to srgb for display. */
        colorcurve.set_srgb();
-       pipeline.add_postprocessor(colorcurve);
+       sequence.add_postprocessor(colorcurve);
 
-       /* Initialize a second pipeline to render the environment map.  It has the
+       /* Initialize a second sequence to render the environment map.  It has the
        same renderables and passes, but no postprocessors or camera. */
-       env_pipeline.add_pass(0, sky_scene);
-       pass = &env_pipeline.add_pass(0, shadow_scene);
+       env_sequence.add_pass(0, sky_scene);
+       pass = &env_sequence.add_pass(0, shadow_scene);
        pass->set_lighting(&lighting);
        pass->set_depth_test(&GL::DepthTest::lequal());
 }
@@ -609,7 +613,7 @@ void DesertPillars::create_ground()
        /* No shadow pass here; the ground only receives shadows, but doesn't cast
        them. */
 
-       GL::VertexFormat vfmt = (GL::VERTEX3, GL::NORMAL3, GL::TANGENT3, GL::BINORMAL3, GL::TEXCOORD2, GL::ATTRIB1,7);
+       GL::VertexFormat vfmt = (GL::VERTEX3, GL::NORMAL3, GL::TANGENT3, GL::BINORMAL3, GL::TEXCOORD2, GL::GENERIC1);
        ground_data.mesh = new GL::Mesh(vfmt);
 
        // Create a base grid
@@ -622,7 +626,7 @@ void DesertPillars::create_ground()
        unsigned tan = vfmt.offset(GL::TANGENT3);
        unsigned bin = vfmt.offset(GL::BINORMAL3);
        unsigned tex = vfmt.offset(GL::TEXCOORD2);
-       unsigned gt = vfmt.offset(GL::make_indexed_component(GL::ATTRIB1, 7));
+       unsigned gt = vfmt.offset(GL::GENERIC1);
        for(unsigned i=0; i<n_vertices; ++i)
        {
                float *v = ground_data.mesh->modify_vertex(i);
@@ -676,7 +680,7 @@ void DesertPillars::create_pillars()
        pillar_material.set_receive_shadows(true);
 
        GL::RenderPass *pass = &pillar_tech.add_pass(0);
-       pass->set_material(&pillar_material);
+       pass->set_material(&pillar_material, &resources);
 
        pass = &pillar_tech.add_pass("shadow");
        pass->set_shader_program(&shadow_shprog, 0);
@@ -752,13 +756,13 @@ void DesertPillars::create_cube()
        cube_material.set_reflectivity(0.5);
 
        GL::RenderPass *pass = &cube_tech.add_pass(0);
-       pass->set_material(&cube_material);
+       pass->set_material(&cube_material, &resources);
        pass->set_shader_program(&cube_shprog, 0);
 
        pass = &cube_tech.add_pass("shadow");
        pass->set_shader_program(&cube_shadow_shprog, 0);
 
-       cube_data.mesh = new GL::Mesh((GL::VERTEX3, GL::NORMAL3, GL::ATTRIB3,7));
+       cube_data.mesh = new GL::Mesh((GL::VERTEX3, GL::NORMAL3, GL::GENERIC3));
        GL::MeshBuilder bld(*cube_data.mesh);
        create_cube_face(bld, GL::Vector3(-1, -1, -1), GL::Vector3(2, 0, 0), GL::Vector3(0, 2, 0), 16);
        bld.offset(cube_data.mesh->get_n_vertices());
@@ -774,7 +778,7 @@ void DesertPillars::create_cube()
        cube_data.object = new GL::Object(cube_data.mesh, &cube_tech);
 
        cube = new Cube(*cube_data.object);
-       env_cube = new GL::EnvironmentMap(resources, 512, *cube, env_pipeline);
+       env_cube = new GL::EnvironmentMap(resources, 512, *cube, env_sequence);
        scene.add(*env_cube);
 }
 
@@ -800,7 +804,7 @@ void DesertPillars::create_cube_face(GL::MeshBuilder &bld, const GL::Vector3 &ba
 
                        l = sqrt(v.x*v.x+v.y*v.y+v.z*v.z);
                        l /= 1.732;
-                       bld.attrib(7, v.x/l, v.y/l, v.z/l);
+                       bld.generic(0, v.x/l, v.y/l, v.z/l);
 
                        bld.vertex(v);
                }