| @@ -2,9 +2,9 @@ | |||||
| #version 130 | #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_projection; | ||||
| uniform mat4 u_view; | uniform mat4 u_view; | ||||
| @@ -16,7 +16,7 @@ void main() | |||||
| else | else | ||||
| gl_Position = u_projection * u_view | gl_Position = u_projection * u_view | ||||
| * vec4(in_Position.xyz, 1.0); | * vec4(in_Position.xyz, 1.0); | ||||
| pass_Color = in_Color; | |||||
| pass_color = in_Color; | |||||
| } | } | ||||
| [frag.glsl] | [frag.glsl] | ||||
| @@ -27,31 +27,11 @@ void main() | |||||
| precision mediump float; | precision mediump float; | ||||
| #endif | #endif | ||||
| varying vec4 pass_Color; | |||||
| in vec4 pass_color; | |||||
| out vec4 out_color; | |||||
| void main() | 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) | 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); | vec4 color = vec4(texture2D(u_texture, texcoords).rgb, 1.0); | ||||
| gl_FragColor = color; | gl_FragColor = color; | ||||
| } | } | ||||
| @@ -2,9 +2,9 @@ | |||||
| #version 130 | #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_projection; | ||||
| uniform mat4 u_view; | uniform mat4 u_view; | ||||
| @@ -14,7 +14,7 @@ void main() | |||||
| { | { | ||||
| gl_Position = u_projection * u_view * u_model | gl_Position = u_projection * u_view * u_model | ||||
| * vec4(in_Position, 1.0); | * vec4(in_Position, 1.0); | ||||
| pass_TexCoord = in_TexCoord; | |||||
| pass_texcoord = in_TexCoord; | |||||
| } | } | ||||
| [frag.glsl] | [frag.glsl] | ||||
| @@ -25,41 +25,17 @@ void main() | |||||
| precision mediump float; | precision mediump float; | ||||
| #endif | #endif | ||||
| in vec2 pass_texcoord; | |||||
| out vec4 out_color; | |||||
| uniform sampler2D u_texture; | uniform sampler2D u_texture; | ||||
| uniform vec2 u_texsize; | uniform vec2 u_texsize; | ||||
| varying vec2 pass_TexCoord; | |||||
| void main() | void main() | ||||
| { | { | ||||
| vec4 col = texture2D(u_texture, pass_TexCoord); | |||||
| vec4 col = texture2D(u_texture, pass_texcoord); | |||||
| if (col.a == 0.0) | if (col.a == 0.0) | ||||
| discard; | 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 | // 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> | // © 2014—2015 Benjamin “Touky” Huet <huet.benjamin@gmail.com> | ||||
| // | // | ||||
| // Lol Engine is free software. It comes without any warranty, to | // Lol Engine is free software. It comes without any warranty, to | ||||
| @@ -51,6 +51,14 @@ struct Tile | |||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
| static array<SceneDisplay*> m_scene_displays; | 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 | * Public SceneDisplay class | ||||
| */ | */ | ||||
| @@ -607,12 +615,22 @@ void Scene::DisableDisplay() | |||||
| /* Render everything that the scene contains */ | /* Render everything that the scene contains */ | ||||
| void Scene::render(float seconds) | void Scene::render(float seconds) | ||||
| { | { | ||||
| bool do_pp = true; | |||||
| gpu_marker("Start Render"); | |||||
| /* First render into the offline buffer */ | /* First render into the offline buffer */ | ||||
| data->m_backbuffer->Bind(); | |||||
| if (do_pp) | |||||
| data->m_backbuffer->Bind(); | |||||
| { | { | ||||
| RenderContext rc; | 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); | Renderer::Get()->Clear(ClearMask::Color | ClearMask::Depth); | ||||
| // FIXME: get rid of the delta time argument | // FIXME: get rid of the delta time argument | ||||
| @@ -620,16 +638,24 @@ void Scene::render(float seconds) | |||||
| render_tiles(); | render_tiles(); | ||||
| render_lines(seconds); | 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"); | |||||
| } | } | ||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||