mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-07 14:18:30 +03:00
Separated ESM Filter's and Image Filter's Scene Shader Data
This commit is contained in:
@@ -1132,9 +1132,10 @@ sprite_width(), sprite_height(), screen_x_offset(), screen_y_offset(), screen_wi
|
||||
camera_blur_ubo.Create(gl_state, sizeof(camera_blur_shader_data));
|
||||
contour_coef_ubo.Create(gl_state, sizeof(contour_coef_shader_data));
|
||||
contour_params_ubo.Create(gl_state, sizeof(contour_params_shader_data));
|
||||
filter_scene_ubo.Create(gl_state, sizeof(filter_scene_shader_data));
|
||||
esm_filter_scene_ubo.Create(gl_state, sizeof(esm_filter_scene_shader_data));
|
||||
esm_filter_batch_ubo.Create(gl_state, sizeof(esm_filter_batch_shader_data));
|
||||
imgfilter_batch_ubo.Create(gl_state, sizeof(imgfilter_batch_shader_data));
|
||||
image_filter_scene_ubo.Create(gl_state, sizeof(image_filter_scene_shader_data));
|
||||
image_filter_batch_ubo.Create(gl_state, sizeof(image_filter_batch_shader_data));
|
||||
exposure_measure_ubo.Create(gl_state, sizeof(exposure_measure_shader_data));
|
||||
gaussian_coef_ubo.Create(gl_state, sizeof(gaussian_coef_shader_data));
|
||||
glass_eye_batch_ubo.Create(gl_state, sizeof(glass_eye_batch_shader_data));
|
||||
@@ -1304,9 +1305,10 @@ render_context::~render_context() {
|
||||
glass_eye_batch_ubo.Destroy();
|
||||
gaussian_coef_ubo.Destroy();
|
||||
exposure_measure_ubo.Destroy();
|
||||
imgfilter_batch_ubo.Destroy();
|
||||
image_filter_batch_ubo.Destroy();
|
||||
image_filter_scene_ubo.Destroy();
|
||||
esm_filter_batch_ubo.Destroy();
|
||||
filter_scene_ubo.Destroy();
|
||||
esm_filter_scene_ubo.Destroy();
|
||||
contour_params_ubo.Destroy();
|
||||
contour_coef_ubo.Destroy();
|
||||
camera_blur_ubo.Destroy();
|
||||
|
||||
@@ -120,11 +120,6 @@ struct contour_params_shader_data {
|
||||
vec4 g_near_far;
|
||||
};
|
||||
|
||||
struct filter_scene_shader_data {
|
||||
vec4 g_transform;
|
||||
vec4 g_texcoord;
|
||||
};
|
||||
|
||||
struct exposure_measure_shader_data {
|
||||
vec4 g_spot_weight;
|
||||
vec4 g_spot_coefficients[32];
|
||||
@@ -134,12 +129,22 @@ struct gaussian_coef_shader_data {
|
||||
vec4 g_coef[8];
|
||||
};
|
||||
|
||||
struct esm_filter_scene_shader_data {
|
||||
vec4 g_transform;
|
||||
vec4 g_texcoord;
|
||||
};
|
||||
|
||||
struct esm_filter_batch_shader_data {
|
||||
vec4 g_params;
|
||||
vec4 g_gauss[2];
|
||||
};
|
||||
|
||||
struct imgfilter_batch_shader_data {
|
||||
struct image_filter_scene_shader_data {
|
||||
vec4 g_transform;
|
||||
vec4 g_texcoord;
|
||||
};
|
||||
|
||||
struct image_filter_batch_shader_data {
|
||||
vec4 g_texture_lod;
|
||||
vec4 g_color_scale;
|
||||
vec4 g_color_offset;
|
||||
@@ -577,9 +582,10 @@ struct render_context {
|
||||
GL::UniformBuffer camera_blur_ubo;
|
||||
GL::UniformBuffer contour_coef_ubo;
|
||||
GL::UniformBuffer contour_params_ubo;
|
||||
GL::UniformBuffer filter_scene_ubo;
|
||||
GL::UniformBuffer esm_filter_batch_ubo;
|
||||
GL::UniformBuffer imgfilter_batch_ubo;
|
||||
GL::UniformBuffer esm_filter_scene_ubo;
|
||||
GL::UniformBuffer image_filter_batch_ubo;
|
||||
GL::UniformBuffer image_filter_scene_ubo;
|
||||
GL::UniformBuffer exposure_measure_ubo;
|
||||
GL::UniformBuffer gaussian_coef_ubo;
|
||||
GL::UniformBuffer glass_eye_batch_ubo;
|
||||
|
||||
+25
-25
@@ -1254,21 +1254,21 @@ void image_filter_scale(render_data_context& rend_data_ctx,
|
||||
dst->Bind(rend_data_ctx.state);
|
||||
dst->SetViewport(rend_data_ctx.state);
|
||||
|
||||
filter_scene_shader_data filter_scene = {};
|
||||
image_filter_scene_shader_data filter_scene = {};
|
||||
filter_scene.g_transform = { 1.0f, 1.0f, 0.0f, 0.0f };
|
||||
filter_scene.g_texcoord = { 1.0f, 1.0f, 0.0f, 0.0f };
|
||||
rctx->filter_scene_ubo.WriteMemory(rend_data_ctx.state, filter_scene);
|
||||
rctx->image_filter_scene_ubo.WriteMemory(rend_data_ctx.state, filter_scene);
|
||||
|
||||
imgfilter_batch_shader_data imgfilter_batch = {};
|
||||
imgfilter_batch.g_color_scale = scale;
|
||||
imgfilter_batch.g_color_offset = 0.0f;
|
||||
imgfilter_batch.g_texture_lod = 0.0f;
|
||||
rctx->imgfilter_batch_ubo.WriteMemory(rend_data_ctx.state, imgfilter_batch);
|
||||
image_filter_batch_shader_data image_filter_batch = {};
|
||||
image_filter_batch.g_color_scale = scale;
|
||||
image_filter_batch.g_color_offset = 0.0f;
|
||||
image_filter_batch.g_texture_lod = 0.0f;
|
||||
rctx->image_filter_batch_ubo.WriteMemory(rend_data_ctx.state, image_filter_batch);
|
||||
|
||||
rend_data_ctx.shader_flags.arr[U_IMAGE_FILTER] = 5;
|
||||
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_IMGFILT);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(0, rctx->filter_scene_ubo);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(1, rctx->imgfilter_batch_ubo);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(0, rctx->image_filter_scene_ubo);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(1, rctx->image_filter_batch_ubo);
|
||||
rend_data_ctx.state.active_bind_texture_2d(0, src->glid);
|
||||
rend_data_ctx.state.bind_sampler(0, rctx->render_samplers[0]);
|
||||
rend_data_ctx.state.bind_vertex_array(rctx->common_vao);
|
||||
@@ -1404,10 +1404,10 @@ static void apply_esm_filter(render_data_context& rend_data_ctx,
|
||||
render_context* rctx = rctx_ptr;
|
||||
|
||||
rend_data_ctx.state.begin_event("`anonymous-namespace'::Impl::apply_esm_filter");
|
||||
filter_scene_shader_data filter_scene = {};
|
||||
esm_filter_scene_shader_data filter_scene = {};
|
||||
filter_scene.g_transform = 0.0f;
|
||||
filter_scene.g_texcoord = { 1.0f, 1.0f, 0.0f, 0.0f };
|
||||
rctx->filter_scene_ubo.WriteMemory(rend_data_ctx.state, filter_scene);
|
||||
rctx->esm_filter_scene_ubo.WriteMemory(rend_data_ctx.state, filter_scene);
|
||||
|
||||
esm_filter_batch_shader_data esm_filter_batch = {};
|
||||
double_t v6 = 1.0 / (sqrt(M_PI * 2.0) * sigma);
|
||||
@@ -1417,7 +1417,7 @@ static void apply_esm_filter(render_data_context& rend_data_ctx,
|
||||
|
||||
rend_data_ctx.shader_flags.arr[U_LIGHT_PROJ] = enable_lit_proj ? 1 : 0;
|
||||
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_ESMGAUSS);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(0, rctx->filter_scene_ubo);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(0, rctx->esm_filter_scene_ubo);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(1, rctx->esm_filter_batch_ubo);
|
||||
|
||||
rend_data_ctx.state.set_viewport(0, 0, dst_tex->width, dst_tex->height);
|
||||
@@ -1457,16 +1457,16 @@ static void apply_esm_min_filter(render_data_context& rend_data_ctx,
|
||||
render_context* rctx = rctx_ptr;
|
||||
|
||||
rend_data_ctx.state.begin_event("minimize");
|
||||
filter_scene_shader_data filter_scene = {};
|
||||
esm_filter_scene_shader_data filter_scene = {};
|
||||
filter_scene.g_transform = 0.0f;
|
||||
filter_scene.g_texcoord = { 1.0f, 1.0f, 0.0f, 0.0f };
|
||||
rctx->filter_scene_ubo.WriteMemory(rend_data_ctx.state, filter_scene);
|
||||
rctx->esm_filter_scene_ubo.WriteMemory(rend_data_ctx.state, filter_scene);
|
||||
|
||||
esm_filter_batch_shader_data esm_filter_batch = {};
|
||||
esm_filter_batch.g_gauss[0] = 0.0f;
|
||||
esm_filter_batch.g_gauss[1] = 0.0f;
|
||||
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(0, rctx->filter_scene_ubo);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(0, rctx->esm_filter_scene_ubo);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(1, rctx->esm_filter_batch_ubo);
|
||||
|
||||
rend_data_ctx.state.set_viewport(0, 0, dst_tex->width, dst_tex->height);
|
||||
@@ -1970,27 +1970,27 @@ static void apply_blur_filter_sub(render_data_context& rend_data_ctx, RenderText
|
||||
dst->Bind(rend_data_ctx.state);
|
||||
dst->SetViewport(rend_data_ctx.state);
|
||||
|
||||
filter_scene_shader_data filter_scene = {};
|
||||
image_filter_scene_shader_data filter_scene = {};
|
||||
float_t w = res_scale.x / (float_t)src->GetWidth();
|
||||
float_t h = res_scale.y / (float_t)src->GetHeight();
|
||||
filter_scene.g_transform = { w, h, 0.0f, 0.0f };
|
||||
filter_scene.g_texcoord = { 1.0f, 1.0f, 0.0f, 0.0f };
|
||||
rctx->filter_scene_ubo.WriteMemory(rend_data_ctx.state, filter_scene);
|
||||
rctx->image_filter_scene_ubo.WriteMemory(rend_data_ctx.state, filter_scene);
|
||||
|
||||
imgfilter_batch_shader_data imgfilter_batch = {};
|
||||
image_filter_batch_shader_data image_filter_batch = {};
|
||||
if (filter == BLUR_FILTER_32)
|
||||
imgfilter_batch.g_color_scale = scale * (float_t)(1.0 / 8.0);
|
||||
image_filter_batch.g_color_scale = scale * (float_t)(1.0 / 8.0);
|
||||
else
|
||||
imgfilter_batch.g_color_scale = scale * (float_t)(1.0 / 4.0);
|
||||
imgfilter_batch.g_color_offset = offset;
|
||||
imgfilter_batch.g_texture_lod = 0.0f;
|
||||
rctx->imgfilter_batch_ubo.WriteMemory(rend_data_ctx.state, imgfilter_batch);
|
||||
image_filter_batch.g_color_scale = scale * (float_t)(1.0 / 4.0);
|
||||
image_filter_batch.g_color_offset = offset;
|
||||
image_filter_batch.g_texture_lod = 0.0f;
|
||||
rctx->image_filter_batch_ubo.WriteMemory(rend_data_ctx.state, image_filter_batch);
|
||||
|
||||
rend_data_ctx.shader_flags.arr[U_IMAGE_FILTER] = filter == BLUR_FILTER_32 ? 1 : 0;
|
||||
rend_data_ctx.state.bind_vertex_array(rctx->box_vao);
|
||||
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_IMGFILT);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(0, rctx->filter_scene_ubo);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(1, rctx->imgfilter_batch_ubo);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(0, rctx->image_filter_scene_ubo);
|
||||
rend_data_ctx.state.bind_uniform_buffer_base(1, rctx->image_filter_batch_ubo);
|
||||
rend_data_ctx.state.active_bind_texture_2d(0, src->GetColorTex());
|
||||
rend_data_ctx.state.bind_sampler(0, rctx->render_samplers[0]);
|
||||
rend_data_ctx.state.draw_arrays(GL_TRIANGLE_STRIP, (GLint)(filter * 4LL), 4);
|
||||
|
||||
+12
-12
@@ -1107,7 +1107,7 @@ static const shader_description glass_eye_fpt_desc[] = {
|
||||
|
||||
static const shader_description esm_gauss_vpt_desc[] = {
|
||||
{ SHADER_DESCRIPTION_UNIFORM, 0, SHADER_DESCRIPTION_UNIFORM_READ_ONLY
|
||||
| sizeof(filter_scene_shader_data), U_INVALID, },
|
||||
| sizeof(esm_filter_scene_shader_data), U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_END, -1, -1, U_INVALID, },
|
||||
};
|
||||
|
||||
@@ -1121,7 +1121,7 @@ static const shader_description esm_gauss_fpt_desc[] = {
|
||||
|
||||
static const shader_description esm_filter_min_vpt_desc[] = {
|
||||
{ SHADER_DESCRIPTION_UNIFORM, 0, SHADER_DESCRIPTION_UNIFORM_READ_ONLY
|
||||
| sizeof(filter_scene_shader_data), U_INVALID, },
|
||||
| sizeof(esm_filter_scene_shader_data), U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_END, -1, -1, U_INVALID, },
|
||||
};
|
||||
|
||||
@@ -1135,7 +1135,7 @@ static const shader_description esm_filter_min_fpt_desc[] = {
|
||||
|
||||
static const shader_description esm_filter_erosion_vpt_desc[] = {
|
||||
{ SHADER_DESCRIPTION_UNIFORM, 0, SHADER_DESCRIPTION_UNIFORM_READ_ONLY
|
||||
| sizeof(filter_scene_shader_data), U_INVALID, },
|
||||
| sizeof(esm_filter_scene_shader_data), U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_END, -1, -1, U_INVALID, },
|
||||
};
|
||||
|
||||
@@ -1955,14 +1955,14 @@ static const shader_description box4_vpt_desc[] = {
|
||||
{ SHADER_DESCRIPTION_VERTEX_INPUT, 2, 2, U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_VERTEX_INPUT, 3, 2, U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_UNIFORM, 0, SHADER_DESCRIPTION_UNIFORM_READ_ONLY
|
||||
| sizeof(filter_scene_shader_data), U_INVALID, },
|
||||
| sizeof(image_filter_scene_shader_data), U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_END, -1, -1, U_INVALID, },
|
||||
};
|
||||
|
||||
static const shader_description box4_fpt_desc[] = {
|
||||
{ SHADER_DESCRIPTION_SAMPLER, 0, 0, U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_UNIFORM, 1, SHADER_DESCRIPTION_UNIFORM_READ_ONLY
|
||||
| sizeof(imgfilter_batch_shader_data), U_INVALID, },
|
||||
| sizeof(image_filter_batch_shader_data), U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_FRAGMENT_OUTPUT, 0, 4, U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_END, -1, -1, U_INVALID, },
|
||||
};
|
||||
@@ -1977,28 +1977,28 @@ static const shader_description box8_vpt_desc[] = {
|
||||
{ SHADER_DESCRIPTION_VERTEX_INPUT, 6, 2, U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_VERTEX_INPUT, 7, 2, U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_UNIFORM, 0, SHADER_DESCRIPTION_UNIFORM_READ_ONLY
|
||||
| sizeof(filter_scene_shader_data), U_INVALID, },
|
||||
| sizeof(image_filter_scene_shader_data), U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_END, -1, -1, U_INVALID, },
|
||||
};
|
||||
|
||||
static const shader_description box8_fpt_desc[] = {
|
||||
{ SHADER_DESCRIPTION_SAMPLER, 0, 0, U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_UNIFORM, 1, SHADER_DESCRIPTION_UNIFORM_READ_ONLY
|
||||
| sizeof(imgfilter_batch_shader_data), U_INVALID, },
|
||||
| sizeof(image_filter_batch_shader_data), U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_FRAGMENT_OUTPUT, 0, 4, U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_END, -1, -1, U_INVALID, },
|
||||
};
|
||||
|
||||
static const shader_description copy_vpt_desc[] = {
|
||||
{ SHADER_DESCRIPTION_UNIFORM, 0, SHADER_DESCRIPTION_UNIFORM_READ_ONLY
|
||||
| sizeof(filter_scene_shader_data), U_INVALID, },
|
||||
| sizeof(image_filter_scene_shader_data), U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_END, -1, -1, U_INVALID, },
|
||||
};
|
||||
|
||||
static const shader_description copy_fpt_desc[] = {
|
||||
{ SHADER_DESCRIPTION_SAMPLER, 0, 0, U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_UNIFORM, 1, SHADER_DESCRIPTION_UNIFORM_READ_ONLY
|
||||
| sizeof(imgfilter_batch_shader_data), U_INVALID, },
|
||||
| sizeof(image_filter_batch_shader_data), U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_FRAGMENT_OUTPUT, 0, 4, U_INVALID, },
|
||||
{ SHADER_DESCRIPTION_END, -1, -1, U_INVALID, },
|
||||
};
|
||||
@@ -2687,7 +2687,7 @@ static void shader_bind_snow_particle(p_gl_rend_state& p_gl_rend_st,
|
||||
uniform_value& shader_flags, shader_set_data* set, shader* shad);
|
||||
static void shader_bind_star(p_gl_rend_state& p_gl_rend_st,
|
||||
uniform_value& shader_flags, shader_set_data* set, shader* shad);
|
||||
static void shader_bind_imgfilter(p_gl_rend_state& p_gl_rend_st,
|
||||
static void shader_bind_image_filter(p_gl_rend_state& p_gl_rend_st,
|
||||
uniform_value& shader_flags, shader_set_data* set, shader* shad);
|
||||
static void shader_bind_dof(p_gl_rend_state& p_gl_rend_st,
|
||||
uniform_value& shader_flags, shader_set_data* set, shader* shad);
|
||||
@@ -2751,7 +2751,7 @@ const shader_bind_func shader_ft_bind_func_table[] = {
|
||||
},
|
||||
{
|
||||
SHADER_FT_IMGFILT,
|
||||
shader_bind_imgfilter,
|
||||
shader_bind_image_filter,
|
||||
},
|
||||
{
|
||||
SHADER_FT_DOF,
|
||||
@@ -3083,7 +3083,7 @@ static void shader_bind_star(p_gl_rend_state& p_gl_rend_st,
|
||||
}
|
||||
}
|
||||
|
||||
static void shader_bind_imgfilter(p_gl_rend_state& p_gl_rend_st,
|
||||
static void shader_bind_image_filter(p_gl_rend_state& p_gl_rend_st,
|
||||
uniform_value& shader_flags, shader_set_data* set, shader* shad) {
|
||||
switch (shader_flags.arr[U_IMAGE_FILTER]) {
|
||||
case 0:
|
||||
|
||||
Reference in New Issue
Block a user