X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=demos%2Fdesertpillars.cpp;h=d741beea5390b0eb8307fdb78d401fb47c62b314;hp=242a9e73c0f1234732ff52006cb402a8cd0db643;hb=dff7004fa078d55911664c0f513b5dc6c9449420;hpb=31cb526f57cfd023e397873551ab62b20ef125d9 diff --git a/demos/desertpillars.cpp b/demos/desertpillars.cpp index 242a9e73..d741beea 100644 --- a/demos/desertpillars.cpp +++ b/demos/desertpillars.cpp @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #include #include @@ -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; imodify_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); }