mirror of
https://github.com/overte-org/overte.git
synced 2025-04-25 00:56:48 +02:00
Merge branch 'master' of github.com:highfidelity/hifi into serverless-domains
This commit is contained in:
commit
8a08039efe
18 changed files with 64 additions and 67 deletions
|
@ -257,11 +257,7 @@ Item {
|
|||
id: octreeCol
|
||||
spacing: 4; x: 4; y: 4;
|
||||
StatText {
|
||||
text: "Render Engine: " + root.engineFrameTime.toFixed(1) + " ms"
|
||||
}
|
||||
StatText {
|
||||
visible: root.expanded
|
||||
text: root.renderEngineStats
|
||||
text: "Engine: " + root.engineFrameTime.toFixed(1) + " ms"
|
||||
}
|
||||
StatText {
|
||||
text: "Batch: " + root.batchFrameTime.toFixed(1) + " ms"
|
||||
|
|
|
@ -112,6 +112,7 @@ Rectangle {
|
|||
|
||||
// mute is in its own row
|
||||
RowLayout {
|
||||
spacing: (margins.sizeCheckBox - 10.5) * 3;
|
||||
AudioControls.CheckBox {
|
||||
id: muteMic
|
||||
text: qsTr("Mute microphone");
|
||||
|
@ -123,6 +124,19 @@ Rectangle {
|
|||
checked = Qt.binding(function() { return AudioScriptingInterface.muted; }); // restore binding
|
||||
}
|
||||
}
|
||||
|
||||
AudioControls.CheckBox {
|
||||
id: stereoMic
|
||||
spacing: muteMic.spacing;
|
||||
text: qsTr("use stereo for stereo devices");
|
||||
checked: false;
|
||||
onClicked: {
|
||||
var success = Audio.setIsStereoInput(checked);
|
||||
if (!success) {
|
||||
checked = !checked;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
|
@ -204,6 +218,8 @@ Rectangle {
|
|||
text: devicename
|
||||
onPressed: {
|
||||
if (!checked) {
|
||||
stereoMic.checked = false;
|
||||
Audio.setIsStereoInput(false); // the next selected audio device might not support stereo
|
||||
AudioScriptingInterface.setInputDevice(info, bar.currentIndex === 1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,6 +69,10 @@ Item {
|
|||
hoverEnabled: true;
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
sendSignalToParent({method: 'maybeEnableHmdPreview'});
|
||||
}
|
||||
|
||||
// This will cause a bug -- if you bring up passphrase selection in HUD mode while
|
||||
// in HMD while having HMD preview enabled, then move, then finish passphrase selection,
|
||||
// HMD preview will stay off.
|
||||
|
|
|
@ -236,6 +236,8 @@ Rectangle {
|
|||
} else {
|
||||
sendToScript(msg);
|
||||
}
|
||||
} else if (msg.method === 'maybeEnableHmdPreview') {
|
||||
sendToScript(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -346,7 +346,7 @@ public:
|
|||
* restoreRoleAnimation() is used to restore a specified animation role's default animation clip. If you have not specified an override animation
|
||||
* for the specified role, this function will have no effect.
|
||||
* @function MyAvatar.restoreRoleAnimation
|
||||
* @param rule {string} The animation role clip to restore
|
||||
* @param role {string} The animation role clip to restore
|
||||
*/
|
||||
Q_INVOKABLE void restoreRoleAnimation(const QString& role);
|
||||
|
||||
|
|
|
@ -482,7 +482,7 @@ void Stats::updateStats(bool force) {
|
|||
float dt = (float)itr.value().getMovingAverage() / (float)USECS_PER_MSEC;
|
||||
_gameUpdateStats = QString("/idle/update = %1 ms").arg(dt);
|
||||
|
||||
QVector<QString> categories = { "devices", "physics", "otherAvatars", "MyAvatar", "pickManager", "postUpdateLambdas", "misc" };
|
||||
QVector<QString> categories = { "devices", "physics", "otherAvatars", "MyAvatar", "misc" };
|
||||
for (int32_t j = 0; j < categories.size(); ++j) {
|
||||
QString recordKey = "/idle/update/" + categories[j];
|
||||
itr = allRecords.find(recordKey);
|
||||
|
@ -502,39 +502,10 @@ void Stats::updateStats(bool force) {
|
|||
_gameUpdateStats = "";
|
||||
emit gameUpdateStatsChanged();
|
||||
}
|
||||
|
||||
itr = allRecords.find("/paintGL/display/EngineRun/Engine");
|
||||
std::priority_queue<SortableStat> renderEngineStats;
|
||||
if (itr != allRecords.end()) {
|
||||
float dt = (float)itr.value().getMovingAverage() / (float)USECS_PER_MSEC;
|
||||
_renderEngineStats = QString("/render = %1 ms").arg(dt);
|
||||
|
||||
QVector<QString> categories = { "RenderMainView", "SecondaryCameraJob", "UpdateScene"};
|
||||
for (int32_t j = 0; j < categories.size(); ++j) {
|
||||
QString recordKey = "/paintGL/display/EngineRun/Engine/" + categories[j];
|
||||
itr = allRecords.find(recordKey);
|
||||
if (itr != allRecords.end()) {
|
||||
float dt = (float)itr.value().getMovingAverage() / (float)USECS_PER_MSEC;
|
||||
QString message = QString("\n %1 = %2").arg(categories[j]).arg(dt);
|
||||
renderEngineStats.push(SortableStat(message, dt));
|
||||
}
|
||||
}
|
||||
while (!renderEngineStats.empty()) {
|
||||
SortableStat stat = renderEngineStats.top();
|
||||
_renderEngineStats += stat.message;
|
||||
renderEngineStats.pop();
|
||||
}
|
||||
emit renderEngineStatsChanged();
|
||||
} else if (_renderEngineStats != "") {
|
||||
_renderEngineStats = "";
|
||||
emit renderEngineStatsChanged();
|
||||
}
|
||||
} else if (_showGameUpdateStats) {
|
||||
_showGameUpdateStats = false;
|
||||
_gameUpdateStats = "";
|
||||
_renderEngineStats = "";
|
||||
emit gameUpdateStatsChanged();
|
||||
emit renderEngineStatsChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -106,7 +106,6 @@ class Stats : public QQuickItem {
|
|||
STATS_PROPERTY(QString, lodStatus, QString())
|
||||
STATS_PROPERTY(QString, timingStats, QString())
|
||||
STATS_PROPERTY(QString, gameUpdateStats, QString())
|
||||
STATS_PROPERTY(QString, renderEngineStats, QString())
|
||||
STATS_PROPERTY(int, serverElements, 0)
|
||||
STATS_PROPERTY(int, serverInternal, 0)
|
||||
STATS_PROPERTY(int, serverLeaves, 0)
|
||||
|
@ -240,7 +239,6 @@ signals:
|
|||
void localLeavesChanged();
|
||||
void timingStatsChanged();
|
||||
void gameUpdateStatsChanged();
|
||||
void renderEngineStatsChanged();
|
||||
void glContextSwapchainMemoryChanged();
|
||||
void qmlTextureMemoryChanged();
|
||||
void texturePendingTransfersChanged();
|
||||
|
|
|
@ -1397,9 +1397,11 @@ void AudioClient::setNoiseReduction(bool enable) {
|
|||
}
|
||||
|
||||
|
||||
void AudioClient::setIsStereoInput(bool isStereoInput) {
|
||||
if (isStereoInput != _isStereoInput) {
|
||||
bool AudioClient::setIsStereoInput(bool isStereoInput) {
|
||||
bool stereoInputChanged = false;
|
||||
if (isStereoInput != _isStereoInput && _inputDeviceInfo.supportedChannelCounts().contains(2)) {
|
||||
_isStereoInput = isStereoInput;
|
||||
stereoInputChanged = true;
|
||||
|
||||
if (_isStereoInput) {
|
||||
_desiredInputFormat.setChannelCount(2);
|
||||
|
@ -1419,6 +1421,8 @@ void AudioClient::setIsStereoInput(bool isStereoInput) {
|
|||
// restart the input device
|
||||
switchInputToAudioDevice(_inputDeviceInfo);
|
||||
}
|
||||
|
||||
return stereoInputChanged;
|
||||
}
|
||||
|
||||
bool AudioClient::outputLocalInjector(const AudioInjectorPointer& injector) {
|
||||
|
|
|
@ -192,7 +192,7 @@ public slots:
|
|||
void toggleMute();
|
||||
bool isMuted() { return _muted; }
|
||||
|
||||
virtual void setIsStereoInput(bool stereo) override;
|
||||
virtual bool setIsStereoInput(bool stereo) override;
|
||||
|
||||
void setNoiseReduction(bool isNoiseGateEnabled);
|
||||
bool isNoiseReductionEnabled() const { return _isNoiseGateEnabled; }
|
||||
|
|
|
@ -41,7 +41,7 @@ public:
|
|||
public slots:
|
||||
virtual bool shouldLoopbackInjectors() { return false; }
|
||||
|
||||
virtual void setIsStereoInput(bool stereo) = 0;
|
||||
virtual bool setIsStereoInput(bool stereo) = 0;
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(AbstractAudioInterface*)
|
||||
|
|
|
@ -1787,7 +1787,7 @@ bool Octree::writeToFile(const char* fileName, const OctreeElementPointer& eleme
|
|||
return success;
|
||||
}
|
||||
|
||||
bool Octree::toJSON(QJsonDocument* doc, const OctreeElementPointer& element) {
|
||||
bool Octree::toJSONDocument(QJsonDocument* doc, const OctreeElementPointer& element) {
|
||||
QVariantMap entityDescription;
|
||||
|
||||
OctreeElementPointer top;
|
||||
|
@ -1813,18 +1813,22 @@ bool Octree::toJSON(QJsonDocument* doc, const OctreeElementPointer& element) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool Octree::toGzippedJSON(QByteArray* data, const OctreeElementPointer& element) {
|
||||
bool Octree::toJSON(QByteArray* data, const OctreeElementPointer& element, bool doGzip) {
|
||||
QJsonDocument doc;
|
||||
if (!toJSON(&doc, element)) {
|
||||
if (!toJSONDocument(&doc, element)) {
|
||||
qCritical("Failed to convert Entities to QVariantMap while converting to json.");
|
||||
return false;
|
||||
}
|
||||
|
||||
QByteArray jsonData = doc.toJson();
|
||||
if (doGzip) {
|
||||
QByteArray jsonData = doc.toJson();
|
||||
|
||||
if (!gzip(jsonData, *data, -1)) {
|
||||
qCritical("Unable to gzip data while saving to json.");
|
||||
return false;
|
||||
if (!gzip(jsonData, *data, -1)) {
|
||||
qCritical("Unable to gzip data while saving to json.");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
*data = doc.toJson();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -1834,7 +1838,7 @@ bool Octree::writeToJSONFile(const char* fileName, const OctreeElementPointer& e
|
|||
qCDebug(octree, "Saving JSON SVO to file %s...", fileName);
|
||||
|
||||
QByteArray jsonDataForFile;
|
||||
if (!toGzippedJSON(&jsonDataForFile)) {
|
||||
if (!toJSON(&jsonDataForFile, element, doGzip)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1846,7 +1850,6 @@ bool Octree::writeToJSONFile(const char* fileName, const OctreeElementPointer& e
|
|||
qCritical("Could not write to JSON description of entities.");
|
||||
}
|
||||
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
|
|
@ -284,8 +284,8 @@ public:
|
|||
void loadOctreeFile(const char* fileName);
|
||||
|
||||
// Octree exporters
|
||||
bool toJSON(QJsonDocument* doc, const OctreeElementPointer& element = nullptr);
|
||||
bool toGzippedJSON(QByteArray* data, const OctreeElementPointer& element = nullptr);
|
||||
bool toJSONDocument(QJsonDocument* doc, const OctreeElementPointer& element = nullptr);
|
||||
bool toJSON(QByteArray* data, const OctreeElementPointer& element = nullptr, bool doGzip = false);
|
||||
bool writeToFile(const char* filename, const OctreeElementPointer& element = nullptr, QString persistAsFileType = "json.gz");
|
||||
bool writeToJSONFile(const char* filename, const OctreeElementPointer& element = nullptr, bool doGzip = false);
|
||||
virtual bool writeToMap(QVariantMap& entityDescription, OctreeElementPointer element, bool skipDefaultValues,
|
||||
|
|
|
@ -341,7 +341,7 @@ void OctreePersistThread::sendLatestEntityDataToDS() {
|
|||
const DomainHandler& domainHandler = nodeList->getDomainHandler();
|
||||
|
||||
QByteArray data;
|
||||
if (_tree->toGzippedJSON(&data)) {
|
||||
if (_tree->toJSON(&data, nullptr, true)) {
|
||||
auto message = NLPacketList::create(PacketType::OctreeDataPersist, QByteArray(), true, true);
|
||||
message->write(data);
|
||||
nodeList->sendPacketList(std::move(message), domainHandler.getSockAddr());
|
||||
|
|
|
@ -60,8 +60,10 @@ ScriptAudioInjector* AudioScriptingInterface::playSound(SharedSoundPointer sound
|
|||
}
|
||||
}
|
||||
|
||||
void AudioScriptingInterface::setStereoInput(bool stereo) {
|
||||
bool AudioScriptingInterface::setStereoInput(bool stereo) {
|
||||
bool stereoInputChanged = false;
|
||||
if (_localAudioInterface) {
|
||||
_localAudioInterface->setIsStereoInput(stereo);
|
||||
stereoInputChanged = _localAudioInterface->setIsStereoInput(stereo);
|
||||
}
|
||||
return stereoInputChanged;
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ protected:
|
|||
// FIXME: there is no way to play a positionless sound
|
||||
Q_INVOKABLE ScriptAudioInjector* playSystemSound(SharedSoundPointer sound, const QVector3D& position);
|
||||
|
||||
Q_INVOKABLE void setStereoInput(bool stereo);
|
||||
Q_INVOKABLE bool setStereoInput(bool stereo);
|
||||
|
||||
signals:
|
||||
void mutedByMixer(); /// the client has been muted by the mixer
|
||||
|
|
|
@ -43,6 +43,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
|
|||
this.totalVariance = 0;
|
||||
this.highVarianceCount = 0;
|
||||
this.veryhighVarianceCount = 0;
|
||||
this.orderedPluginNames = [];
|
||||
this.tabletID = null;
|
||||
this.blacklist = [];
|
||||
this.pointerManager = new PointerManager();
|
||||
|
|
|
@ -321,22 +321,19 @@ function multiDataUpdater(groupName, updateKeyPair, userDataElement, defaults) {
|
|||
}
|
||||
var keys = Object.keys(updateKeyPair);
|
||||
keys.forEach(function (key) {
|
||||
delete parsedData[groupName][key];
|
||||
if (updateKeyPair[key] !== null && updateKeyPair[key] !== "null") {
|
||||
if (updateKeyPair[key] instanceof Element) {
|
||||
if (updateKeyPair[key].type === "checkbox") {
|
||||
if (updateKeyPair[key].checked !== defaults[key]) {
|
||||
parsedData[groupName][key] = updateKeyPair[key].checked;
|
||||
}
|
||||
parsedData[groupName][key] = updateKeyPair[key].checked;
|
||||
} else {
|
||||
var val = isNaN(updateKeyPair[key].value) ? updateKeyPair[key].value : parseInt(updateKeyPair[key].value);
|
||||
if (val !== defaults[key]) {
|
||||
parsedData[groupName][key] = val;
|
||||
}
|
||||
parsedData[groupName][key] = val;
|
||||
}
|
||||
} else {
|
||||
parsedData[groupName][key] = updateKeyPair[key];
|
||||
}
|
||||
} else if (defaults[key] !== null && defaults[key] !== "null") {
|
||||
parsedData[groupName][key] = defaults[key];
|
||||
}
|
||||
});
|
||||
if (Object.keys(parsedData[groupName]).length === 0) {
|
||||
|
@ -1281,7 +1278,7 @@ function loaded() {
|
|||
if (elCloneable.checked) {
|
||||
elGrabbable.checked = false;
|
||||
}
|
||||
userDataChanger("grabbableKey", "grabbable", elGrabbable, elUserData, properties.dynamic);
|
||||
userDataChanger("grabbableKey", "grabbable", elGrabbable, elUserData, true);
|
||||
});
|
||||
elCloneableDynamic.addEventListener('change', function(event) {
|
||||
userDataChanger("grabbableKey", "cloneDynamic", event.target, elUserData, -1);
|
||||
|
|
|
@ -115,13 +115,15 @@ var selectionDisplay = null; // for gridTool.js to ignore
|
|||
var filterText; // Used for updating Purchases QML
|
||||
|
||||
var onWalletScreen = false;
|
||||
var onCommerceScreen = false;
|
||||
|
||||
function onScreenChanged(type, url) {
|
||||
onMarketplaceScreen = type === "Web" && url.indexOf(MARKETPLACE_URL) !== -1;
|
||||
var onWalletScreenNow = url.indexOf(MARKETPLACE_WALLET_QML_PATH) !== -1;
|
||||
onCommerceScreen = type === "QML" && (url.indexOf(MARKETPLACE_CHECKOUT_QML_PATH) !== -1 || url === MARKETPLACE_PURCHASES_QML_PATH
|
||||
var onCommerceScreenNow = type === "QML" && (url.indexOf(MARKETPLACE_CHECKOUT_QML_PATH) !== -1 || url === MARKETPLACE_PURCHASES_QML_PATH
|
||||
|| url.indexOf(MARKETPLACE_INSPECTIONCERTIFICATE_QML_PATH) !== -1);
|
||||
|
||||
if (!onWalletScreenNow && onWalletScreen) { // exiting wallet screen
|
||||
if ((!onWalletScreenNow && onWalletScreen) || (!onCommerceScreenNow && onCommerceScreen)) { // exiting wallet or commerce screen
|
||||
if (isHmdPreviewDisabledBySecurity) {
|
||||
DesktopPreviewProvider.setPreviewDisabledReason("USER");
|
||||
Menu.setIsOptionChecked("Disable Preview", false);
|
||||
|
@ -129,6 +131,7 @@ var selectionDisplay = null; // for gridTool.js to ignore
|
|||
}
|
||||
}
|
||||
|
||||
onCommerceScreen = onCommerceScreenNow;
|
||||
onWalletScreen = onWalletScreenNow;
|
||||
wireEventBridge(onMarketplaceScreen || onCommerceScreen || onWalletScreen);
|
||||
|
||||
|
|
Loading…
Reference in a new issue