History

Merge branch 'master' of https://github.com/highfidelity/hifi into 19734

samcake committed 12 years ago

Commit fca3a6a2 parents 35977fb d8a5f59192 files · +9602 −2725Browse files

Showing the changes to interface/src/Application.cpp (1 of 192 files). Show all

Unified · Split

interface/src/Application.cpp+71−35
@@ -60,6 +60,7 @@ · 59 unmodified lines
60#include <ParticlesScriptingInterface.h>60#include <ParticlesScriptingInterface.h>
61#include <PerfStat.h>61#include <PerfStat.h>
62#include <ResourceCache.h>62#include <ResourceCache.h>
63#include <UserActivityLogger.h>
63#include <UUID.h>64#include <UUID.h>
64#include <OctreeSceneStats.h>65#include <OctreeSceneStats.h>
65#include <LocalVoxelsList.h>66#include <LocalVoxelsList.h>
@@ -136,7 +137,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 70 unmodified lines
136 _nodeThread(new QThread(this)),137 _nodeThread(new QThread(this)),
137 _datagramProcessor(),138 _datagramProcessor(),
138 _frameCount(0),139 _frameCount(0),
139 _fps(120.0f),140 _fps(60.0f),
140 _justStarted(true),141 _justStarted(true),
141 _voxelImporter(NULL),142 _voxelImporter(NULL),
142 _importSucceded(false),143 _importSucceded(false),
@@ -169,7 +170,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 26 unmodified lines
169 _nodeBoundsDisplay(this),170 _nodeBoundsDisplay(this),
170 _previousScriptLocation(),171 _previousScriptLocation(),
171 _applicationOverlay(),172 _applicationOverlay(),
172 _runningScriptsWidget(new RunningScriptsWidget(_window)),173 _runningScriptsWidget(NULL),
173 _runningScriptsWidgetWasVisible(false),174 _runningScriptsWidgetWasVisible(false),
174 _trayIcon(new QSystemTrayIcon(_window)),175 _trayIcon(new QSystemTrayIcon(_window)),
175 _lastNackTime(usecTimestampNow())176 _lastNackTime(usecTimestampNow())
@@ -203,6 +204,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 27 unmodified lines
203 // call Menu getInstance static method to set up the menu204 // call Menu getInstance static method to set up the menu
204 _window->setMenuBar(Menu::getInstance());205 _window->setMenuBar(Menu::getInstance());
205 206
207 _runningScriptsWidget = new RunningScriptsWidget(_window);
208
206 unsigned int listenPort = 0; // bind to an ephemeral port by default209 unsigned int listenPort = 0; // bind to an ephemeral port by default
207 const char** constArgv = const_cast<const char**>(argv);210 const char** constArgv = const_cast<const char**>(argv);
208 const char* portStr = getCmdOption(argc, constArgv, "--listenPort");211 const char* portStr = getCmdOption(argc, constArgv, "--listenPort");
@@ -268,6 +271,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 59 unmodified lines
268 271
269 // set the account manager's root URL and trigger a login request if we don't have the access token272 // set the account manager's root URL and trigger a login request if we don't have the access token
270 accountManager.setAuthURL(DEFAULT_NODE_AUTH_URL);273 accountManager.setAuthURL(DEFAULT_NODE_AUTH_URL);
274 UserActivityLogger::getInstance().launch(applicationVersion());
271 275
272 // once the event loop has started, check and signal for an access token276 // once the event loop has started, check and signal for an access token
273 QMetaObject::invokeMethod(&accountManager, "checkAndSignalForAccessToken", Qt::QueuedConnection);277 QMetaObject::invokeMethod(&accountManager, "checkAndSignalForAccessToken", Qt::QueuedConnection);
@@ -396,7 +400,9 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 122 unmodified lines
396}400}
397 401
398Application::~Application() {402Application::~Application() {
399 403 int DELAY_TIME = 1000;
404 UserActivityLogger::getInstance().close(DELAY_TIME);
405
400 qInstallMessageHandler(NULL);406 qInstallMessageHandler(NULL);
401 407
402 // make sure we don't call the idle timer any more408 // make sure we don't call the idle timer any more
@@ -553,7 +559,7 @@ void Application::initializeGL() { · 150 unmodified lines
553 }559 }
554 560
555 // update before the first render561 // update before the first render
556 update(0.0f);562 update(1.f / _fps);
557 563
558 InfoView::showFirstTime();564 InfoView::showFirstTime();
559}565}
@@ -565,6 +571,16 @@ void Application::paintGL() { · 5 unmodified lines
565 bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings);571 bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings);
566 PerformanceWarning warn(showWarnings, "Application::paintGL()");572 PerformanceWarning warn(showWarnings, "Application::paintGL()");
567 573
574 const bool glowEnabled = Menu::getInstance()->isOptionChecked(MenuOption::EnableGlowEffect);
575
576 // Set the desired FBO texture size. If it hasn't changed, this does nothing.
577 // Otherwise, it must rebuild the FBOs
578 if (OculusManager::isConnected()) {
579 _textureCache.setFrameBufferSize(OculusManager::getRenderTargetSize());
580 } else {
581 _textureCache.setFrameBufferSize(_glWidget->size());
582 }
583
568 glEnable(GL_LINE_SMOOTH);584 glEnable(GL_LINE_SMOOTH);
569 585
570 if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) {586 if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) {
@@ -573,28 +589,16 @@ void Application::paintGL() { · 2 unmodified lines
573 _myCamera.setTargetRotation(_myAvatar->getHead()->getCameraOrientation());589 _myCamera.setTargetRotation(_myAvatar->getHead()->getCameraOrientation());
574 590
575 } else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) {591 } else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) {
592 //Note, the camera distance is set in Camera::setMode() so we dont have to do it here.
576 _myCamera.setTightness(0.0f); // Camera is directly connected to head without smoothing593 _myCamera.setTightness(0.0f); // Camera is directly connected to head without smoothing
577 _myCamera.setTargetPosition(_myAvatar->getUprightHeadPosition());594 _myCamera.setTargetPosition(_myAvatar->getUprightHeadPosition());
578 _myCamera.setTargetRotation(_myAvatar->getHead()->getCameraOrientation());595 _myCamera.setTargetRotation(_myAvatar->getWorldAlignedOrientation());
579 596
580 } else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) {597 } else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) {
581 _myCamera.setTightness(0.0f);598 _myCamera.setTightness(0.0f);
582 glm::vec3 eyePosition = _myAvatar->getHead()->calculateAverageEyePosition();
583 float headHeight = eyePosition.y - _myAvatar->getPosition().y;
584 _myCamera.setDistance(MIRROR_FULLSCREEN_DISTANCE * _scaleMirror);599 _myCamera.setDistance(MIRROR_FULLSCREEN_DISTANCE * _scaleMirror);
585 _myCamera.setTargetPosition(_myAvatar->getPosition() + glm::vec3(0, headHeight + (_raiseMirror * _myAvatar->getScale()), 0));
586 _myCamera.setTargetRotation(_myAvatar->getWorldAlignedOrientation() * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f)));600 _myCamera.setTargetRotation(_myAvatar->getWorldAlignedOrientation() * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f)));
587 }601 _myCamera.setTargetPosition(_myAvatar->getHead()->calculateAverageEyePosition());
588
589 if (OculusManager::isConnected()) {
590 // Oculus in third person causes nausea, so only allow it if option is checked in dev menu
591 if (!Menu::getInstance()->isOptionChecked(MenuOption::AllowOculusCameraModeChange) || _myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) {
592 _myCamera.setDistance(0.0f);
593 _myCamera.setTargetPosition(_myAvatar->getHead()->calculateAverageEyePosition());
594 _myCamera.setTargetRotation(_myAvatar->getHead()->getCameraOrientation());
595 }
596 _myCamera.setUpShift(0.0f);
597 _myCamera.setTightness(0.0f); // Camera is directly connected to head without smoothing
598 }602 }
599 603
600 // Update camera position604 // Update camera position
@@ -629,16 +633,32 @@ void Application::paintGL() { · 28 unmodified lines
629 updateShadowMap();633 updateShadowMap();
630 }634 }
631 635
636 //If we aren't using the glow shader, we have to clear the color and depth buffer
637 if (!glowEnabled) {
638 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
639 }
640
632 if (OculusManager::isConnected()) {641 if (OculusManager::isConnected()) {
633 OculusManager::display(whichCamera);642 //When in mirror mode, use camera rotation. Otherwise, use body rotation
643 if (whichCamera.getMode() == CAMERA_MODE_MIRROR) {
644 OculusManager::display(whichCamera.getRotation(), whichCamera.getPosition(), whichCamera);
645 } else {
646 OculusManager::display(_myAvatar->getWorldAlignedOrientation(), whichCamera.getPosition(), whichCamera);
647 }
634 648
635 } else if (TV3DManager::isConnected()) {649 } else if (TV3DManager::isConnected()) {
636 _glowEffect.prepare();650 if (glowEnabled) {
651 _glowEffect.prepare();
652 }
637 TV3DManager::display(whichCamera);653 TV3DManager::display(whichCamera);
638 _glowEffect.render();654 if (glowEnabled) {
655 _glowEffect.render();
656 }
639 657
640 } else {658 } else {
641 _glowEffect.prepare();659 if (glowEnabled) {
660 _glowEffect.prepare();
661 }
642 662
643 glMatrixMode(GL_MODELVIEW);663 glMatrixMode(GL_MODELVIEW);
644 glPushMatrix();664 glPushMatrix();
@@ -646,7 +666,9 @@ void Application::paintGL() { · 1 unmodified line
646 displaySide(whichCamera);666 displaySide(whichCamera);
647 glPopMatrix();667 glPopMatrix();
648 668
649 _glowEffect.render();669 if (glowEnabled) {
670 _glowEffect.render();
671 }
650 672
651 if (Menu::getInstance()->isOptionChecked(MenuOption::Mirror)) {673 if (Menu::getInstance()->isOptionChecked(MenuOption::Mirror)) {
652 renderRearViewMirror(_mirrorViewRect);674 renderRearViewMirror(_mirrorViewRect);
@@ -2178,7 +2200,8 @@ int Application::sendNackPackets() { · 1525 unmodified lines
2178 OctreeSceneStats& stats = _octreeServerSceneStats[nodeUUID];2200 OctreeSceneStats& stats = _octreeServerSceneStats[nodeUUID];
2179 2201
2180 // make copy of missing sequence numbers from stats2202 // make copy of missing sequence numbers from stats
2181 const QSet<OCTREE_PACKET_SEQUENCE> missingSequenceNumbers = stats.getMissingSequenceNumbers();2203 const QSet<OCTREE_PACKET_SEQUENCE> missingSequenceNumbers =
2204 stats.getIncomingOctreeSequenceNumberStats().getMissingSet();
2182 2205
2183 _octreeSceneStatsLock.unlock();2206 _octreeSceneStatsLock.unlock();
2184 2207
@@ -3148,9 +3171,7 @@ void Application::resetSensors() { · 963 unmodified lines
3148 _faceshift.reset();3171 _faceshift.reset();
3149 _visage.reset();3172 _visage.reset();
3150 3173
3151 if (OculusManager::isConnected()) {3174 OculusManager::reset();
3152 OculusManager::reset();
3153 }
3154 3175
3155 _prioVR.reset();3176 _prioVR.reset();
3156 //_leapmotion.reset();3177 //_leapmotion.reset();
@@ -3303,6 +3324,10 @@ void Application::nodeKilled(SharedNodePointer node) { · 146 unmodified lines
3303 _particleEditSender.nodeKilled(node);3324 _particleEditSender.nodeKilled(node);
3304 _modelEditSender.nodeKilled(node);3325 _modelEditSender.nodeKilled(node);
3305 3326
3327 if (node->getType() == NodeType::AudioMixer) {
3328 QMetaObject::invokeMethod(&_audio, "resetIncomingMixedAudioSequenceNumberStats");
3329 }
3330
3306 if (node->getType() == NodeType::VoxelServer) {3331 if (node->getType() == NodeType::VoxelServer) {
3307 QUuid nodeUUID = node->getUUID();3332 QUuid nodeUUID = node->getUUID();
3308 // see if this is the first we've heard of this node...3333 // see if this is the first we've heard of this node...
@@ -3547,10 +3572,12 @@ void Application::saveScripts() { · 238 unmodified lines
3547 _settings->endArray();3572 _settings->endArray();
3548}3573}
3549 3574
3550ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScriptFromEditor) {3575ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScriptFromEditor, bool activateMainWindow) {
3551 QUrl scriptUrl(scriptName);3576 QUrl scriptUrl(scriptName);
3552 const QString& scriptURLString = scriptUrl.toString();3577 const QString& scriptURLString = scriptUrl.toString();
3553 if(loadScriptFromEditor && _scriptEnginesHash.contains(scriptURLString) && !_scriptEnginesHash[scriptURLString]->isFinished()){3578 if (_scriptEnginesHash.contains(scriptURLString) && loadScriptFromEditor
3579 && !_scriptEnginesHash[scriptURLString]->isFinished()) {
3580
3554 return _scriptEnginesHash[scriptURLString];3581 return _scriptEnginesHash[scriptURLString];
3555 }3582 }
3556 3583
@@ -3563,11 +3590,13 @@ ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScript · 6 unmodified lines
3563 3590
3564 if (!scriptEngine->hasScript()) {3591 if (!scriptEngine->hasScript()) {
3565 qDebug() << "Application::loadScript(), script failed to load...";3592 qDebug() << "Application::loadScript(), script failed to load...";
3593 QMessageBox::warning(getWindow(), "Error Loading Script", scriptURLString + " failed to load.");
3566 return NULL;3594 return NULL;
3567 }3595 }
3568 3596
3569 _scriptEnginesHash.insert(scriptURLString, scriptEngine);3597 _scriptEnginesHash.insertMulti(scriptURLString, scriptEngine);
3570 _runningScriptsWidget->setRunningScripts(getRunningScripts());3598 _runningScriptsWidget->setRunningScripts(getRunningScripts());
3599 UserActivityLogger::getInstance().loadedScript(scriptURLString);
3571 }3600 }
3572 3601
3573 // setup the packet senders and jurisdiction listeners of the script engine's scripting interfaces so3602 // setup the packet senders and jurisdiction listeners of the script engine's scripting interfaces so
@@ -3623,13 +3652,16 @@ ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScript · 49 unmodified lines
3623 // when the application is about to quit, stop our script engine so it unwinds properly3652 // when the application is about to quit, stop our script engine so it unwinds properly
3624 connect(this, SIGNAL(aboutToQuit()), scriptEngine, SLOT(stop()));3653 connect(this, SIGNAL(aboutToQuit()), scriptEngine, SLOT(stop()));
3625 3654
3655 NodeList* nodeList = NodeList::getInstance();
3656 connect(nodeList, &NodeList::nodeKilled, scriptEngine, &ScriptEngine::nodeKilled);
3657
3626 scriptEngine->moveToThread(workerThread);3658 scriptEngine->moveToThread(workerThread);
3627 3659
3628 // Starts an event loop, and emits workerThread->started()3660 // Starts an event loop, and emits workerThread->started()
3629 workerThread->start();3661 workerThread->start();
3630 3662
3631 // restore the main window's active state3663 // restore the main window's active state
3632 if (!loadScriptFromEditor) {3664 if (activateMainWindow && !loadScriptFromEditor) {
3633 _window->activateWindow();3665 _window->activateWindow();
3634 }3666 }
3635 bumpSettings();3667 bumpSettings();
@@ -3638,7 +3670,10 @@ ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScript · 2 unmodified lines
3638}3670}
3639 3671
3640void Application::scriptFinished(const QString& scriptName) {3672void Application::scriptFinished(const QString& scriptName) {
3641 if (_scriptEnginesHash.remove(scriptName)) {3673 const QString& scriptURLString = QUrl(scriptName).toString();
3674 QHash<QString, ScriptEngine*>::iterator it = _scriptEnginesHash.find(scriptURLString);
3675 if (it != _scriptEnginesHash.end()) {
3676 _scriptEnginesHash.erase(it);
3642 _runningScriptsWidget->scriptStopped(scriptName);3677 _runningScriptsWidget->scriptStopped(scriptName);
3643 _runningScriptsWidget->setRunningScripts(getRunningScripts());3678 _runningScriptsWidget->setRunningScripts(getRunningScripts());
3644 bumpSettings();3679 bumpSettings();
@@ -3658,8 +3693,9 @@ void Application::stopAllScripts(bool restart) { · 13 unmodified lines
3658}3693}
3659 3694
3660void Application::stopScript(const QString &scriptName) {3695void Application::stopScript(const QString &scriptName) {
3661 if (_scriptEnginesHash.contains(scriptName)) {3696 const QString& scriptURLString = QUrl(scriptName).toString();
3662 _scriptEnginesHash.value(scriptName)->stop();3697 if (_scriptEnginesHash.contains(scriptURLString)) {
3698 _scriptEnginesHash.value(scriptURLString)->stop();
3663 qDebug() << "stopping script..." << scriptName;3699 qDebug() << "stopping script..." << scriptName;
3664 }3700 }
3665}3701}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t