viewer#1400 Show LODs info in Build Tools
parent
741b79d63b
commit
c255174c56
|
|
@ -36,6 +36,14 @@
|
|||
#include "llviewerparcelmgr.h"
|
||||
#include "llviewerregion.h"
|
||||
|
||||
static const std::string lod_strings[4] =
|
||||
{
|
||||
"lowest_lod",
|
||||
"low_lod",
|
||||
"medium_lod",
|
||||
"high_lod",
|
||||
};
|
||||
|
||||
// virtual
|
||||
bool LLCrossParcelFunctor::apply(LLViewerObject* obj)
|
||||
{
|
||||
|
|
@ -75,7 +83,10 @@ LLFloaterObjectWeights::LLFloaterObjectWeights(const LLSD& key)
|
|||
mSelectedOnLand(NULL),
|
||||
mRezzedOnLand(NULL),
|
||||
mRemainingCapacity(NULL),
|
||||
mTotalCapacity(NULL)
|
||||
mTotalCapacity(NULL),
|
||||
mLodLevel(nullptr),
|
||||
mTrianglesShown(nullptr),
|
||||
mPixelArea(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -99,6 +110,10 @@ BOOL LLFloaterObjectWeights::postBuild()
|
|||
mRemainingCapacity = getChild<LLTextBox>("remaining_capacity");
|
||||
mTotalCapacity = getChild<LLTextBox>("total_capacity");
|
||||
|
||||
mLodLevel = getChild<LLTextBox>("lod_level");
|
||||
mTrianglesShown = getChild<LLTextBox>("triangles_shown");
|
||||
mPixelArea = getChild<LLTextBox>("pixel_area");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -135,6 +150,69 @@ void LLFloaterObjectWeights::setErrorStatus(S32 status, const std::string& reaso
|
|||
toggleWeightsLoadingIndicators(false);
|
||||
}
|
||||
|
||||
void LLFloaterObjectWeights::draw()
|
||||
{
|
||||
// Normally it's a bad idea to set text and visibility inside draw
|
||||
// since it can cause rect updates go to different, already drawn elements,
|
||||
// but floater is very simple and these elements are supposed to be isolated
|
||||
LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
|
||||
if (selection->isEmpty())
|
||||
{
|
||||
const std::string text = getString("nothing_selected");
|
||||
mLodLevel->setText(text);
|
||||
mTrianglesShown->setText(text);
|
||||
mPixelArea->setText(text);
|
||||
|
||||
toggleRenderLoadingIndicators(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
S32 object_lod = -1;
|
||||
bool multiple_lods = false;
|
||||
S32 total_tris = 0;
|
||||
S32 pixel_area = 0;
|
||||
for (LLObjectSelection::valid_root_iterator iter = selection->valid_root_begin();
|
||||
iter != selection->valid_root_end(); ++iter)
|
||||
{
|
||||
LLViewerObject* object = (*iter)->getObject();
|
||||
S32 lod = object->getLOD();
|
||||
if (object_lod < 0)
|
||||
{
|
||||
object_lod = lod;
|
||||
}
|
||||
else if (object_lod != lod)
|
||||
{
|
||||
multiple_lods = true;
|
||||
}
|
||||
|
||||
if (object->isRootEdit())
|
||||
{
|
||||
total_tris += object->recursiveGetTriangleCount();
|
||||
pixel_area += object->getPixelArea();
|
||||
}
|
||||
}
|
||||
|
||||
if (multiple_lods)
|
||||
{
|
||||
mLodLevel->setText(getString("multiple_lods"));
|
||||
toggleRenderLoadingIndicators(false);
|
||||
}
|
||||
else if (object_lod < 0)
|
||||
{
|
||||
// nodes are waiting for data
|
||||
toggleRenderLoadingIndicators(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
mLodLevel->setText(getString(lod_strings[object_lod]));
|
||||
toggleRenderLoadingIndicators(false);
|
||||
}
|
||||
mTrianglesShown->setText(llformat("%d", total_tris));
|
||||
mPixelArea->setText(llformat("%d", pixel_area));
|
||||
}
|
||||
LLFloater::draw();
|
||||
}
|
||||
|
||||
void LLFloaterObjectWeights::updateLandImpacts(const LLParcel* parcel)
|
||||
{
|
||||
if (!parcel || LLSelectMgr::getInstance()->getSelection()->isEmpty())
|
||||
|
|
@ -252,6 +330,17 @@ void LLFloaterObjectWeights::toggleLandImpactsLoadingIndicators(bool visible)
|
|||
mTotalCapacity->setVisible(!visible);
|
||||
}
|
||||
|
||||
void LLFloaterObjectWeights::toggleRenderLoadingIndicators(bool visible)
|
||||
{
|
||||
childSetVisible("lod_level_loading_indicator", visible);
|
||||
childSetVisible("triangles_shown_loading_indicator", visible);
|
||||
childSetVisible("pixel_area_loading_indicator", visible);
|
||||
|
||||
mLodLevel->setVisible(!visible);
|
||||
mTrianglesShown->setVisible(!visible);
|
||||
mPixelArea->setVisible(!visible);
|
||||
}
|
||||
|
||||
void LLFloaterObjectWeights::updateIfNothingSelected()
|
||||
{
|
||||
const std::string text = getString("nothing_selected");
|
||||
|
|
@ -269,6 +358,11 @@ void LLFloaterObjectWeights::updateIfNothingSelected()
|
|||
mRemainingCapacity->setText(text);
|
||||
mTotalCapacity->setText(text);
|
||||
|
||||
mLodLevel->setText(text);
|
||||
mTrianglesShown->setText(text);
|
||||
mPixelArea->setText(text);
|
||||
|
||||
toggleWeightsLoadingIndicators(false);
|
||||
toggleLandImpactsLoadingIndicators(false);
|
||||
toggleRenderLoadingIndicators(false);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,21 +58,24 @@ public:
|
|||
LLFloaterObjectWeights(const LLSD& key);
|
||||
~LLFloaterObjectWeights();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
BOOL postBuild() override;
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
void onOpen(const LLSD& key) override;
|
||||
|
||||
/*virtual*/ void onWeightsUpdate(const SelectionCost& selection_cost);
|
||||
/*virtual*/ void setErrorStatus(S32 status, const std::string& reason);
|
||||
void onWeightsUpdate(const SelectionCost& selection_cost) override;
|
||||
void setErrorStatus(S32 status, const std::string& reason) override;
|
||||
|
||||
void draw() override;
|
||||
|
||||
void updateLandImpacts(const LLParcel* parcel);
|
||||
void refresh();
|
||||
void refresh() override;
|
||||
|
||||
private:
|
||||
/*virtual*/ void generateTransactionID();
|
||||
void generateTransactionID() override;
|
||||
|
||||
void toggleWeightsLoadingIndicators(bool visible);
|
||||
void toggleLandImpactsLoadingIndicators(bool visible);
|
||||
void toggleRenderLoadingIndicators(bool visible);
|
||||
|
||||
void updateIfNothingSelected();
|
||||
|
||||
|
|
@ -88,6 +91,10 @@ private:
|
|||
LLTextBox *mRezzedOnLand;
|
||||
LLTextBox *mRemainingCapacity;
|
||||
LLTextBox *mTotalCapacity;
|
||||
|
||||
LLTextBox *mLodLevel;
|
||||
LLTextBox *mTrianglesShown;
|
||||
LLTextBox *mPixelArea;
|
||||
};
|
||||
|
||||
#endif //LL_LLFLOATEROBJECTWEIGHTS_H
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<floater
|
||||
can_close="true"
|
||||
can_tear_off="false"
|
||||
height="289"
|
||||
height="372"
|
||||
help_topic="object_weights"
|
||||
layout="topleft"
|
||||
name="object_weights"
|
||||
|
|
@ -13,6 +13,21 @@
|
|||
<floater.string
|
||||
name="nothing_selected"
|
||||
value="--"/>
|
||||
<floater.string
|
||||
name="lowest_lod"
|
||||
value="Lowest"/>
|
||||
<floater.string
|
||||
name="low_lod"
|
||||
value="Low"/>
|
||||
<floater.string
|
||||
name="medium_lod"
|
||||
value="Medium"/>
|
||||
<floater.string
|
||||
name="high_lod"
|
||||
value="High"/>
|
||||
<floater.string
|
||||
name="multiple_lods"
|
||||
value="Multiple"/>
|
||||
|
||||
<text
|
||||
follows="left|top"
|
||||
|
|
@ -320,4 +335,97 @@
|
|||
top_delta="0"
|
||||
value="Total capacity"
|
||||
width="130" />
|
||||
|
||||
|
||||
<text
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="rendering_info_text"
|
||||
text_color="EmphasisColor"
|
||||
top_pad="10"
|
||||
value="RENDERING INFO"
|
||||
width="180" />
|
||||
<text
|
||||
follows="left|top"
|
||||
halign="right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="lod_level"
|
||||
top_pad="3"
|
||||
value="--"
|
||||
width="40" />
|
||||
<loading_indicator
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="34"
|
||||
name="lod_level_loading_indicator"
|
||||
top_delta="0"
|
||||
width="16" />
|
||||
<text
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="lod_level_label"
|
||||
top_delta="0"
|
||||
value="LOD (Level of detail)"
|
||||
width="130" />
|
||||
<text
|
||||
follows="left|top"
|
||||
halign="right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="triangles_shown"
|
||||
top_pad="3"
|
||||
value="--"
|
||||
width="40" />
|
||||
<loading_indicator
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="34"
|
||||
name="triangles_shown_loading_indicator"
|
||||
top_delta="0"
|
||||
width="16" />
|
||||
<text
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="triangles_shown_label"
|
||||
top_delta="0"
|
||||
value="Triangles Shown"
|
||||
width="130" />
|
||||
<text
|
||||
follows="left|top"
|
||||
halign="right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="pixel_area"
|
||||
top_pad="3"
|
||||
value="--"
|
||||
width="40" />
|
||||
<loading_indicator
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="34"
|
||||
name="pixel_area_loading_indicator"
|
||||
top_delta="0"
|
||||
width="16" />
|
||||
<text
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="pixel_area_label"
|
||||
top_delta="0"
|
||||
value="Pixel Area"
|
||||
width="130" />
|
||||
</floater>
|
||||
|
|
|
|||
Loading…
Reference in New Issue