From a443cba337d8d69e23e64e19334d222e750c28b1 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sat, 21 Dec 2013 11:17:17 +0200 Subject: [PATCH] Make desertpillars compatible with the modernization changes --- demos/desertpillars.cpp | 77 ++++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 25 deletions(-) diff --git a/demos/desertpillars.cpp b/demos/desertpillars.cpp index 297619c7..a10b7832 100644 --- a/demos/desertpillars.cpp +++ b/demos/desertpillars.cpp @@ -43,7 +43,7 @@ including: - Creating a mesh and then modifying it - Shadow mapping - Environment mapped reflections -- Skybox +- Skybox using a cube map texture - Nested scenes and pipelines - Complex multitexturing - Shader-based deformations @@ -183,61 +183,78 @@ private: }; const char DesertPillars::texture_vertex_src[] = - "varying vec3 v_normal;\n" - "varying vec3 v_color;\n" + "#version 130\n" + "in vec3 vertex;\n" + "in vec3 normal;\n" + "in vec3 color;\n" + "out vec3 v_normal;\n" + "out vec3 v_color;\n" "void main()\n" "{\n" - " gl_Position = vec4(gl_Vertex.xy*2.0-1.0, -gl_Vertex.z*2.0, 1.0);\n" - " v_normal = gl_Normal;\n" - " v_color = gl_Color.rgb;\n" + " gl_Position = vec4(vertex.xy*2.0-1.0, -vertex.z*2.0, 1.0);\n" + " v_normal = normal;\n" + " v_color = color.rgb;\n" "}\n"; const char DesertPillars::texture_fragment_src[] = - "varying vec3 v_normal;\n" - "varying vec3 v_color;\n" + "#version 130\n" + "in vec3 v_normal;\n" + "in vec3 v_color;\n" + "out vec4 frag_color;\n" + "out vec4 frag_normal;\n" "void main()\n" "{\n" - " gl_FragData[0] = vec4(v_color, 1.0);\n" - " gl_FragData[1] = vec4(v_normal*0.5+0.5, 1.0);\n" + " frag_color = vec4(v_color, 1.0);\n" + " frag_normal = vec4(v_normal*0.5+0.5, 1.0);\n" "}\n"; const char DesertPillars::skybox_vertex_src[] = - "#version 120\n" - "varying vec3 v_texcoord;\n" + "#version 130\n" + "uniform mat4 projection_matrix;\n" + "uniform mat4 eye_obj_matrix;\n" + "in vec3 vertex;\n" + "out vec3 v_texcoord;\n" "void main()\n" "{\n" - " gl_Position = gl_ProjectionMatrix*vec4(mat3(gl_ModelViewMatrix)*gl_Vertex.xyz, 1.0);\n" - " v_texcoord = gl_Vertex.xyz;\n" + " gl_Position = projection_matrix*vec4(mat3(eye_obj_matrix)*vertex, 1.0);\n" + " v_texcoord = vertex;\n" "}"; const char DesertPillars::skybox_fragment_src[] = + "#version 130\n" "uniform samplerCube sky;\n" - "varying vec3 v_texcoord;\n" + "in vec3 v_texcoord;\n" + "out vec4 frag_color;\n" "void main()\n" "{\n" - " gl_FragColor = textureCube(sky, v_texcoord);\n" + " frag_color = textureCube(sky, v_texcoord);\n" "}"; // This exists only to transfer the ground type to fragment shader const char DesertPillars::ground_transform_src[] = - "attribute float ground_type;\n" - "varying float v_ground_type;\n" + "#version 130\n" + "uniform mat4 eye_obj_matrix;\n" + "uniform mat3 eye_obj_normal_matrix;\n" + "in float ground_type;\n" + "out float v_ground_type;\n" "vec4 transform_vertex(vec4 vertex)\n" "{\n" " v_ground_type = ground_type;\n" - " return gl_ModelViewMatrix*vertex;\n" + " return eye_obj_matrix*vertex;\n" "}\n" "vec3 transform_normal(vec3 normal)\n" "{\n" - " return gl_NormalMatrix*normal;\n" + " return mat3(eye_obj_normal_matrix)*normal;\n" "}\n"; const char DesertPillars::ground_colorify_src[] = + "#version 130\n" "uniform sampler2D texture1;\n" "uniform sampler2D normalmap1;\n" "uniform sampler2D texture2;\n" "uniform sampler2D normalmap2;\n" - "varying float v_ground_type;\n" + "in float v_ground_type;\n" + "in vec3 v_shd_vertex;\n" "vec4 sample_texture(vec2 coord)\n" "{\n" " return mix(texture2D(texture1, coord*3.0), texture2D(texture2, coord), v_ground_type);\n" @@ -248,15 +265,18 @@ const char DesertPillars::ground_colorify_src[] = "}\n"; const char DesertPillars::cube_transform_src[] = + "#version 130\n" + "uniform mat4 eye_obj_matrix;\n" + "uniform mat3 eye_obj_normal_matrix;\n" "uniform float spherify;\n" - "attribute vec3 sphere_coord;\n" + "in vec3 sphere_coord;\n" "vec4 transform_vertex(vec4 vertex)\n" "{\n" - " return gl_ModelViewMatrix*vec4(mix(vertex.xyz, sphere_coord, spherify), 1.0);\n" + " return eye_obj_matrix*vec4(mix(vertex.xyz, sphere_coord, spherify), 1.0);\n" "}\n" "vec3 transform_normal(vec3 normal)\n" "{\n" - " return gl_NormalMatrix*normalize(mix(normal, normalize(sphere_coord), spherify));\n" + " return eye_obj_normal_matrix*normalize(mix(normal, normalize(sphere_coord), spherify));\n" "}\n"; const float DesertPillars::cube_shapes[] = { -0.4, 0.5, 1.0, 0.3 }; @@ -335,7 +355,6 @@ void DesertPillars::create_pipeline() either in a very low spatial resolution of the shadow map, or ugly artifacts as the ground crosses the shadow map boundary. */ shadow_scene.set_target(GL::Vector3(0, 0, 0), 10); - shadow_scene.set_texture_unit(5); sky_scene.add(shadow_scene); pipeline.add_renderable(sky_scene); @@ -375,6 +394,8 @@ void DesertPillars::create_skybox() skybox_shprog.attach_shader_owned(new GL::VertexShader(skybox_vertex_src)); skybox_shprog.attach_shader_owned(new GL::FragmentShader(skybox_fragment_src)); + skybox_shprog.bind_attribute(GL::VERTEX3, "vertex"); + skybox_shprog.bind_fragment_data(0, "frag_color"); skybox_shprog.link(); GL::RenderPass &pass = skybox_tech.add_pass("sky"); @@ -477,6 +498,12 @@ void DesertPillars::create_tiles_texture() } GL::Program shprog(texture_vertex_src, texture_fragment_src); + shprog.bind_attribute(GL::VERTEX3, "vertex"); + shprog.bind_attribute(GL::NORMAL3, "normal"); + shprog.bind_attribute(GL::COLOR4_UBYTE, "color"); + shprog.bind_fragment_data(0, "frag_color"); + shprog.bind_fragment_data(1, "frag_normal"); + shprog.link(); // Use an FBO to turn the geometry into a normalmapped texture GL::Framebuffer fbo; -- 2.45.2