Files
korenkonder_ReDIVA/src/CRE/light_param/fog.cpp
T

104 lines
1.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::set_color(const vec4&& value) {
color = value;
}
void fog::data_set(fog_id id) {
fog_type type = get_type();
if (type == FOG_NONE)
return;
float_t density = get_density();
float_t start = get_start();
float_t end = get_end();
if (start >= end)
start = end - 0.01f;
vec4 params;
params.x = density;
params.y = start;
params.z = end;
params.w = 1.0f / (end - start);
extern render_context* rctx_ptr;
switch (id) {
case FOG_DEPTH:
get_color(rctx_ptr->obj_scene.g_fog_depth_color);
rctx_ptr->obj_scene.g_fog_state_params = params;
break;
case FOG_HEIGHT:
get_color(rctx_ptr->obj_scene.g_fog_height_color);
rctx_ptr->obj_scene.g_fog_height_params = params;
break;
case FOG_BUMP:
rctx_ptr->obj_scene.g_fog_bump_params = params;
break;
}
}