mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 01:24:36 +02:00
add LOD to overlay display
This commit is contained in:
parent
8622f2d548
commit
4b60c549e7
5 changed files with 56 additions and 48 deletions
|
@ -2786,8 +2786,8 @@ void Application::displayStats() {
|
||||||
voxelStats.str("");
|
voxelStats.str("");
|
||||||
QString packetsString = locale.toString((int)voxelPacketsToProcess);
|
QString packetsString = locale.toString((int)voxelPacketsToProcess);
|
||||||
QString maxString = locale.toString((int)_recentMaxPackets);
|
QString maxString = locale.toString((int)_recentMaxPackets);
|
||||||
voxelStats << "Voxel Packets to Process: " << packetsString.toLocal8Bit().constData()
|
voxelStats << "Voxel Packets to Process: " << qPrintable(packetsString)
|
||||||
<< " [Recent Max: " << maxString.toLocal8Bit().constData() << "]";
|
<< " [Recent Max: " << qPrintable(maxString) << "]";
|
||||||
verticalOffset += STATS_PELS_PER_LINE;
|
verticalOffset += STATS_PELS_PER_LINE;
|
||||||
drawText(horizontalOffset, verticalOffset, 0.10f, 0, 2, (char*)voxelStats.str().c_str(), WHITE_TEXT);
|
drawText(horizontalOffset, verticalOffset, 0.10f, 0, 2, (char*)voxelStats.str().c_str(), WHITE_TEXT);
|
||||||
}
|
}
|
||||||
|
@ -2810,7 +2810,7 @@ void Application::displayStats() {
|
||||||
|
|
||||||
// Server Voxels
|
// Server Voxels
|
||||||
voxelStats.str("");
|
voxelStats.str("");
|
||||||
voxelStats << "Server voxels: " << serversTotalString.toLocal8Bit().constData();
|
voxelStats << "Server voxels: " << qPrintable(serversTotalString);
|
||||||
verticalOffset += STATS_PELS_PER_LINE;
|
verticalOffset += STATS_PELS_PER_LINE;
|
||||||
drawText(horizontalOffset, verticalOffset, 0.10f, 0, 2, (char*)voxelStats.str().c_str(), WHITE_TEXT);
|
drawText(horizontalOffset, verticalOffset, 0.10f, 0, 2, (char*)voxelStats.str().c_str(), WHITE_TEXT);
|
||||||
|
|
||||||
|
@ -2820,8 +2820,8 @@ void Application::displayStats() {
|
||||||
|
|
||||||
voxelStats.str("");
|
voxelStats.str("");
|
||||||
voxelStats <<
|
voxelStats <<
|
||||||
"Internal: " << serversInternalString.toLocal8Bit().constData() << " " <<
|
"Internal: " << qPrintable(serversInternalString) << " " <<
|
||||||
"Leaves: " << serversLeavesString.toLocal8Bit().constData() << "";
|
"Leaves: " << qPrintable(serversLeavesString) << "";
|
||||||
verticalOffset += STATS_PELS_PER_LINE;
|
verticalOffset += STATS_PELS_PER_LINE;
|
||||||
drawText(horizontalOffset, verticalOffset, 0.10f, 0, 2, (char*)voxelStats.str().c_str(), WHITE_TEXT);
|
drawText(horizontalOffset, verticalOffset, 0.10f, 0, 2, (char*)voxelStats.str().c_str(), WHITE_TEXT);
|
||||||
}
|
}
|
||||||
|
@ -2831,7 +2831,7 @@ void Application::displayStats() {
|
||||||
|
|
||||||
// Local Voxels
|
// Local Voxels
|
||||||
voxelStats.str("");
|
voxelStats.str("");
|
||||||
voxelStats << "Local voxels: " << localTotalString.toLocal8Bit().constData();
|
voxelStats << "Local voxels: " << qPrintable(localTotalString);
|
||||||
verticalOffset += STATS_PELS_PER_LINE;
|
verticalOffset += STATS_PELS_PER_LINE;
|
||||||
drawText(horizontalOffset, verticalOffset, 0.10f, 0, 2, (char*)voxelStats.str().c_str(), WHITE_TEXT);
|
drawText(horizontalOffset, verticalOffset, 0.10f, 0, 2, (char*)voxelStats.str().c_str(), WHITE_TEXT);
|
||||||
|
|
||||||
|
@ -2843,8 +2843,17 @@ void Application::displayStats() {
|
||||||
|
|
||||||
voxelStats.str("");
|
voxelStats.str("");
|
||||||
voxelStats <<
|
voxelStats <<
|
||||||
"Internal: " << localInternalString.toLocal8Bit().constData() << " " <<
|
"Internal: " << qPrintable(localInternalString) << " " <<
|
||||||
"Leaves: " << localLeavesString.toLocal8Bit().constData() << "";
|
"Leaves: " << qPrintable(localLeavesString) << "";
|
||||||
|
verticalOffset += STATS_PELS_PER_LINE;
|
||||||
|
drawText(horizontalOffset, verticalOffset, 0.10f, 0, 2, (char*)voxelStats.str().c_str(), WHITE_TEXT);
|
||||||
|
}
|
||||||
|
|
||||||
|
// LOD Details
|
||||||
|
if (_statsExpanded) {
|
||||||
|
voxelStats.str("");
|
||||||
|
QString displayLODDetails = Menu::getInstance()->getLODFeedbackText();
|
||||||
|
voxelStats << "LOD: You can see " << qPrintable(displayLODDetails.trimmed());
|
||||||
verticalOffset += STATS_PELS_PER_LINE;
|
verticalOffset += STATS_PELS_PER_LINE;
|
||||||
drawText(horizontalOffset, verticalOffset, 0.10f, 0, 2, (char*)voxelStats.str().c_str(), WHITE_TEXT);
|
drawText(horizontalOffset, verticalOffset, 0.10f, 0, 2, (char*)voxelStats.str().c_str(), WHITE_TEXT);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1087,6 +1087,40 @@ void Menu::octreeStatsDetailsClosed() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString Menu::getLODFeedbackText() {
|
||||||
|
// determine granularity feedback
|
||||||
|
int boundaryLevelAdjust = getBoundaryLevelAdjust();
|
||||||
|
QString granularityFeedback;
|
||||||
|
|
||||||
|
switch (boundaryLevelAdjust) {
|
||||||
|
case 0: {
|
||||||
|
granularityFeedback = QString("at standard granularity.");
|
||||||
|
} break;
|
||||||
|
case 1: {
|
||||||
|
granularityFeedback = QString("at half of standard granularity.");
|
||||||
|
} break;
|
||||||
|
case 2: {
|
||||||
|
granularityFeedback = QString("at a third of standard granularity.");
|
||||||
|
} break;
|
||||||
|
default: {
|
||||||
|
granularityFeedback = QString("at 1/%1th of standard granularity.").arg(boundaryLevelAdjust + 1);
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// distance feedback
|
||||||
|
float voxelSizeScale = getVoxelSizeScale();
|
||||||
|
float relativeToDefault = voxelSizeScale / DEFAULT_OCTREE_SIZE_SCALE;
|
||||||
|
QString result;
|
||||||
|
if (relativeToDefault > 1.01) {
|
||||||
|
result = QString("%1 further %2").arg(relativeToDefault,8,'f',2).arg(granularityFeedback);
|
||||||
|
} else if (relativeToDefault > 0.99) {
|
||||||
|
result = QString("the default distance %1").arg(granularityFeedback);
|
||||||
|
} else {
|
||||||
|
result = QString("%1 of default %2").arg(relativeToDefault,8,'f',3).arg(granularityFeedback);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void Menu::autoAdjustLOD(float currentFPS) {
|
void Menu::autoAdjustLOD(float currentFPS) {
|
||||||
// NOTE: our first ~100 samples at app startup are completely all over the place, and we don't
|
// NOTE: our first ~100 samples at app startup are completely all over the place, and we don't
|
||||||
// really want to count them in our average, so we will ignore the real frame rates and stuff
|
// really want to count them in our average, so we will ignore the real frame rates and stuff
|
||||||
|
|
|
@ -84,6 +84,7 @@ public:
|
||||||
void handleViewFrustumOffsetKeyModifier(int key);
|
void handleViewFrustumOffsetKeyModifier(int key);
|
||||||
|
|
||||||
// User Tweakable LOD Items
|
// User Tweakable LOD Items
|
||||||
|
QString getLODFeedbackText();
|
||||||
void autoAdjustLOD(float currentFPS);
|
void autoAdjustLOD(float currentFPS);
|
||||||
void setVoxelSizeScale(float sizeScale);
|
void setVoxelSizeScale(float sizeScale);
|
||||||
float getVoxelSizeScale() const { return _voxelSizeScale; }
|
float getVoxelSizeScale() const { return _voxelSizeScale; }
|
||||||
|
|
|
@ -68,7 +68,7 @@ LodToolsDialog::LodToolsDialog(QWidget* parent) :
|
||||||
const unsigned redish = 0xfff00000;
|
const unsigned redish = 0xfff00000;
|
||||||
palette.setColor(QPalette::WindowText, QColor::fromRgb(redish));
|
palette.setColor(QPalette::WindowText, QColor::fromRgb(redish));
|
||||||
_feedback->setPalette(palette);
|
_feedback->setPalette(palette);
|
||||||
_feedback->setText(getFeedbackText());
|
_feedback->setText(Menu::getInstance()->getLODFeedbackText());
|
||||||
const int FEEDBACK_WIDTH = 350;
|
const int FEEDBACK_WIDTH = 350;
|
||||||
_feedback->setFixedWidth(FEEDBACK_WIDTH);
|
_feedback->setFixedWidth(FEEDBACK_WIDTH);
|
||||||
form->addRow("You can see... ", _feedback);
|
form->addRow("You can see... ", _feedback);
|
||||||
|
@ -81,40 +81,6 @@ LodToolsDialog::LodToolsDialog(QWidget* parent) :
|
||||||
this->QDialog::setLayout(form);
|
this->QDialog::setLayout(form);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString LodToolsDialog::getFeedbackText() {
|
|
||||||
// determine granularity feedback
|
|
||||||
int boundaryLevelAdjust = Menu::getInstance()->getBoundaryLevelAdjust();
|
|
||||||
QString granularityFeedback;
|
|
||||||
|
|
||||||
switch (boundaryLevelAdjust) {
|
|
||||||
case 0: {
|
|
||||||
granularityFeedback = QString("at standard granularity.");
|
|
||||||
} break;
|
|
||||||
case 1: {
|
|
||||||
granularityFeedback = QString("at half of standard granularity.");
|
|
||||||
} break;
|
|
||||||
case 2: {
|
|
||||||
granularityFeedback = QString("at a third of standard granularity.");
|
|
||||||
} break;
|
|
||||||
default: {
|
|
||||||
granularityFeedback = QString("at 1/%1th of standard granularity.").arg(boundaryLevelAdjust + 1);
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// distance feedback
|
|
||||||
float voxelSizeScale = Menu::getInstance()->getVoxelSizeScale();
|
|
||||||
float relativeToDefault = voxelSizeScale / DEFAULT_OCTREE_SIZE_SCALE;
|
|
||||||
QString result;
|
|
||||||
if (relativeToDefault > 1.01) {
|
|
||||||
result = QString("%1 further %2").arg(relativeToDefault,8,'f',2).arg(granularityFeedback);
|
|
||||||
} else if (relativeToDefault > 0.99) {
|
|
||||||
result = QString("the default distance %1").arg(granularityFeedback);
|
|
||||||
} else {
|
|
||||||
result = QString("%1 of default %2").arg(relativeToDefault,8,'f',3).arg(granularityFeedback);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
LodToolsDialog::~LodToolsDialog() {
|
LodToolsDialog::~LodToolsDialog() {
|
||||||
delete _feedback;
|
delete _feedback;
|
||||||
delete _lodSize;
|
delete _lodSize;
|
||||||
|
@ -124,19 +90,19 @@ LodToolsDialog::~LodToolsDialog() {
|
||||||
void LodToolsDialog::reloadSliders() {
|
void LodToolsDialog::reloadSliders() {
|
||||||
_lodSize->setValue(Menu::getInstance()->getVoxelSizeScale() / TREE_SCALE);
|
_lodSize->setValue(Menu::getInstance()->getVoxelSizeScale() / TREE_SCALE);
|
||||||
_boundaryLevelAdjust->setValue(Menu::getInstance()->getBoundaryLevelAdjust());
|
_boundaryLevelAdjust->setValue(Menu::getInstance()->getBoundaryLevelAdjust());
|
||||||
_feedback->setText(getFeedbackText());
|
_feedback->setText(Menu::getInstance()->getLODFeedbackText());
|
||||||
}
|
}
|
||||||
|
|
||||||
void LodToolsDialog::sizeScaleValueChanged(int value) {
|
void LodToolsDialog::sizeScaleValueChanged(int value) {
|
||||||
float realValue = value * TREE_SCALE;
|
float realValue = value * TREE_SCALE;
|
||||||
Menu::getInstance()->setVoxelSizeScale(realValue);
|
Menu::getInstance()->setVoxelSizeScale(realValue);
|
||||||
|
|
||||||
_feedback->setText(getFeedbackText());
|
_feedback->setText(Menu::getInstance()->getLODFeedbackText());
|
||||||
}
|
}
|
||||||
|
|
||||||
void LodToolsDialog::boundaryLevelValueChanged(int value) {
|
void LodToolsDialog::boundaryLevelValueChanged(int value) {
|
||||||
Menu::getInstance()->setBoundaryLevelAdjust(value);
|
Menu::getInstance()->setBoundaryLevelAdjust(value);
|
||||||
_feedback->setText(getFeedbackText());
|
_feedback->setText(Menu::getInstance()->getLODFeedbackText());
|
||||||
}
|
}
|
||||||
|
|
||||||
void LodToolsDialog::resetClicked(bool checked) {
|
void LodToolsDialog::resetClicked(bool checked) {
|
||||||
|
|
|
@ -36,8 +36,6 @@ protected:
|
||||||
void closeEvent(QCloseEvent*);
|
void closeEvent(QCloseEvent*);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString getFeedbackText();
|
|
||||||
|
|
||||||
QSlider* _lodSize;
|
QSlider* _lodSize;
|
||||||
QSlider* _boundaryLevelAdjust;
|
QSlider* _boundaryLevelAdjust;
|
||||||
QLabel* _feedback;
|
QLabel* _feedback;
|
||||||
|
|
Loading…
Reference in a new issue