mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-19 05:29:17 +02:00
win work
This commit is contained in:
@@ -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})
|
||||
|
||||
43
renderer.cpp
43
renderer.cpp
@@ -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;
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user