Skip to content

Commit

Permalink
#5532: Material flag bindings
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Feb 19, 2021
1 parent 81b9bcb commit 8cb57ca
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 27 deletions.
18 changes: 9 additions & 9 deletions install/ui/materialeditor.fbp
Expand Up @@ -1808,7 +1808,7 @@
<object class="notebookpage" expanded="0">
<property name="bitmap"></property>
<property name="label">Surface Flags</property>
<property name="select">1</property>
<property name="select">0</property>
<object class="wxPanel" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
Expand Down Expand Up @@ -3051,7 +3051,7 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="checked">0</property>
<property name="checked">1</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
Expand Down Expand Up @@ -3795,7 +3795,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_checkBox8711</property>
<property name="name">MaterialFlagNoPortalFog</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
Expand Down Expand Up @@ -4201,7 +4201,7 @@
<object class="notebookpage" expanded="0">
<property name="bitmap"></property>
<property name="label">Depth / Clamping</property>
<property name="select">0</property>
<property name="select">1</property>
<object class="wxPanel" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
Expand Down Expand Up @@ -4315,7 +4315,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_checkBox872</property>
<property name="name">MaterialFlagForceOpaque</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
Expand Down Expand Up @@ -4379,7 +4379,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_checkBox412</property>
<property name="name">MaterialFlagMirror</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
Expand Down Expand Up @@ -5013,7 +5013,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_checkBox2011</property>
<property name="name">MaterialFlagNoOverlays</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
Expand Down Expand Up @@ -5141,7 +5141,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_checkBox2111</property>
<property name="name">MaterialFlagForceOverlays</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
Expand Down Expand Up @@ -8015,7 +8015,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_checkBox611111</property>
<property name="name">MaterialFlagUnsmoothedTangents</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
Expand Down
18 changes: 9 additions & 9 deletions install/ui/materialeditor.xrc
Expand Up @@ -315,7 +315,7 @@
</object>
<object class="notebookpage">
<label>Surface Flags</label>
<selected>1</selected>
<selected>0</selected>
<object class="wxPanel" name="SurfaceFlagsPage">
<style>wxTAB_TRAVERSAL</style>
<object class="wxBoxSizer">
Expand Down Expand Up @@ -499,7 +499,7 @@
<border>5</border>
<object class="wxCheckBox" name="MaterialSurfaceFlagCollision">
<label>collision</label>
<checked>0</checked>
<checked>1</checked>
</object>
</object>
<object class="sizeritem">
Expand Down Expand Up @@ -610,7 +610,7 @@
<option>0</option>
<flag></flag>
<border>0</border>
<object class="wxCheckBox" name="m_checkBox8711">
<object class="wxCheckBox" name="MaterialFlagNoPortalFog">
<label>noPortalFog</label>
<checked>0</checked>
</object>
Expand Down Expand Up @@ -673,7 +673,7 @@
</object>
<object class="notebookpage">
<label>Depth / Clamping</label>
<selected>0</selected>
<selected>1</selected>
<object class="wxPanel" name="DepthPage">
<style>wxTAB_TRAVERSAL</style>
<object class="wxBoxSizer">
Expand All @@ -693,7 +693,7 @@
<option>0</option>
<flag></flag>
<border>0</border>
<object class="wxCheckBox" name="m_checkBox872">
<object class="wxCheckBox" name="MaterialFlagForceOpaque">
<label>forceOpaque</label>
<checked>0</checked>
</object>
Expand All @@ -702,7 +702,7 @@
<option>0</option>
<flag></flag>
<border>0</border>
<object class="wxCheckBox" name="m_checkBox412">
<object class="wxCheckBox" name="MaterialFlagMirror">
<label>mirror</label>
<checked>0</checked>
</object>
Expand Down Expand Up @@ -830,7 +830,7 @@
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL</flag>
<border>0</border>
<object class="wxCheckBox" name="m_checkBox2011">
<object class="wxCheckBox" name="MaterialFlagNoOverlays">
<label>noOverlays</label>
<checked>0</checked>
</object>
Expand All @@ -848,7 +848,7 @@
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL</flag>
<border>0</border>
<object class="wxCheckBox" name="m_checkBox2111">
<object class="wxCheckBox" name="MaterialFlagForceOverlays">
<label>forceOverlays</label>
<checked>0</checked>
</object>
Expand Down Expand Up @@ -1339,7 +1339,7 @@
<option>0</option>
<flag>wxBOTTOM|wxTOP</flag>
<border>3</border>
<object class="wxCheckBox" name="m_checkBox611111">
<object class="wxCheckBox" name="MaterialFlagUnsmoothedTangents">
<label>unsmoothedTangents</label>
<checked>0</checked>
</object>
Expand Down
40 changes: 32 additions & 8 deletions radiant/ui/materials/MaterialEditor.cpp
Expand Up @@ -81,6 +81,7 @@ MaterialEditor::MaterialEditor() :
setupMaterialProperties();
setupMaterialStageView();
setupMaterialSurfaceFlags();
setupMaterialShaderFlags();

