Files
fs2open.github.com/code/lab/dialogs/render_options.cpp
T

273 lines
9.5 KiB
C++

#include "lab/labv2_internal.h"
#include "lab/dialogs/render_options.h"
void set_model_rotation_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Flags.set(ManagerFlags::ModelRotationEnabled, !value);
}
void set_show_insignia_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::ShowInsignia, !value);
}
void set_show_damage_lightning_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::ShowDamageLightning, !value);
}
void set_rotate_subsys_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::RotateSubsystems, !value);
}
void set_post_proc_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::HidePostProcessing, !value);
}
void set_diffuse_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::NoDiffuseMap, !value);
}
void set_glow_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::NoGlowMap, !value);
}
void set_spec_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::NoSpecularMap, !value);
}
void set_env_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::NoEnvMap, !value);
}
void set_norm_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::NoNormalMap, !value);
}
void set_height_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::NoHeightMap, !value);
}
void set_misc_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::NoMiscMap, !value);
}
void set_ao_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::NoAOMap, !value);
}
void set_glowpoint_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::NoGlowpoints, !value);
}
void set_wireframe_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::ShowWireframe, !value);
}
void set_renderlight_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::NoLighting, !value);
}
void set_fulldetail_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::ShowFullDetail, !value);
}
void set_thrusters_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::ShowThrusters, !value);
}
void set_afterburner_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::ShowAfterburners, !value);
}
void set_weapons_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->loadWeapons();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::ShowWeapons, !value);
}
void set_emissive_flag(Checkbox* caller) {
auto value = caller->GetChecked();
getLabManager()->Renderer->setRenderFlag(LabRenderFlag::ShowEmissiveLighting, !value);
}
void set_ambient_factor(Slider* caller) {
auto value = caller->GetSliderValue();
getLabManager()->Renderer->setAmbientFactor(fl2i(value));
}
void set_static_light_factor(Slider* caller) {
auto value = caller->GetSliderValue();
getLabManager()->Renderer->setDirectionalFactor(value);
}
void set_bloom(Slider* caller) {
auto value = caller->GetSliderValue();
getLabManager()->Renderer->setBloomLevel(fl2i(value));
}
void change_detail_texture(Tree* caller) {
auto detail = (TextureQuality)caller->GetSelectedItem()->GetData();
getLabManager()->Renderer->setTextureQuality(detail);
}
void change_aa_setting(Tree* caller) {
auto setting = (AntiAliasMode)caller->GetSelectedItem()->GetData();
LabRenderer::setAAMode(setting);
}
void RenderOptions::open(Button* /*caller*/) {
if (dialogWindow != nullptr)
return;
dialogWindow = (DialogWindow*)getLabManager()->Screen->Add(new DialogWindow("Render Options", gr_screen.center_offset_x + gr_screen.center_w - 300, gr_screen.center_offset_y + 200));
dialogWindow->SetOwner(this);
dialogWindow->DeleteChildren();
auto y = 0;
auto cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("Enable Model Rotation", 2, y, set_model_rotation_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("Show Insignia", 2, y, set_show_insignia_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("Show Damage lightning", 2, y, set_show_damage_lightning_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("Rotate Subsystems", 2, y, set_rotate_subsys_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("Hide Post Processing", 2, y, set_post_proc_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("No Diffuse Map", 2, y, set_diffuse_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("No Glow Map", 2, y, set_glow_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("No Specular Map", 2, y, set_spec_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("No Environment Map", 2, y, set_env_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("No Normal Map", 2, y, set_norm_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("No Height Map", 2, y, set_height_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("No Misc Map", 2, y, set_misc_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("No Ambient Occlusion Map", 2, y, set_ao_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("No Glowpoints", 2, y, set_glowpoint_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("Render as wireframe", 2, y, set_wireframe_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("Render without light", 2, y, set_renderlight_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("Show full detail", 2, y, set_fulldetail_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("Show Thrusters", 2, y, set_thrusters_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("Show Afterburner", 2, y, set_afterburner_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("Show Weapons", 2, y, set_weapons_flag));
y += cbp->GetHeight() + 2;
cbp = (Checkbox*)dialogWindow->AddChild(new Checkbox("Render with emissive lighting", 2, y, set_emissive_flag));
y += cbp->GetHeight() + 2;
auto ambient_sldr = new Slider("Ambient Factor", 0, 128, 0, y + 2, set_ambient_factor, dialogWindow->GetWidth());
ambient_sldr->SetSliderValue((float)Cmdline_ambient_factor);
dialogWindow->AddChild(ambient_sldr);
y += ambient_sldr->GetHeight() + 2;
auto direct_sldr = new Slider("Direct. Lights", 0.0f, 2.0f, 0, y + 2, set_static_light_factor, dialogWindow->GetWidth());
direct_sldr->SetSliderValue(static_light_factor);
dialogWindow->AddChild(direct_sldr);
y += direct_sldr->GetHeight() + 2;
auto bloom_sldr = new Slider("Bloom", 0, 200, 0, y + 2, set_bloom, dialogWindow->GetWidth());
bloom_sldr->SetSliderValue((float)Cmdline_bloom_intensity);
dialogWindow->AddChild(bloom_sldr);
y += bloom_sldr->GetHeight() + 2;
// start tree
auto cmp = (Tree*)dialogWindow->AddChild(new Tree("Detail Options Tree", 0, y + 2, nullptr, dialogWindow->GetWidth()));
// 3d hardware texture slider options
auto ctip = cmp->AddItem(nullptr, "3D Hardware Textures", 0, false);
cmp->AddItem(ctip, "Minimum", (int)TextureQuality::Minimum, false, change_detail_texture);
cmp->AddItem(ctip, "Low", (int)TextureQuality::Low, false, change_detail_texture);
cmp->AddItem(ctip, "Medium", (int)TextureQuality::Medium, false, change_detail_texture);
cmp->AddItem(ctip, "High", (int)TextureQuality::High, false, change_detail_texture);
cmp->AddItem(ctip, "Maximum", (int)TextureQuality::Maximum, false, change_detail_texture);
auto aa_header = cmp->AddItem(nullptr, "AA Setting", 0, false);
cmp->AddItem(aa_header, "None", (int)AntiAliasMode::None, false, change_aa_setting);
cmp->AddItem(aa_header, "FXAA Low", (int)AntiAliasMode::FXAA_Low, false, change_aa_setting);
cmp->AddItem(aa_header, "FXAA Medium", (int)AntiAliasMode::FXAA_Medium, false, change_aa_setting);
cmp->AddItem(aa_header, "FXAA High", (int)AntiAliasMode::FXAA_High, false, change_aa_setting);
cmp->AddItem(aa_header, "SMAA Low", (int)AntiAliasMode::SMAA_Low, false, change_aa_setting);
cmp->AddItem(aa_header, "SMAA Medium", (int)AntiAliasMode::SMAA_Medium, false, change_aa_setting);
cmp->AddItem(aa_header, "SMAA High", (int)AntiAliasMode::SMAA_High, false, change_aa_setting);
cmp->AddItem(aa_header, "SMAA Ultra", (int)AntiAliasMode::SMAA_Ultra, false, change_aa_setting);
}