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