diff options
| -rw-r--r-- | indra/llprimitive/llprimitive.cpp | 13 | ||||
| -rw-r--r-- | indra/llprimitive/llprimitive.h | 3 | ||||
| -rw-r--r-- | indra/newview/llpanelvolume.cpp | 38 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 44 | ||||
| -rw-r--r-- | indra/newview/llvovolume.h | 4 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_tools.xml | 47 | 
6 files changed, 127 insertions, 22 deletions
| diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp index f67959de5b..0f538ffd0c 100644 --- a/indra/llprimitive/llprimitive.cpp +++ b/indra/llprimitive/llprimitive.cpp @@ -1968,6 +1968,19 @@ void LLReflectionProbeParams::setIsDynamic(bool is_dynamic)      }  } + +void LLReflectionProbeParams::setIsMirror(bool is_mirror) +{ +    if (is_mirror) +    { +        mFlags |= FLAG_MIRROR; +    } +    else +    { +        mFlags &= ~FLAG_MIRROR; +    } +} +  //============================================================================  LLFlexibleObjectData::LLFlexibleObjectData()  { diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h index 88bac34ef2..db4f4ddeba 100644 --- a/indra/llprimitive/llprimitive.h +++ b/indra/llprimitive/llprimitive.h @@ -197,6 +197,7 @@ public:      {          FLAG_BOX_VOLUME     = 0x01, // use a box influence volume          FLAG_DYNAMIC        = 0x02, // render dynamic objects (avatars) into this Reflection Probe +		FLAG_MIRROR			= 0x04, // This probe is used for reflections on realtime mirrors.      };  protected: @@ -220,11 +221,13 @@ public:      void setClipDistance(F32 distance) { mClipDistance = llclamp(distance, REFLECTION_PROBE_MIN_CLIP_DISTANCE, REFLECTION_PROBE_MAX_CLIP_DISTANCE); }      void setIsBox(bool is_box);      void setIsDynamic(bool is_dynamic); +    void setIsMirror(bool is_mirror);      F32 getAmbiance() const { return mAmbiance; }      F32 getClipDistance() const { return mClipDistance; }      bool getIsBox() const { return (mFlags & FLAG_BOX_VOLUME) != 0; }      bool getIsDynamic() const { return (mFlags & FLAG_DYNAMIC) != 0; } +    bool getIsMirror() const { return (mFlags & FLAG_MIRROR) != 0; }  };  //------------------------------------------------- diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp index a306a0a9ac..c03f52d23f 100644 --- a/indra/newview/llpanelvolume.cpp +++ b/indra/newview/llpanelvolume.cpp @@ -155,7 +155,7 @@ BOOL	LLPanelVolume::postBuild()      // REFLECTION PROBE Parameters      {          childSetCommitCallback("Reflection Probe", onCommitIsReflectionProbe, this); -        childSetCommitCallback("Probe Dynamic", onCommitProbe, this); +        childSetCommitCallback("Probe Update Type", onCommitProbe, this);          childSetCommitCallback("Probe Volume Type", onCommitProbe, this);          childSetCommitCallback("Probe Ambiance", onCommitProbe, this);          childSetCommitCallback("Probe Near Clip", onCommitProbe, this); @@ -401,17 +401,18 @@ void LLPanelVolume::getState( )      bool probe_enabled = is_probe && editable && single_volume; -    getChildView("Probe Dynamic")->setEnabled(probe_enabled); +    getChildView("Probe Update Type")->setEnabled(probe_enabled);      getChildView("Probe Volume Type")->setEnabled(probe_enabled);      getChildView("Probe Ambiance")->setEnabled(probe_enabled);      getChildView("Probe Near Clip")->setEnabled(probe_enabled); +    getChildView("Probe Update Label")->setEnabled(probe_enabled);      if (!probe_enabled)      {          getChild<LLComboBox>("Probe Volume Type", true)->clear();          getChild<LLSpinCtrl>("Probe Ambiance", true)->clear();          getChild<LLSpinCtrl>("Probe Near Clip", true)->clear(); -        getChild<LLCheckBoxCtrl>("Probe Dynamic", true)->clear(); +        getChild<LLComboBox>("Probe Update Type", true)->clear();      }      else      { @@ -425,10 +426,28 @@ void LLPanelVolume::getState( )              volume_type = "Sphere";          } +		std::string update_type; +        if (volobjp->getReflectionProbeIsDynamic()) +        { +            update_type = "Dynamic"; +        } +        else if (volobjp->getReflectionProbeIsMirror()) +        { +            update_type = "Mirror"; + +        } +        else +        { +            update_type = "Static"; +		} + +        getChildView("Probe Ambiance")->setEnabled(update_type != "Mirror"); +        getChildView("Probe Near Clip")->setEnabled(update_type != "Mirror"); +          getChild<LLComboBox>("Probe Volume Type", true)->setValue(volume_type);          getChild<LLSpinCtrl>("Probe Ambiance", true)->setValue(volobjp->getReflectionProbeAmbiance());          getChild<LLSpinCtrl>("Probe Near Clip", true)->setValue(volobjp->getReflectionProbeNearClip()); -        getChild<LLCheckBoxCtrl>("Probe Dynamic", true)->setValue(volobjp->getReflectionProbeIsDynamic()); +        getChild<LLComboBox>("Probe Update Type", true)->setValue(update_type);      }      // Animated Mesh @@ -715,7 +734,7 @@ void LLPanelVolume::clearCtrls()      getChildView("Reflection Probe")->setEnabled(false);;      getChildView("Probe Volume Type")->setEnabled(false); -    getChildView("Probe Dynamic")->setEnabled(false); +    getChildView("Probe Update Type")->setEnabled(false);      getChildView("Probe Ambiance")->setEnabled(false);      getChildView("Probe Near Clip")->setEnabled(false);      getChildView("Animated Mesh Checkbox Ctrl")->setEnabled(false); @@ -1422,7 +1441,14 @@ void LLPanelVolume::onCommitProbe(LLUICtrl* ctrl, void* userdata)      volobjp->setReflectionProbeAmbiance((F32)self->getChild<LLUICtrl>("Probe Ambiance")->getValue().asReal());      volobjp->setReflectionProbeNearClip((F32)self->getChild<LLUICtrl>("Probe Near Clip")->getValue().asReal()); -    volobjp->setReflectionProbeIsDynamic(self->getChild<LLUICtrl>("Probe Dynamic")->getValue().asBoolean()); + +    std::string update_type = self->getChild<LLUICtrl>("Probe Update Type")->getValue().asString(); + +	volobjp->setReflectionProbeIsDynamic(update_type == "Dynamic"); +    volobjp->setReflectionProbeIsMirror(update_type == "Mirror"); + +    self->getChildView("Probe Ambiance")->setEnabled(update_type != "Mirror"); +    self->getChildView("Probe Near Clip")->setEnabled(update_type != "Mirror");      std::string shape_type = self->getChild<LLUICtrl>("Probe Volume Type")->getValue().asString(); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 9813039145..77f654be23 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3442,6 +3442,22 @@ bool LLVOVolume::setReflectionProbeIsBox(bool is_box)      return false;  } +bool LLVOVolume::setReflectionProbeIsPlane(bool is_plane) +{ +    LLReflectionProbeParams *param_block = (LLReflectionProbeParams *) getParameterEntry(LLNetworkData::PARAMS_REFLECTION_PROBE); +    if (param_block) +    { +        if (param_block->getIsBox() != is_plane) +        { +            param_block->setIsBox(is_plane); +            parameterChanged(LLNetworkData::PARAMS_REFLECTION_PROBE, true); +            return true; +        } +    } + +    return false; +} +  bool LLVOVolume::setReflectionProbeIsDynamic(bool is_dynamic)  {      LLReflectionProbeParams* param_block = (LLReflectionProbeParams*)getParameterEntry(LLNetworkData::PARAMS_REFLECTION_PROBE); @@ -3458,6 +3474,22 @@ bool LLVOVolume::setReflectionProbeIsDynamic(bool is_dynamic)      return false;  } +bool LLVOVolume::setReflectionProbeIsMirror(bool is_mirror) +{ +    LLReflectionProbeParams *param_block = (LLReflectionProbeParams *) getParameterEntry(LLNetworkData::PARAMS_REFLECTION_PROBE); +    if (param_block) +    { +        if (param_block->getIsMirror() != is_mirror) +        { +            param_block->setIsMirror(is_mirror); +            parameterChanged(LLNetworkData::PARAMS_REFLECTION_PROBE, true); +            return true; +        } +    } + +    return false; +} +  F32 LLVOVolume::getReflectionProbeAmbiance() const  {      const LLReflectionProbeParams* param_block = (const LLReflectionProbeParams*)getParameterEntry(LLNetworkData::PARAMS_REFLECTION_PROBE); @@ -3506,6 +3538,18 @@ bool LLVOVolume::getReflectionProbeIsDynamic() const      return false;  } +bool LLVOVolume::getReflectionProbeIsMirror() const +{ +    const LLReflectionProbeParams *param_block = +        (const LLReflectionProbeParams *) getParameterEntry(LLNetworkData::PARAMS_REFLECTION_PROBE); +    if (param_block) +    { +        return param_block->getIsMirror(); +    } + +    return false; +} +  U32 LLVOVolume::getVolumeInterfaceID() const  {  	if (mVolumeImpl) diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index b03fc4b862..89ef1d7d7a 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -305,13 +305,17 @@ public:      bool setReflectionProbeAmbiance(F32 ambiance);      bool setReflectionProbeNearClip(F32 near_clip);      bool setReflectionProbeIsBox(bool is_box); +    bool setReflectionProbeIsPlane(bool is_plane);      bool setReflectionProbeIsDynamic(bool is_dynamic); +    bool setReflectionProbeIsMirror(bool is_mirror);      BOOL isReflectionProbe() const override;      F32 getReflectionProbeAmbiance() const;      F32 getReflectionProbeNearClip() const;      bool getReflectionProbeIsBox() const; +    bool getReflectionProbeIsPlane() const;      bool getReflectionProbeIsDynamic() const; +    bool getReflectionProbeIsMirror() const;      BOOL isMirror() const override; diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 510351b471..4f4216c85a 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -2412,15 +2412,6 @@ even though the user gets a free copy.               width="278" />              <check_box               height="16" -             label="Mirror" -             layout="topleft" -             left="10" -             name="Mirror Checkbox Ctrl" -             tool_tip="Causes object to be a mirror" -             top_pad="8" -             width="60" /> -            <check_box -             height="16"               label="Light"               layout="topleft"               left="10" @@ -2568,15 +2559,39 @@ even though the user gets a free copy.               name="Box"               value="Box"/>            </combo_box> -          <check_box -             height="16" -             label="Dynamic" +          <text +             type="string" +             length="1" +             follows="left|top" +             height="10"               layout="topleft"               left="10" -             name="Probe Dynamic" -             tool_tip="When enabled, Avatars will appear in reflections within this probe's influence volume." -             bottom_delta="19" -             width="60" /> +             name="Probe Update Label" +             text_readonly_color="LabelDisabledColor" +             width="100"> +            Probe Update +          </text> +          <combo_box +			   height="19" +			   top_delta="0" +         left="144" +			   follows="left|top" +			   name="Probe Update Type" +			   tool_tip="Determines how the probe updates.  Static updates the slowest and without avatars.  Dynamic updates more frequently, with avatars visible in the probes.  Mirror turns this probe into a realtime planar projected mirror probe, but does not calculate ambiance." +			   width="108"> +            <combo_box.item +             label="Static" +             name="Static" +             value="Static" /> +            <combo_box.item +             label="Dynamic" +             name="Dynamic" +             value="Dynamic"/> +            <combo_box.item +             label="Mirror" +             name="Mirror" +             value="Mirror"/> +          </combo_box>            <spinner bottom_delta="19"                     decimal_digits="3"                     follows="left|top" | 
