| @@ -2,9 +2,9 @@ | |||
| #version 130 | |||
| attribute vec4 in_Position; | |||
| attribute vec4 in_Color; | |||
| varying vec4 pass_Color; | |||
| in vec4 in_Position; | |||
| in vec4 in_Color; | |||
| out vec4 pass_color; | |||
| uniform mat4 u_projection; | |||
| uniform mat4 u_view; | |||
| @@ -16,7 +16,7 @@ void main() | |||
| else | |||
| gl_Position = u_projection * u_view | |||
| * vec4(in_Position.xyz, 1.0); | |||
| pass_Color = in_Color; | |||
| pass_color = in_Color; | |||
| } | |||
| [frag.glsl] | |||
| @@ -27,31 +27,11 @@ void main() | |||
| precision mediump float; | |||
| #endif | |||
| varying vec4 pass_Color; | |||
| in vec4 pass_color; | |||
| out vec4 out_color; | |||
| void main() | |||
| { | |||
| gl_FragColor = pass_Color; | |||
| } | |||
| [vert.hlsl] | |||
| void main(float4 in_Position : POSITION, | |||
| float4 in_Color : COLOR, | |||
| uniform float4x4 u_projection, | |||
| uniform float4x4 u_view, | |||
| out float4 out_Color : COLOR, | |||
| out float4 out_Position : POSITION) | |||
| { | |||
| out_Position = mul(u_projection, mul(u_view, in_Position)); | |||
| out_Color = in_Color; | |||
| } | |||
| [frag.hlsl] | |||
| void main(float4 in_Color : COLOR, | |||
| out float4 out_FragColor : COLOR) | |||
| { | |||
| out_FragColor = in_Color; | |||
| out_color = pass_color; | |||
| } | |||
| @@ -26,8 +26,9 @@ varying vec2 pass_Position; | |||
| void main(void) | |||
| { | |||
| vec2 texcoords = pass_Position * 0.5 + vec2(0.5, 0.5); | |||
| texcoords += 0.02 * sin(0.05 * gl_FragCoord.xy); | |||
| vec2 pos = pass_Position; | |||
| vec2 texcoords = pos * 0.5 + vec2(0.5, 0.5); | |||
| vec4 color = vec4(texture2D(u_texture, texcoords).rgb, 1.0); | |||
| gl_FragColor = color; | |||
| } | |||
| @@ -2,9 +2,9 @@ | |||
| #version 130 | |||
| attribute vec3 in_Position; | |||
| attribute vec2 in_TexCoord; | |||
| varying vec2 pass_TexCoord; | |||
| in vec3 in_Position; | |||
| in vec2 in_TexCoord; | |||
| out vec2 pass_texcoord; | |||
| uniform mat4 u_projection; | |||
| uniform mat4 u_view; | |||
| @@ -14,7 +14,7 @@ void main() | |||
| { | |||
| gl_Position = u_projection * u_view * u_model | |||
| * vec4(in_Position, 1.0); | |||
| pass_TexCoord = in_TexCoord; | |||
| pass_texcoord = in_TexCoord; | |||
| } | |||
| [frag.glsl] | |||
| @@ -25,41 +25,17 @@ void main() | |||
| precision mediump float; | |||
| #endif | |||
| in vec2 pass_texcoord; | |||
| out vec4 out_color; | |||
| uniform sampler2D u_texture; | |||
| uniform vec2 u_texsize; | |||
| varying vec2 pass_TexCoord; | |||
| void main() | |||
| { | |||
| vec4 col = texture2D(u_texture, pass_TexCoord); | |||
| vec4 col = texture2D(u_texture, pass_texcoord); | |||
| if (col.a == 0.0) | |||
| discard; | |||
| gl_FragColor = col; | |||
| } | |||
| [vert.hlsl] | |||
| void main(float4 in_Position : POSITION, | |||
| float2 in_TexCoord : TEXCOORD0, | |||
| uniform float4x4 u_projection, | |||
| uniform float4x4 u_view, | |||
| uniform float4x4 u_model, | |||
| uniform float2 u_texsize, | |||
| out float2 out_TexCoord : TEXCOORD0, | |||
| out float4 out_Position : POSITION) | |||
| { | |||
| float2 delta = float2(0.0, 0.0); | |||
| out_Position = mul(u_projection, mul(u_view, mul(u_model, in_Position))); | |||
| out_TexCoord = in_TexCoord + delta; | |||
| } | |||
| [frag.hlsl] | |||
| void main(float2 in_TexCoord : TEXCOORD0, | |||
| uniform sampler2D u_texture, | |||
| out float4 out_FragColor : COLOR) | |||
| { | |||
| float4 col = tex2D(u_texture, in_TexCoord); | |||
| out_FragColor = col; | |||
| out_color = col; | |||
| } | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2015 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2016 Sam Hocevar <sam@hocevar.net> | |||
| // © 2014—2015 Benjamin “Touky” Huet <huet.benjamin@gmail.com> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| @@ -51,6 +51,14 @@ struct Tile | |||
| //----------------------------------------------------------------------------- | |||
| static array<SceneDisplay*> m_scene_displays; | |||
| static inline void gpu_marker(char const *message) | |||
| { | |||
| #if USE_GLEW | |||
| if (GLEW_GREMEDY_string_marker) | |||
| glStringMarkerGREMEDY(0, message); | |||
| #endif | |||
| } | |||
| /* | |||
| * Public SceneDisplay class | |||
| */ | |||
| @@ -607,12 +615,22 @@ void Scene::DisableDisplay() | |||
| /* Render everything that the scene contains */ | |||
| void Scene::render(float seconds) | |||
| { | |||
| bool do_pp = true; | |||
| gpu_marker("Start Render"); | |||
| /* First render into the offline buffer */ | |||
| data->m_backbuffer->Bind(); | |||
| if (do_pp) | |||
| data->m_backbuffer->Bind(); | |||
| { | |||
| RenderContext rc; | |||
| rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||
| rc.SetClearDepth(1.f); | |||
| if (do_pp) | |||
| { | |||
| rc.SetClearColor(vec4(0.f, 0.f, 0.f, 1.f)); | |||
| rc.SetClearDepth(1.f); | |||
| } | |||
| Renderer::Get()->Clear(ClearMask::Color | ClearMask::Depth); | |||
| // FIXME: get rid of the delta time argument | |||
| @@ -620,16 +638,24 @@ void Scene::render(float seconds) | |||
| render_tiles(); | |||
| render_lines(seconds); | |||
| } | |||
| data->m_backbuffer->Unbind(); | |||
| /* Now blit the offline buffer */ | |||
| data->m_pp.m_shader->Bind(); | |||
| data->m_pp.m_shader->SetUniform(data->m_pp.m_texture, data->m_backbuffer->GetTextureUniform(), 0); | |||
| data->m_pp.m_vdecl->SetStream(data->m_pp.m_vbo, data->m_pp.m_coord); | |||
| data->m_pp.m_vdecl->Bind(); | |||
| data->m_pp.m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 6); | |||
| data->m_pp.m_vdecl->Unbind(); | |||
| data->m_pp.m_shader->Unbind(); | |||
| if (do_pp) | |||
| { | |||
| data->m_backbuffer->Unbind(); | |||
| gpu_marker("PostProcess"); | |||
| /* Now blit the offline buffer */ | |||
| data->m_pp.m_shader->Bind(); | |||
| data->m_pp.m_shader->SetUniform(data->m_pp.m_texture, data->m_backbuffer->GetTextureUniform(), 0); | |||
| data->m_pp.m_vdecl->SetStream(data->m_pp.m_vbo, data->m_pp.m_coord); | |||
| data->m_pp.m_vdecl->Bind(); | |||
| data->m_pp.m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 6); | |||
| data->m_pp.m_vdecl->Unbind(); | |||
| data->m_pp.m_shader->Unbind(); | |||
| } | |||
| gpu_marker("End Render"); | |||
| } | |||
| //----------------------------------------------------------------------------- | |||