// Set the default size of the window
FitToScreen(0.8f, 0.6f);
Expand Down Expand Up @@ -143,12 +144,35 @@ void MaterialEditor::setupMaterialProperties()

void MaterialEditor::setupSurfaceFlag(const std::string& controlName, Material::SurfaceFlags flag)
{
_bindings.emplace(controlName,
std::make_shared<CheckBoxBinding>(getControl<wxCheckBox>(controlName),
[=](const MaterialPtr& material)
{
return (material->getSurfaceFlags() & flag) != 0;
}));
_bindings.emplace(std::make_shared<CheckBoxBinding>(getControl<wxCheckBox>(controlName),
[=](const MaterialPtr& material)
{
return (material->getSurfaceFlags() & flag) != 0;
}));
}

void MaterialEditor::setupMaterialFlag(const std::string& controlName, Material::Flags flag)
{
_bindings.emplace(std::make_shared<CheckBoxBinding>(getControl<wxCheckBox>(controlName),
[=](const MaterialPtr& material)
{
return (material->getMaterialFlags() & flag) != 0;
}));
}

void MaterialEditor::setupMaterialShaderFlags()
{
setupMaterialFlag("MaterialNoShadows", Material::FLAG_NOSHADOWS);
setupMaterialFlag("MaterialNoSelfShadows", Material::FLAG_NOSELFSHADOW);
setupMaterialFlag("MaterialForceShadows", Material::FLAG_FORCESHADOWS);
setupMaterialFlag("MaterialTranslucent", Material::FLAG_TRANSLUCENT);
setupMaterialFlag("MaterialNoFog", Material::FLAG_NOFOG);
setupMaterialFlag("MaterialFlagNoOverlays", Material::FLAG_NOOVERLAYS);
setupMaterialFlag("MaterialFlagForceOverlays", Material::FLAG_FORCEOVERLAYS);
setupMaterialFlag("MaterialFlagForceOpaque", Material::FLAG_FORCEOPAQUE);
setupMaterialFlag("MaterialFlagNoPortalFog", Material::FLAG_NOPORTALFOG);
setupMaterialFlag("MaterialFlagUnsmoothedTangents", Material::FLAG_UNSMOOTHEDTANGENTS);
setupMaterialFlag("MaterialFlagMirror", Material::FLAG_MIRROR);
}

void MaterialEditor::setupMaterialSurfaceFlags()
Expand Down Expand Up @@ -216,9 +240,9 @@ void MaterialEditor::updateMaterialPropertiesFromMaterial()
getControl<wxPanel>("MaterialEditorMaterialPropertiesPanel")->Enable(_material != nullptr);

// Update all registered bindings
for (const auto& pair : _bindings)
for (const auto& binding : _bindings)
{
pair.second->setSource(_material);
binding->setSource(_material);
}

if (_material)
Expand Down
4 changes: 3 additions & 1 deletion radiant/ui/materials/MaterialEditor.h
Expand Up @@ -34,7 +34,7 @@ class MaterialEditor :

MaterialPtr _material;

std::map<std::string, std::shared_ptr<MaterialBinding>> _bindings;
std::set<std::shared_ptr<MaterialBinding>> _bindings;

private:
MaterialEditor();
Expand All @@ -50,7 +50,9 @@ class MaterialEditor :
void setupMaterialStageView();
void setupMaterialProperties();
void setupMaterialSurfaceFlags();
void setupMaterialShaderFlags();
void setupSurfaceFlag(const std::string& controlName, Material::SurfaceFlags flag);
void setupMaterialFlag(const std::string& controlName, Material::Flags flag);
void updateControlsFromMaterial();
void updateMaterialPropertiesFromMaterial();

Expand Down

0 comments on commit 8cb57ca

Please sign in to comment.