Showing the changes to interface/src/Application.cpp (1 of 137 files). Show all
Unified · Split
| @@ -1861,12 +1861,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo · 1860 unmodified lines | ||
| 1861 | 1861 | |
| 1862 | 1862 | if (Menu::getInstance()->isOptionChecked(MenuOption::FirstPerson)) { |
| 1863 | 1863 | getMyAvatar()->setBoomLength(MyAvatar::ZOOM_MIN); // So that camera doesn't auto-switch to third person. |
| 1864 | − } else if (Menu::getInstance()->isOptionChecked(MenuOption::IndependentMode)) { | |
| 1865 | − Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, true); | |
| 1866 | − cameraMenuChanged(); | |
| 1867 | − } else if (Menu::getInstance()->isOptionChecked(MenuOption::CameraEntityMode)) { | |
| 1868 | − Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, true); | |
| 1869 | − cameraMenuChanged(); | |
| 1870 | 1864 | } |
| 1871 | 1865 | |
| 1872 | 1866 | { |
| @@ -2337,7 +2331,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo · 464 unmodified lines | ||
| 2337 | 2331 | DependencyManager::get<PickManager>()->setPrecisionPicking(rayPickID, value); |
| 2338 | 2332 | }); |
| 2339 | 2333 | |
| 2340 | − EntityItem::setBillboardRotationOperator([this](const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode, const glm::vec3& frustumPos) { | |
| 2334 | + EntityItem::setBillboardRotationOperator([](const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode, const glm::vec3& frustumPos) { | |
| 2341 | 2335 | if (billboardMode == BillboardMode::YAW) { |
| 2342 | 2336 | //rotate about vertical to face the camera |
| 2343 | 2337 | glm::vec3 dPosition = frustumPos - position; |
| @@ -2365,7 +2359,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo · 21 unmodified lines | ||
| 2365 | 2359 | |
| 2366 | 2360 | DependencyManager::get<UsersScriptingInterface>()->setKickConfirmationOperator([this] (const QUuid& nodeID) { userKickConfirmation(nodeID); }); |
| 2367 | 2361 | |
| 2368 | − render::entities::WebEntityRenderer::setAcquireWebSurfaceOperator([this](const QString& url, bool htmlContent, QSharedPointer<OffscreenQmlSurface>& webSurface, bool& cachedWebSurface) { | |
| 2362 | + render::entities::WebEntityRenderer::setAcquireWebSurfaceOperator([=](const QString& url, bool htmlContent, QSharedPointer<OffscreenQmlSurface>& webSurface, bool& cachedWebSurface) { | |
| 2369 | 2363 | bool isTablet = url == TabletScriptingInterface::QML; |
| 2370 | 2364 | if (htmlContent) { |
| 2371 | 2365 | webSurface = DependencyManager::get<OffscreenQmlSurfaceCache>()->acquire(render::entities::WebEntityRenderer::QML); |
| @@ -2405,7 +2399,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo · 33 unmodified lines | ||
| 2405 | 2399 | const uint8_t TABLET_FPS = 90; |
| 2406 | 2400 | webSurface->setMaxFps(isTablet ? TABLET_FPS : DEFAULT_MAX_FPS); |
| 2407 | 2401 | }); |
| 2408 | − render::entities::WebEntityRenderer::setReleaseWebSurfaceOperator([this](QSharedPointer<OffscreenQmlSurface>& webSurface, bool& cachedWebSurface, std::vector<QMetaObject::Connection>& connections) { | |
| 2402 | + render::entities::WebEntityRenderer::setReleaseWebSurfaceOperator([=](QSharedPointer<OffscreenQmlSurface>& webSurface, bool& cachedWebSurface, std::vector<QMetaObject::Connection>& connections) { | |
| 2409 | 2403 | QQuickItem* rootItem = webSurface->getRootItem(); |
| 2410 | 2404 | |
| 2411 | 2405 | // Fix for crash in QtWebEngineCore when rapidly switching domains |
| @@ -5758,9 +5752,6 @@ void Application::cycleCamera() { · 3346 unmodified lines | ||
| 5758 | 5752 | menu->setIsOptionChecked(MenuOption::ThirdPerson, false); |
| 5759 | 5753 | menu->setIsOptionChecked(MenuOption::FullscreenMirror, true); |
| 5760 | 5754 | |
| 5761 | − } else if (menu->isOptionChecked(MenuOption::IndependentMode) || menu->isOptionChecked(MenuOption::CameraEntityMode)) { | |
| 5762 | − // do nothing if in independent or camera entity modes | |
| 5763 | − return; | |
| 5764 | 5755 | } |
| 5765 | 5756 | cameraMenuChanged(); // handle the menu change |
| 5766 | 5757 | } |
| @@ -5776,12 +5767,6 @@ void Application::cameraModeChanged() { · 9 unmodified lines | ||
| 5776 | 5767 | case CAMERA_MODE_MIRROR: |
| 5777 | 5768 | Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, true); |
| 5778 | 5769 | break; |
| 5779 | − case CAMERA_MODE_INDEPENDENT: | |
| 5780 | − Menu::getInstance()->setIsOptionChecked(MenuOption::IndependentMode, true); | |
| 5781 | − break; | |
| 5782 | − case CAMERA_MODE_ENTITY: | |
| 5783 | − Menu::getInstance()->setIsOptionChecked(MenuOption::CameraEntityMode, true); | |
| 5784 | − break; | |
| 5785 | 5770 | default: |
| 5786 | 5771 | break; |
| 5787 | 5772 | } |
| @@ -5825,14 +5810,6 @@ void Application::cameraMenuChanged() { · 37 unmodified lines | ||
| 5825 | 5810 | getMyAvatar()->setBoomLength(MyAvatar::ZOOM_DEFAULT); |
| 5826 | 5811 | } |
| 5827 | 5812 | } |
| 5828 | − } else if (menu->isOptionChecked(MenuOption::IndependentMode)) { | |
| 5829 | − if (_myCamera.getMode() != CAMERA_MODE_INDEPENDENT) { | |
| 5830 | − _myCamera.setMode(CAMERA_MODE_INDEPENDENT); | |
| 5831 | − } | |
| 5832 | − } else if (menu->isOptionChecked(MenuOption::CameraEntityMode)) { | |
| 5833 | − if (_myCamera.getMode() != CAMERA_MODE_ENTITY) { | |
| 5834 | − _myCamera.setMode(CAMERA_MODE_ENTITY); | |
| 5835 | − } | |
| 5836 | 5813 | } |
| 5837 | 5814 | } |
| 5838 | 5815 | |
| @@ -6747,6 +6724,11 @@ void Application::updateRenderArgs(float deltaTime) { · 908 unmodified lines | ||
| 6747 | 6724 | } |
| 6748 | 6725 | } |
| 6749 | 6726 | |
| 6727 | + appRenderArgs._renderArgs._stencilMaskMode = getActiveDisplayPlugin()->getStencilMaskMode(); | |
| 6728 | + if (appRenderArgs._renderArgs._stencilMaskMode == StencilMaskMode::MESH) { | |
| 6729 | + appRenderArgs._renderArgs._stencilMaskOperator = getActiveDisplayPlugin()->getStencilMaskMeshOperator(); | |
| 6730 | + } | |
| 6731 | + | |
| 6750 | 6732 | { |
| 6751 | 6733 | QMutexLocker viewLocker(&_viewMutex); |
| 6752 | 6734 | _myCamera.loadViewFrustum(_displayViewFrustum); |
| @@ -8434,11 +8416,23 @@ void Application::loadAvatarBrowser() const { · 1681 unmodified lines | ||
| 8434 | 8416 | DependencyManager::get<HMDScriptingInterface>()->openTablet(); |
| 8435 | 8417 | } |
| 8436 | 8418 | |
| 8419 | +void Application::addSnapshotOperator(const SnapshotOperator& snapshotOperator) { | |
| 8420 | + std::lock_guard<std::mutex> lock(_snapshotMutex); | |
| 8421 | + _snapshotOperators.push(snapshotOperator); | |
| 8422 | + _hasPrimarySnapshot = _hasPrimarySnapshot || std::get<2>(snapshotOperator); | |
| 8423 | +} | |
| 8424 | + | |
| 8425 | +bool Application::takeSnapshotOperators(std::queue<SnapshotOperator>& snapshotOperators) { | |
| 8426 | + std::lock_guard<std::mutex> lock(_snapshotMutex); | |
| 8427 | + bool hasPrimarySnapshot = _hasPrimarySnapshot; | |
| 8428 | + _hasPrimarySnapshot = false; | |
| 8429 | + _snapshotOperators.swap(snapshotOperators); | |
| 8430 | + return hasPrimarySnapshot; | |
| 8431 | +} | |
| 8432 | + | |
| 8437 | 8433 | void Application::takeSnapshot(bool notify, bool includeAnimated, float aspectRatio, const QString& filename) { |
| 8438 | − postLambdaEvent([notify, includeAnimated, aspectRatio, filename, this] { | |
| 8439 | − // Get a screenshot and save it | |
| 8440 | − QString path = DependencyManager::get<Snapshot>()->saveSnapshot(getActiveDisplayPlugin()->getScreenshot(aspectRatio), filename, | |
| 8441 | − TestScriptingInterface::getInstance()->getTestResultsLocation()); | |
| 8434 | + addSnapshotOperator(std::make_tuple([notify, includeAnimated, aspectRatio, filename](const QImage& snapshot) { | |
| 8435 | + QString path = DependencyManager::get<Snapshot>()->saveSnapshot(snapshot, filename, TestScriptingInterface::getInstance()->getTestResultsLocation()); | |
| 8442 | 8436 | |
| 8443 | 8437 | // If we're not doing an animated snapshot as well... |
| 8444 | 8438 | if (!includeAnimated) { |
| @@ -8447,19 +8441,20 @@ void Application::takeSnapshot(bool notify, bool includeAnimated, float aspectRa · 2 unmodified lines | ||
| 8447 | 8441 | emit DependencyManager::get<WindowScriptingInterface>()->stillSnapshotTaken(path, notify); |
| 8448 | 8442 | } |
| 8449 | 8443 | } else if (!SnapshotAnimated::isAlreadyTakingSnapshotAnimated()) { |
| 8450 | − // Get an animated GIF snapshot and save it | |
| 8451 | − SnapshotAnimated::saveSnapshotAnimated(path, aspectRatio, qApp, DependencyManager::get<WindowScriptingInterface>()); | |
| 8444 | + qApp->postLambdaEvent([path, aspectRatio] { | |
| 8445 | + // Get an animated GIF snapshot and save it | |
| 8446 | + SnapshotAnimated::saveSnapshotAnimated(path, aspectRatio, DependencyManager::get<WindowScriptingInterface>()); | |
| 8447 | + }); | |
| 8452 | 8448 | } |
| 8453 | − }); | |
| 8449 | + }, aspectRatio, true)); | |
| 8454 | 8450 | } |
| 8455 | 8451 | |
| 8456 | 8452 | void Application::takeSecondaryCameraSnapshot(const bool& notify, const QString& filename) { |
| 8457 | − postLambdaEvent([notify, filename, this] { | |
| 8458 | − QString snapshotPath = DependencyManager::get<Snapshot>()->saveSnapshot(getActiveDisplayPlugin()->getSecondaryCameraScreenshot(), filename, | |
| 8459 | − TestScriptingInterface::getInstance()->getTestResultsLocation()); | |
| 8453 | + addSnapshotOperator(std::make_tuple([notify, filename](const QImage& snapshot) { | |
| 8454 | + QString snapshotPath = DependencyManager::get<Snapshot>()->saveSnapshot(snapshot, filename, TestScriptingInterface::getInstance()->getTestResultsLocation()); | |
| 8460 | 8455 | |
| 8461 | 8456 | emit DependencyManager::get<WindowScriptingInterface>()->stillSnapshotTaken(snapshotPath, notify); |
| 8462 | − }); | |
| 8457 | + }, 0.0f, false)); | |
| 8463 | 8458 | } |
| 8464 | 8459 | |
| 8465 | 8460 | void Application::takeSecondaryCamera360Snapshot(const glm::vec3& cameraPosition, const bool& cubemapOutputFormat, const bool& notify, const QString& filename) { |