mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-12 09:08:11 +03:00
125 lines
2.8 KiB
C++
125 lines
2.8 KiB
C++
/*
|
|
by korenkonder
|
|
GitHub/GitLab: korenkonder
|
|
*/
|
|
|
|
#include "fog.hpp"
|
|
#include "../shader_ft.hpp"
|
|
#include "../render_context.hpp"
|
|
|
|
fog::fog() {
|
|
type = FOG_NONE;
|
|
density = 0.0f;
|
|
start = 20.0f;
|
|
end = 1000.0f;
|
|
index = 0;
|
|
color = { 1.0f, 1.0f, 1.0f, 0.0f };
|
|
}
|
|
|
|
fog_type fog::get_type() const {
|
|
return type;
|
|
}
|
|
|
|
void fog::set_type(fog_type value) {
|
|
type = value;
|
|
}
|
|
|
|
float_t fog::get_density() const {
|
|
return density;
|
|
}
|
|
|
|
void fog::set_density(float_t value) {
|
|
density = value;
|
|
}
|
|
|
|
float_t fog::get_start() const {
|
|
return start;
|
|
}
|
|
|
|
void fog::set_start(float_t value) {
|
|
start = value;
|
|
}
|
|
|
|
float_t fog::get_end() const {
|
|
return end;
|
|
}
|
|
|
|
void fog::set_end(float_t value) {
|
|
end = value;
|
|
}
|
|
|
|
int32_t fog::get_index() const {
|
|
return index;
|
|
}
|
|
|
|
void fog::set_index(int32_t value) {
|
|
index = value;
|
|
}
|
|
|
|
void fog::get_color(vec4& value) const {
|
|
value = color;
|
|
}
|
|
|
|
void fog::set_color(const vec4& value) {
|
|
color = value;
|
|
}
|
|
|
|
void fog::data_set(render_data_context& rend_data_ctx, fog_id id) {
|
|
fog_type type = get_type();
|
|
if (type == FOG_NONE)
|
|
return;
|
|
|
|
switch (id) {
|
|
case FOG_DEPTH: {
|
|
float_t density = get_density();
|
|
float_t start = get_start();
|
|
float_t end = get_end();
|
|
if (start >= end)
|
|
start = end - 0.01f;
|
|
vec4 color;
|
|
get_color(color);
|
|
|
|
render_data_context::fog_params params = {};
|
|
rend_data_ctx.get_scene_fog_params(params);
|
|
params.density = density;
|
|
params.start = start;
|
|
params.end = end;
|
|
params.depth_color = color;
|
|
rend_data_ctx.set_scene_fog_params(params);
|
|
} break;
|
|
case FOG_HEIGHT: {
|
|
float_t density = get_density();
|
|
float_t start = get_start();
|
|
float_t end = get_end();
|
|
if (start >= end)
|
|
start = end - 0.01f;
|
|
vec4 color;
|
|
get_color(color);
|
|
|
|
render_data_context::fog_params params = {};
|
|
rend_data_ctx.get_scene_fog_params(params);
|
|
params.height_params.x = density;
|
|
params.height_params.y = start;
|
|
params.height_params.z = end;
|
|
params.height_params.w = 1.0f / (end - start);
|
|
params.height_color = color;
|
|
rend_data_ctx.set_scene_fog_params(params);
|
|
} break;
|
|
case FOG_BUMP: {
|
|
float_t density = get_density();
|
|
float_t start = get_start();
|
|
float_t end = get_end();
|
|
if (start >= end)
|
|
start = end - 0.01f;
|
|
|
|
render_data_context::fog_params params = {};
|
|
rend_data_ctx.get_scene_fog_params(params);
|
|
params.bump_params.x = density;
|
|
params.bump_params.y = start;
|
|
params.bump_params.z = end;
|
|
params.bump_params.w = 1.0f / (end - start);
|
|
rend_data_ctx.set_scene_fog_params(params);
|
|
} break;
|
|
}
|
|
}
|