Browse Source

scene: make the postprocess a nop for now and clean up some shaders.

undefined
Sam Hocevar 8 years ago
parent
commit
70799848f7
4 changed files with 59 additions and 76 deletions
  1. +7
    -27
      src/gpu/line.lolfx
  2. +3
    -2
      src/gpu/postprocess.lolfx
  3. +9
    -33
      src/gpu/tile.lolfx
  4. +40
    -14
      src/scene.cpp

+ 7
- 27
src/gpu/line.lolfx View File

@@ -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;
} }



+ 3
- 2
src/gpu/postprocess.lolfx View File

@@ -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;
} }


+ 9
- 33
src/gpu/tile.lolfx View File

@@ -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;
} }



+ 40
- 14
src/scene.cpp View File

@@ -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");
} }


//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------


Loading…
Cancel
Save