mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 13:33:27 +02:00
Merge branch 'master' of github.com:highfidelity/hifi into fix-linux-asan
This commit is contained in:
commit
517bf0af0f
4 changed files with 52 additions and 16 deletions
|
@ -215,7 +215,7 @@ static QTimer pingTimer;
|
||||||
|
|
||||||
static const int MAX_CONCURRENT_RESOURCE_DOWNLOADS = 16;
|
static const int MAX_CONCURRENT_RESOURCE_DOWNLOADS = 16;
|
||||||
|
|
||||||
// For processing on QThreadPool, we target a number of threads after reserving some
|
// For processing on QThreadPool, we target a number of threads after reserving some
|
||||||
// based on how many are being consumed by the application and the display plugin. However,
|
// based on how many are being consumed by the application and the display plugin. However,
|
||||||
// we will never drop below the 'min' value
|
// we will never drop below the 'min' value
|
||||||
static const int MIN_PROCESSING_THREAD_POOL_SIZE = 1;
|
static const int MIN_PROCESSING_THREAD_POOL_SIZE = 1;
|
||||||
|
@ -889,6 +889,20 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
||||||
}
|
}
|
||||||
ResourceCache::setRequestLimit(concurrentDownloads);
|
ResourceCache::setRequestLimit(concurrentDownloads);
|
||||||
|
|
||||||
|
// perhaps override the avatar url. Since we will test later for validity
|
||||||
|
// we don't need to do so here.
|
||||||
|
QString avatarURL = getCmdOption(argc, constArgv, "--avatarURL");
|
||||||
|
_avatarOverrideUrl = QUrl::fromUserInput(avatarURL);
|
||||||
|
|
||||||
|
// If someone specifies both --avatarURL and --replaceAvatarURL,
|
||||||
|
// the replaceAvatarURL wins. So only set the _overrideUrl if this
|
||||||
|
// does have a non-empty string.
|
||||||
|
QString replaceURL = getCmdOption(argc, constArgv, "--replaceAvatarURL");
|
||||||
|
if (!replaceURL.isEmpty()) {
|
||||||
|
_avatarOverrideUrl = QUrl::fromUserInput(replaceURL);
|
||||||
|
_saveAvatarOverrideUrl = true;
|
||||||
|
}
|
||||||
|
|
||||||
_glWidget = new GLCanvas();
|
_glWidget = new GLCanvas();
|
||||||
getApplicationCompositor().setRenderingWidget(_glWidget);
|
getApplicationCompositor().setRenderingWidget(_glWidget);
|
||||||
_window->setCentralWidget(_glWidget);
|
_window->setCentralWidget(_glWidget);
|
||||||
|
@ -1278,7 +1292,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
||||||
// Add periodic checks to send user activity data
|
// Add periodic checks to send user activity data
|
||||||
static int CHECK_NEARBY_AVATARS_INTERVAL_MS = 10000;
|
static int CHECK_NEARBY_AVATARS_INTERVAL_MS = 10000;
|
||||||
static int NEARBY_AVATAR_RADIUS_METERS = 10;
|
static int NEARBY_AVATAR_RADIUS_METERS = 10;
|
||||||
|
|
||||||
// setup the stats interval depending on if the 1s faster hearbeat was requested
|
// setup the stats interval depending on if the 1s faster hearbeat was requested
|
||||||
static const QString FAST_STATS_ARG = "--fast-heartbeat";
|
static const QString FAST_STATS_ARG = "--fast-heartbeat";
|
||||||
static int SEND_STATS_INTERVAL_MS = arguments().indexOf(FAST_STATS_ARG) != -1 ? 1000 : 10000;
|
static int SEND_STATS_INTERVAL_MS = arguments().indexOf(FAST_STATS_ARG) != -1 ? 1000 : 10000;
|
||||||
|
@ -1428,10 +1442,10 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
||||||
|
|
||||||
_autoSwitchDisplayModeSupportedHMDPlugin = nullptr;
|
_autoSwitchDisplayModeSupportedHMDPlugin = nullptr;
|
||||||
foreach(DisplayPluginPointer displayPlugin, PluginManager::getInstance()->getDisplayPlugins()) {
|
foreach(DisplayPluginPointer displayPlugin, PluginManager::getInstance()->getDisplayPlugins()) {
|
||||||
if (displayPlugin->isHmd() &&
|
if (displayPlugin->isHmd() &&
|
||||||
displayPlugin->getSupportsAutoSwitch()) {
|
displayPlugin->getSupportsAutoSwitch()) {
|
||||||
_autoSwitchDisplayModeSupportedHMDPlugin = displayPlugin;
|
_autoSwitchDisplayModeSupportedHMDPlugin = displayPlugin;
|
||||||
_autoSwitchDisplayModeSupportedHMDPluginName =
|
_autoSwitchDisplayModeSupportedHMDPluginName =
|
||||||
_autoSwitchDisplayModeSupportedHMDPlugin->getName();
|
_autoSwitchDisplayModeSupportedHMDPlugin->getName();
|
||||||
_previousHMDWornStatus =
|
_previousHMDWornStatus =
|
||||||
_autoSwitchDisplayModeSupportedHMDPlugin->isDisplayVisible();
|
_autoSwitchDisplayModeSupportedHMDPlugin->isDisplayVisible();
|
||||||
|
@ -1683,7 +1697,7 @@ void Application::onAboutToQuit() {
|
||||||
}
|
}
|
||||||
|
|
||||||
getActiveDisplayPlugin()->deactivate();
|
getActiveDisplayPlugin()->deactivate();
|
||||||
if (_autoSwitchDisplayModeSupportedHMDPlugin
|
if (_autoSwitchDisplayModeSupportedHMDPlugin
|
||||||
&& _autoSwitchDisplayModeSupportedHMDPlugin->isSessionActive()) {
|
&& _autoSwitchDisplayModeSupportedHMDPlugin->isSessionActive()) {
|
||||||
_autoSwitchDisplayModeSupportedHMDPlugin->endSession();
|
_autoSwitchDisplayModeSupportedHMDPlugin->endSession();
|
||||||
}
|
}
|
||||||
|
@ -1752,8 +1766,8 @@ void Application::cleanupBeforeQuit() {
|
||||||
|
|
||||||
// Cleanup all overlays after the scripts, as scripts might add more
|
// Cleanup all overlays after the scripts, as scripts might add more
|
||||||
_overlays.cleanupAllOverlays();
|
_overlays.cleanupAllOverlays();
|
||||||
// The cleanup process enqueues the transactions but does not process them. Calling this here will force the actual
|
// The cleanup process enqueues the transactions but does not process them. Calling this here will force the actual
|
||||||
// removal of the items.
|
// removal of the items.
|
||||||
// See https://highfidelity.fogbugz.com/f/cases/5328
|
// See https://highfidelity.fogbugz.com/f/cases/5328
|
||||||
_main3DScene->processTransactionQueue();
|
_main3DScene->processTransactionQueue();
|
||||||
|
|
||||||
|
@ -5248,7 +5262,7 @@ void Application::clearDomainOctreeDetails() {
|
||||||
skyStage->setBackgroundMode(model::SunSkyStage::SKY_DEFAULT);
|
skyStage->setBackgroundMode(model::SunSkyStage::SKY_DEFAULT);
|
||||||
|
|
||||||
_recentlyClearedDomain = true;
|
_recentlyClearedDomain = true;
|
||||||
|
|
||||||
DependencyManager::get<AnimationCache>()->clearUnusedResources();
|
DependencyManager::get<AnimationCache>()->clearUnusedResources();
|
||||||
DependencyManager::get<ModelCache>()->clearUnusedResources();
|
DependencyManager::get<ModelCache>()->clearUnusedResources();
|
||||||
DependencyManager::get<SoundCache>()->clearUnusedResources();
|
DependencyManager::get<SoundCache>()->clearUnusedResources();
|
||||||
|
@ -5312,6 +5326,10 @@ void Application::nodeActivated(SharedNodePointer node) {
|
||||||
if (node->getType() == NodeType::AvatarMixer) {
|
if (node->getType() == NodeType::AvatarMixer) {
|
||||||
// new avatar mixer, send off our identity packet on next update loop
|
// new avatar mixer, send off our identity packet on next update loop
|
||||||
// Reset skeletonModelUrl if the last server modified our choice.
|
// Reset skeletonModelUrl if the last server modified our choice.
|
||||||
|
// Override the avatar url (but not model name) here too.
|
||||||
|
if (_avatarOverrideUrl.isValid()) {
|
||||||
|
getMyAvatar()->useFullAvatarURL(_avatarOverrideUrl);
|
||||||
|
}
|
||||||
static const QUrl empty{};
|
static const QUrl empty{};
|
||||||
if (getMyAvatar()->getFullAvatarURLFromPreferences() != getMyAvatar()->cannonicalSkeletonModelURL(empty)) {
|
if (getMyAvatar()->getFullAvatarURLFromPreferences() != getMyAvatar()->cannonicalSkeletonModelURL(empty)) {
|
||||||
getMyAvatar()->resetFullAvatarURL();
|
getMyAvatar()->resetFullAvatarURL();
|
||||||
|
@ -7066,3 +7084,8 @@ QUuid Application::getTabletFrameID() const {
|
||||||
auto HMD = DependencyManager::get<HMDScriptingInterface>();
|
auto HMD = DependencyManager::get<HMDScriptingInterface>();
|
||||||
return HMD->getCurrentTabletFrameID();
|
return HMD->getCurrentTabletFrameID();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Application::setAvatarOverrideUrl(const QUrl& url, bool save) {
|
||||||
|
_avatarOverrideUrl = url;
|
||||||
|
_saveAvatarOverrideUrl = save;
|
||||||
|
}
|
||||||
|
|
|
@ -102,9 +102,9 @@ class Application;
|
||||||
#endif
|
#endif
|
||||||
#define qApp (static_cast<Application*>(QCoreApplication::instance()))
|
#define qApp (static_cast<Application*>(QCoreApplication::instance()))
|
||||||
|
|
||||||
class Application : public QApplication,
|
class Application : public QApplication,
|
||||||
public AbstractViewStateInterface,
|
public AbstractViewStateInterface,
|
||||||
public AbstractScriptingServicesInterface,
|
public AbstractScriptingServicesInterface,
|
||||||
public AbstractUriHandler,
|
public AbstractUriHandler,
|
||||||
public PluginContainer {
|
public PluginContainer {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -294,6 +294,10 @@ public:
|
||||||
OverlayID getTabletHomeButtonID() const;
|
OverlayID getTabletHomeButtonID() const;
|
||||||
QUuid getTabletFrameID() const; // may be an entity or an overlay
|
QUuid getTabletFrameID() const; // may be an entity or an overlay
|
||||||
|
|
||||||
|
void setAvatarOverrideUrl(const QUrl& url, bool save);
|
||||||
|
QUrl getAvatarOverrideUrl() { return _avatarOverrideUrl; }
|
||||||
|
bool getSaveAvatarOverrideUrl() { return _saveAvatarOverrideUrl; }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void svoImportRequested(const QString& url);
|
void svoImportRequested(const QString& url);
|
||||||
|
|
||||||
|
@ -675,11 +679,14 @@ private:
|
||||||
FileScriptingInterface* _fileDownload;
|
FileScriptingInterface* _fileDownload;
|
||||||
AudioInjector* _snapshotSoundInjector { nullptr };
|
AudioInjector* _snapshotSoundInjector { nullptr };
|
||||||
SharedSoundPointer _snapshotSound;
|
SharedSoundPointer _snapshotSound;
|
||||||
|
|
||||||
DisplayPluginPointer _autoSwitchDisplayModeSupportedHMDPlugin;
|
DisplayPluginPointer _autoSwitchDisplayModeSupportedHMDPlugin;
|
||||||
QString _autoSwitchDisplayModeSupportedHMDPluginName;
|
QString _autoSwitchDisplayModeSupportedHMDPluginName;
|
||||||
bool _previousHMDWornStatus;
|
bool _previousHMDWornStatus;
|
||||||
void startHMDStandBySession();
|
void startHMDStandBySession();
|
||||||
void endHMDSession();
|
void endHMDSession();
|
||||||
|
|
||||||
|
QUrl _avatarOverrideUrl;
|
||||||
|
bool _saveAvatarOverrideUrl { false };
|
||||||
};
|
};
|
||||||
#endif // hifi_Application_h
|
#endif // hifi_Application_h
|
||||||
|
|
|
@ -929,10 +929,15 @@ void MyAvatar::saveData() {
|
||||||
|
|
||||||
settings.setValue("scale", _targetScale);
|
settings.setValue("scale", _targetScale);
|
||||||
|
|
||||||
settings.setValue("fullAvatarURL",
|
// only save the fullAvatarURL if it has not been overwritten on command line
|
||||||
|
// (so the overrideURL is not valid), or it was overridden _and_ we specified
|
||||||
|
// --replaceAvatarURL (so _saveAvatarOverrideUrl is true)
|
||||||
|
if (qApp->getSaveAvatarOverrideUrl() || !qApp->getAvatarOverrideUrl().isValid() ) {
|
||||||
|
settings.setValue("fullAvatarURL",
|
||||||
_fullAvatarURLFromPreferences == AvatarData::defaultFullAvatarModelUrl() ?
|
_fullAvatarURLFromPreferences == AvatarData::defaultFullAvatarModelUrl() ?
|
||||||
"" :
|
"" :
|
||||||
_fullAvatarURLFromPreferences.toString());
|
_fullAvatarURLFromPreferences.toString());
|
||||||
|
}
|
||||||
|
|
||||||
settings.setValue("fullAvatarModelName", _fullAvatarModelName);
|
settings.setValue("fullAvatarModelName", _fullAvatarModelName);
|
||||||
|
|
||||||
|
@ -2430,7 +2435,7 @@ bool MyAvatar::requiresSafeLanding(const glm::vec3& positionIn, glm::vec3& bette
|
||||||
// Our head may be embedded, but our center is out and there's room below. See corresponding comment above.
|
// Our head may be embedded, but our center is out and there's room below. See corresponding comment above.
|
||||||
return false; // nothing below
|
return false; // nothing below
|
||||||
}
|
}
|
||||||
|
|
||||||
// See if we have room between entities above and below, but that we are not contained.
|
// See if we have room between entities above and below, but that we are not contained.
|
||||||
// First check if the surface above us is the bottom of something, and the surface below us it the top of something.
|
// First check if the surface above us is the bottom of something, and the surface below us it the top of something.
|
||||||
// I.e., we are in a clearing between two objects.
|
// I.e., we are in a clearing between two objects.
|
||||||
|
@ -3150,6 +3155,6 @@ void MyAvatar::updateHoldActions(const AnimPose& prePhysicsPose, const AnimPose&
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const MyHead* MyAvatar::getMyHead() const {
|
const MyHead* MyAvatar::getMyHead() const {
|
||||||
return static_cast<const MyHead*>(getHead());
|
return static_cast<const MyHead*>(getHead());
|
||||||
}
|
}
|
||||||
|
|
|
@ -821,6 +821,7 @@ void NetworkTexture::refresh() {
|
||||||
TextureCache::requestCompleted(_self);
|
TextureCache::requestCompleted(_self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ktxResourceState = PENDING_INITIAL_LOAD;
|
||||||
Resource::refresh();
|
Resource::refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue