ReflectRefractDw

This commit is contained in:
korenkonder
2024-12-12 03:01:22 +03:00
parent cf6d2e56bf
commit 58835f20e8
8 changed files with 255 additions and 3 deletions
+8
View File
@@ -139,6 +139,14 @@ namespace rndr {
}
}
reflect_refract_resolution_mode RenderManager::get_reflect_resolution_mode() {
return (reflect_refract_resolution_mode)tex_index[0];
}
reflect_refract_resolution_mode RenderManager::get_refract_resolution_mode() {
return (reflect_refract_resolution_mode)tex_index[1];
}
RenderTexture& RenderManager::get_render_texture(int32_t index) {
return render_textures[render_manager_render_texture_index_array[index][tex_index[index]]];
}
+2
View File
@@ -94,6 +94,8 @@ namespace rndr {
void add_pre_process(int32_t type, draw_pre_process_func func, void* data);
void clear_pre_process(int32_t type);
reflect_refract_resolution_mode get_reflect_resolution_mode();
reflect_refract_resolution_mode get_refract_resolution_mode();
RenderTexture& get_render_texture(int32_t index);
void reset();
void resize(int32_t width, int32_t height);
+57
View File
@@ -12,6 +12,7 @@
#include "../graphics/light.hpp"
#include "../graphics/material.hpp"
#include "../graphics/post_process.hpp"
#include "../graphics/reflect_refract.hpp"
#include "../graphics/render_settings.hpp"
#include "../graphics/shadow.hpp"
#include "graphics/background_color.hpp"
@@ -143,6 +144,62 @@ classes_data graphics_classes[] = {
0,
0,
},
{
"Ripple Effect##Graphics",
CLASSES_IN_CONTEXT_MENU,
CLASSES_DATA_NO_FUNC,
CLASSES_DATA_NO_FUNC,
CLASSES_DATA_NO_FUNC,
{
CLASS_DW,
false,
CLASS_DATA_NO_DATA,
},
0,
0,
},
{
"Rain Effect##Graphics",
CLASSES_IN_CONTEXT_MENU,
CLASSES_DATA_NO_FUNC,
CLASSES_DATA_NO_FUNC,
CLASSES_DATA_NO_FUNC,
{
CLASS_DW,
false,
CLASS_DATA_NO_DATA,
},
0,
0,
},
{
"Snow Effect##Graphics",
CLASSES_IN_CONTEXT_MENU,
CLASSES_DATA_NO_FUNC,
CLASSES_DATA_NO_FUNC,
CLASSES_DATA_NO_FUNC,
{
CLASS_DW,
false,
CLASS_DATA_NO_DATA,
},
0,
0,
},
{
"Reflect/Refract##Graphics",
CLASSES_IN_CONTEXT_MENU,
(classes_init_func)reflect_refract_dw_init,
CLASSES_DATA_NO_FUNC,
CLASSES_DATA_NO_FUNC,
{
CLASS_DW,
false,
CLASS_DATA_NO_DATA,
},
0,
0,
},
{
"Glitter##Graphics",
CLASSES_IN_CONTEXT_MENU,
+2 -2
View File
@@ -527,7 +527,7 @@ void MaterialDw::ResetMaterialArray() {
}
void MaterialDw::SetValue(bool own) {
obj_material_data* material_data = MaterialDw::GetMaterial(own);
obj_material_data* material_data = GetMaterial(own);
if (!material_data)
return;
@@ -573,7 +573,7 @@ void MaterialDw::UpdateObjectMeshes() {
return;
object_meshes->ClearItems();
obj* obj = MaterialDw::GetObj();
obj* obj = GetObj();
if (obj) {
ResetMaterialArray();
for (int32_t i = 0; i < obj->num_material; i++) {
+174
View File
@@ -0,0 +1,174 @@
/*
by korenkonder
GitHub/GitLab: korenkonder
*/
#include "reflect_refract.hpp"
#include "../../CRE/light_param/face.hpp"
#include "../../CRE/light_param.hpp"
#include "../../CRE/render_context.hpp"
#include "../dw.hpp"
extern render_context* rctx_ptr;
class ReflectRefractDw : public dw::Shell {
public:
dw::RowLayout* vertical_layout;
dw::RowLayout* horizontal_layout;
ReflectRefractDw();
virtual ~ReflectRefractDw() override;
virtual void Draw() override;
virtual void Hide() override;
static void ReflectBlurFilterCallback(dw::ListBox* data);
static void ReflectBlurNumCallback(dw::Slider* data);
static void ReflectResolutionCallback(dw::ListBox* data);
static void RefractResolutionCallback(dw::ListBox* data);
};
ReflectRefractDw* reflect_refract_dw;
void reflect_refract_dw_init() {
if (!reflect_refract_dw) {
reflect_refract_dw = new ReflectRefractDw;
reflect_refract_dw->UpdateLayout();
reflect_refract_dw->sub_1402F38B0();
}
else
reflect_refract_dw->Disp();
}
ReflectRefractDw::ReflectRefractDw() {
const reflect_refract_resolution_mode reflect_resolution_mode
= rctx_ptr->render_manager->get_reflect_resolution_mode();
const reflect_refract_resolution_mode refract_resolution_mode
= rctx_ptr->render_manager->get_reflect_resolution_mode(); // Intentional!
const int32_t reflect_blur_num = rctx_ptr->render_manager->reflect_blur_num;
const blur_filter_mode reflect_blur_filter = rctx_ptr->render_manager->reflect_blur_filter;
SetText("REFLECT/REFRACT");
rect.pos = 0.0f;
SetSize({ 320.0f, 200.0f });
const float_t glyph_height = font.GetFontGlyphHeight();
vertical_layout = new dw::RowLayout(dw::VERTICAL);
horizontal_layout = new dw::RowLayout(dw::HORIZONTAL);
dw::Composite* comp = new dw::Composite(this);
comp->layout = vertical_layout;
dw::Group* reflect_group = new dw::Group(comp);
reflect_group->SetText("REFLECT");
dw::Composite* reflect_comp = new dw::Composite(reflect_group);
reflect_comp->layout = horizontal_layout;
(new dw::Label(reflect_comp, dw::FLAG_4000))->SetText("RESOLUTION ");
dw::ListBox* reflect_resolution = new dw::ListBox(reflect_comp,
(dw::Flags)(dw::FLAG_800 | dw::VERTICAL | dw::MULTISELECT));
reflect_resolution->SetText("listbox0");
reflect_resolution->AddItem("256x256");
reflect_resolution->AddItem("512x256");
reflect_resolution->AddItem("512x512");
reflect_resolution->AddSelectionListener(new dw::SelectionListenerOnHook(
(dw::Widget::Callback)ReflectRefractDw::ReflectResolutionCallback));
reflect_resolution->SetItemIndex(reflect_resolution_mode);
reflect_resolution->SetMaxItems(3);
dw::Slider* reflect_blur_num_slider = dw::Slider::Create(reflect_group,
(dw::Flags)(dw::FLAG_800 | dw::HORIZONTAL), 0.0f, 0.0f, 100.0f, glyph_height, "BLUR NUM");
reflect_blur_num_slider->SetParams((float_t)reflect_blur_num, 0.0f, 10.0f, 2.0f, 1.0f, 1.0f);
reflect_blur_num_slider->format = "%4.0f";
reflect_blur_num_slider->AddSelectionListener(new dw::SelectionListenerOnHook(
(dw::Widget::Callback)ReflectRefractDw::ReflectBlurNumCallback));
reflect_blur_num_slider->callback_data.v64 = this;
dw::Composite* reflect_blur_filter_comp = new dw::Composite(reflect_group);
reflect_blur_filter_comp->layout = horizontal_layout;
(new dw::Label(reflect_blur_filter_comp, dw::FLAG_4000))->SetText("BLUR FILTER ");
dw::ListBox* reflect_blur_filter_list_box = new dw::ListBox(reflect_blur_filter_comp,
(dw::Flags)(dw::FLAG_800 | dw::VERTICAL | dw::MULTISELECT));
reflect_blur_filter_list_box->SetText("listbox0");
reflect_blur_filter_list_box->AddItem("4");
reflect_blur_filter_list_box->AddItem("9");
reflect_blur_filter_list_box->AddItem("16");
reflect_blur_filter_list_box->AddItem("32");
reflect_blur_filter_list_box->AddSelectionListener(new dw::SelectionListenerOnHook(
(dw::Widget::Callback)ReflectRefractDw::ReflectBlurFilterCallback));
reflect_blur_filter_list_box->SetItemIndex(reflect_blur_filter);
reflect_blur_filter_list_box->SetMaxItems(7);
dw::Group* refract_group = new dw::Group(comp);
refract_group->SetText("REFRACT");
dw::Composite* refract_comp = new dw::Composite(refract_group);
refract_comp->layout = horizontal_layout;
(new dw::Label(refract_comp, dw::FLAG_4000))->SetText("RESOLUTION ");
dw::ListBox* refract_resolution = new dw::ListBox(refract_comp,
(dw::Flags)(dw::FLAG_800 | dw::VERTICAL | dw::MULTISELECT));
refract_resolution->SetText("listbox0");
refract_resolution->AddItem("256x256");
refract_resolution->AddItem("512x256");
refract_resolution->AddItem("512x512");
refract_resolution->AddSelectionListener(new dw::SelectionListenerOnHook(
(dw::Widget::Callback)ReflectRefractDw::RefractResolutionCallback));
refract_resolution->SetItemIndex(refract_resolution_mode);
refract_resolution->SetMaxItems(3);
}
ReflectRefractDw::~ReflectRefractDw() {
}
void ReflectRefractDw::Draw() {
dw::Shell::Draw();
}
void ReflectRefractDw::Hide() {
SetDisp();
}
void ReflectRefractDw::ReflectBlurFilterCallback(dw::ListBox* data) {
rctx_ptr->render_manager->reflect_blur_filter = (blur_filter_mode)(int32_t)data->list->selected_item;
}
void ReflectRefractDw::ReflectBlurNumCallback(dw::Slider* data) {
rctx_ptr->render_manager->reflect_blur_num = (int32_t)data->GetValue();
}
void ReflectRefractDw::ReflectResolutionCallback(dw::ListBox* data) {
switch (data->list->selected_item) {
case 0:
rctx_ptr->render_manager->set_reflect_resolution_mode(REFLECT_REFRACT_RESOLUTION_256x256);
break;
case 1:
rctx_ptr->render_manager->set_reflect_resolution_mode(REFLECT_REFRACT_RESOLUTION_512x256);
break;
case 2:
rctx_ptr->render_manager->set_reflect_resolution_mode(REFLECT_REFRACT_RESOLUTION_512x512);
break;
}
}
void ReflectRefractDw::RefractResolutionCallback(dw::ListBox* data) {
switch (data->list->selected_item) {
case 0:
rctx_ptr->render_manager->set_refract_resolution_mode(REFLECT_REFRACT_RESOLUTION_256x256);
break;
case 1:
rctx_ptr->render_manager->set_refract_resolution_mode(REFLECT_REFRACT_RESOLUTION_512x256);
break;
case 2:
rctx_ptr->render_manager->set_refract_resolution_mode(REFLECT_REFRACT_RESOLUTION_512x512);
break;
}
}
+10
View File
@@ -0,0 +1,10 @@
/*
by korenkonder
GitHub/GitLab: korenkonder
*/
#pragma once
#include "../../KKdLib/default.hpp"
extern void reflect_refract_dw_init();
+1
View File
@@ -46,6 +46,7 @@ ShadowDw* shadow_dw;
void shadow_dw_init() {
if (!shadow_dw) {
shadow_dw = new ShadowDw;
shadow_dw->UpdateLayout();
shadow_dw->sub_1402F38B0();
}
else
+1 -1
View File
@@ -35,7 +35,7 @@ classes_data classes[] = {
CLASS_DATA_NO_DATA,
},
graphics_classes,
11,
15,
},
{
"Information",