16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-19 05:29:17 +02:00
This commit is contained in:
milek7
2018-07-11 19:25:04 +02:00
parent 7299fc866e
commit 29167ed459
10 changed files with 72 additions and 38 deletions

View File

@@ -163,7 +163,10 @@ set_target_properties( ${PROJECT_NAME}
DEBUG_POSTFIX "_d"
)
#cmake_policy(SET CMP0072 NEW)
if (POLICY CMP0072)
cmake_policy(SET CMP0072 NEW)
endif()
find_package(OpenGL REQUIRED)
include_directories(${OPENGL_INCLUDE_DIR})
target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES})

View File

@@ -193,8 +193,8 @@ opengl_renderer::Init( GLFWwindow *Window ) {
m_shadow_fb = std::make_unique<gl::framebuffer>();
m_shadow_tex = std::make_unique<opengl_texture>();
m_shadow_tex->alloc_rendertarget(GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, m_shadowbuffersize, m_shadowbuffersize);
m_shadow_fb->attach(*m_shadow_tex, GL_DEPTH_ATTACHMENT);
m_shadow_tex->alloc_rendertarget(GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT, m_shadowbuffersize, m_shadowbuffersize);
m_shadow_fb->attach(*m_shadow_tex, GL_DEPTH_ATTACHMENT);
if (!m_shadow_fb->is_complete())
return false;
@@ -284,29 +284,17 @@ opengl_renderer::Render_pass( rendermode const Mode ) {
glDebug("rendermode::color");
{
/*
glDebug("render shadowmap start");
Timer::subsystem.gfx_shadows.start();
Render_pass(rendermode::shadows);
setup_pass( m_renderpass, Mode ); // restore draw mode. TBD, TODO: render mode stack
m_shadowtexturematrix =
glm::mat4 { 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f } // bias from [-1, 1] to [0, 1]
* m_shadowpass.camera.projection()
// during colour pass coordinates are moved from camera-centric to light-centric, essentially the difference between these two origins
* glm::translate(
glm::mat4{ glm::mat3{ m_shadowpass.camera.modelview() } },
glm::vec3{ m_renderpass.camera.position() - m_shadowpass.camera.position() } );
scene_ubs.lightview = m_shadowtexturematrix;
Timer::subsystem.gfx_shadows.stop();
glDebug("render shadowmap end");
*/
}
m_main_fb->bind();
glEnable(GL_FRAMEBUFFER_SRGB);
if( ( true == m_environmentcubetexturesupport )
&& ( true == World.InitPerformed() ) ) {
@@ -316,7 +304,7 @@ glm::vec3{ m_renderpass.camera.position() - m_shadowpass.camera.position() } );
}
}
::glViewport( 0, 0, Global.iWindowWidth, Global.iWindowHeight );
glViewport( 0, 0, 1280, 720 );
if( World.InitPerformed() ) {
auto const skydomecolour = World.Environment.m_skydome.GetAverageColor();
@@ -340,6 +328,19 @@ glm::vec3{ m_renderpass.camera.position() - m_shadowpass.camera.position() } );
scene_ubo->update(scene_ubs);
Render( &World.Environment );
{
glm::mat4 coordmove(
0.5, 0.0, 0.0, 0.0,
0.0, 0.5, 0.0, 0.0,
0.0, 0.0, 0.5, 0.0,
0.5, 0.5, 0.5, 1.0);
glm::mat4 depthproj = m_shadowpass.camera.projection();
glm::mat4 depthcam = m_shadowpass.camera.modelview();
glm::mat4 worldcam = m_renderpass.camera.modelview();
scene_ubs.lightview = coordmove * depthproj * depthcam * glm::inverse(worldcam);
}
scene_ubs.projection = OpenGLMatrices.data(GL_PROJECTION);
scene_ubo->update(scene_ubs);
// opaque parts...
@@ -399,6 +400,8 @@ glm::vec3{ m_renderpass.camera.position() - m_shadowpass.camera.position() } );
glDebug("color pass done");
}
glEnable(GL_FRAMEBUFFER_SRGB);
glViewport(0, 0, Global.iWindowWidth, Global.iWindowHeight);
m_pfx->apply(*m_main_tex, nullptr);
m_textures.reset_unit_cache();
glDisable(GL_FRAMEBUFFER_SRGB);
@@ -417,11 +420,19 @@ glm::vec3{ m_renderpass.camera.position() - m_shadowpass.camera.position() } );
//glEnable(GL_POLYGON_OFFSET_FILL);
//glPolygonOffset(1.0f, 1.0f);
glViewport(0, 0, m_shadowbuffersize, m_shadowbuffersize);
m_shadow_fb->bind();
glClear(GL_DEPTH_BUFFER_BIT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
setup_matrices();
setup_drawing(false);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
scene_ubs.time = Timer::GetTime();
scene_ubs.projection = OpenGLMatrices.data(GL_PROJECTION);
scene_ubo->update(scene_ubs);
Render(simulation::Region);
m_shadowpass = m_renderpass;

View File

@@ -1,8 +1,8 @@
#version 330
in vec3 v_vert;
in vec3 v_normal;
in vec2 v_coord;
layout(location = 0) in vec3 v_vert;
layout(location = 1) in vec3 v_normal;
layout(location = 2) in vec2 v_coord;
#include <common>

View File

@@ -3,10 +3,23 @@
in vec3 f_normal;
in vec2 f_coord;
in vec3 f_pos;
in vec4 f_light_pos;
#include <common>
uniform sampler2D tex1;
uniform sampler2DShadow shadowmap;
float calc_shadow()
{
vec3 coords = f_light_pos.xyz;
//float bias = clamp(0.0025*tan(acos(clamp(dot(f_normal, -lights[0].dir), 0.0, 1.0))), 0, 0.01);
float bias = 0.0f;
float shadow = texture(shadowmap, vec3(coords.xy, coords.z - bias));
return shadow;
}
vec3 apply_fog(vec3 color)
{
@@ -61,6 +74,7 @@ float calc_dir_light(light_s light)
void main()
{
float shadow = calc_shadow();
vec3 result = ambient * 0.3 + param[0].rgb * emission;
for (uint i = 0U; i < lights_count; i++)
{
@@ -74,6 +88,8 @@ void main()
else if (light.type == LIGHT_DIR)
part = calc_dir_light(light);
if (i == 0U)
part *= shadow;
result += light.color * part;
}

View File

@@ -47,11 +47,11 @@ void main()
vec3 hdr_color = texture(tex1, texcoord).xyz;
vec3 mapped;
if (texcoord.x < 0.33f)
mapped = reinhard(hdr_color);
else if (texcoord.x < 0.66f)
mapped = filmic(hdr_color);
else
//if (texcoord.x < 0.33f)
// mapped = reinhard(hdr_color);
//else if (texcoord.x < 0.66f)
// mapped = filmic(hdr_color);
//else
mapped = ACESFilm(hdr_color);
gl_FragColor = vec4(mapped, 1.0);
}

View File

@@ -2,9 +2,11 @@
in vec2 f_coord;
uniform sampler2D tex;
//uniform sampler2D tex;
void main()
{
gl_FragDepth = gl_FragCoord.z + (1.0 - texture(tex, f_coord).w);
//gl_FragColor = texture(tex, f_coord);
gl_FragDepth = gl_FragCoord.z;
//gl_FragDepth = gl_FragCoord.z + (1.0 - texture(tex, f_coord).w);
}

View File

@@ -1,7 +1,7 @@
#version 330
layout (location = 0) in vec3 v_vert;
layout (location = 2) in vec2 v_coord;
layout(location = 0) in vec3 v_vert;
layout(location = 2) in vec2 v_coord;
out vec2 f_coord;

View File

@@ -1,15 +1,16 @@
#version 330
in vec3 v_vert;
in vec3 v_normal;
in vec2 v_coord;
in vec4 v_tangent;
layout(location = 0) in vec3 v_vert;
layout(location = 1) in vec3 v_normal;
layout(location = 2) in vec2 v_coord;
layout(location = 3) in vec4 v_tangent;
out vec3 f_normal;
out vec2 f_coord;
out vec3 f_pos;
out mat3 f_tbn;
out vec4 f_tangent;
out vec4 f_light_pos;
#include <common>
@@ -20,6 +21,7 @@ void main()
f_coord = v_coord;
f_tangent = v_tangent;
f_pos = vec3(modelview * vec4(v_vert, 1.0f));
f_light_pos = lightview * vec4(f_pos, 1.0f);
vec3 T = normalize(modelviewnormal * v_tangent.xyz);
vec3 B = normalize(modelviewnormal * cross(v_normal, v_tangent.xyz) * v_tangent.w);

View File

@@ -1,8 +1,8 @@
#version 330
in vec3 v_vert;
in vec3 v_normal;
in vec2 v_coord;
layout(location = 0) in vec3 v_vert;
layout(location = 1) in vec3 v_normal;
layout(location = 2) in vec2 v_coord;
#include <common>

View File

@@ -1,7 +1,7 @@
#version 330
in vec3 v_vert;
in vec3 v_color;
layout(location = 0) in vec3 v_vert;
layout(location = 1) in vec3 v_color;
out vec3 f_color;