diff --git a/CMakeLists.txt b/CMakeLists.txt index 14f3cd5924..d064226b6e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,10 @@ project(hifi) IF (WIN32) add_definitions( -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS ) set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1 ") +ELSEIF (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic") + #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unknown-pragmas") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") ENDIF(WIN32) set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} $ENV{QT_CMAKE_PREFIX_PATH}) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 296f049fd4..98eeb5d804 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -86,7 +86,6 @@ qt5_wrap_ui(QT_UI_HEADERS "${QT_UI_FILES}") set(INTERFACE_SRCS ${INTERFACE_SRCS} "${QT_UI_HEADERS}") if (APPLE) - # configure CMake to use a custom Info.plist SET_TARGET_PROPERTIES( ${this_target} PROPERTIES MACOSX_BUNDLE_INFO_PLIST MacOSXBundleInfo.plist.in ) @@ -98,9 +97,7 @@ if (APPLE) # set where in the bundle to put the resources file SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/interface.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources) - - SET(INTERFACE_SRCS ${INTERFACE_SRCS} "${CMAKE_CURRENT_SOURCE_DIR}/interface.icns") - + # grab the directories in resources and put them in the right spot in Resources file(GLOB RESOURCE_SUBDIRS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/resources" "${CMAKE_CURRENT_SOURCE_DIR}/resources/*") foreach(DIR ${RESOURCE_SUBDIRS}) @@ -111,7 +108,18 @@ if (APPLE) SET(INTERFACE_SRCS ${INTERFACE_SRCS} "${DIR_CONTENTS}") endif() endforeach() -endif (APPLE) + + SET(INTERFACE_SRCS ${INTERFACE_SRCS} "${CMAKE_CURRENT_SOURCE_DIR}/interface.icns") +elseif() + # remove and then copy the resources files beside the executable + add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E remove_directory + $/resources) + add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy_directory + "${PROJECT_SOURCE_DIR}/resources" + $/resources) +endif() # create the executable, make it a bundle on OS X add_executable(${TARGET_NAME} MACOSX_BUNDLE ${INTERFACE_SRCS}) @@ -255,4 +263,4 @@ endif (WIN32) INSTALL(TARGETS ${TARGET_NAME} BUNDLE DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/install" COMPONENT Runtime RUNTIME DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/install" COMPONENT Runtime -) \ No newline at end of file +) diff --git a/interface/resources/images/close.svg b/interface/resources/images/close.svg deleted file mode 100644 index 9c573564e6..0000000000 --- a/interface/resources/images/close.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - close - Created with Sketch (http://www.bohemiancoding.com/sketch) - - - - - - - - - - - - \ No newline at end of file diff --git a/interface/resources/images/hifi-interface-tools.svg b/interface/resources/images/hifi-interface-tools.svg deleted file mode 100644 index 311514581f..0000000000 --- a/interface/resources/images/hifi-interface-tools.svg +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/interface/resources/styles/import_dialog.qss b/interface/resources/styles/import_dialog.qss index bb83ce70ed..8fe04ae1b7 100644 --- a/interface/resources/styles/import_dialog.qss +++ b/interface/resources/styles/import_dialog.qss @@ -63,17 +63,17 @@ QPushButton#cancelButton { } #backButton { - background-image: url(resources/icons/backButton.svg); + background-image: url(icons/backButton.svg); border-radius: 0px; } #forwardButton { - background-image: url(resources/icons/forwardButton.svg); + background-image: url(icons/forwardButton.svg); border-radius: 0px; } #toParentButton { - background-image: url(resources/icons/toParentButton.svg); + background-image: url(icons/toParentButton.svg); border-radius: 0px; } diff --git a/interface/resources/styles/log_dialog.qss b/interface/resources/styles/log_dialog.qss index 00f90ca5ed..b7387c1ee7 100644 --- a/interface/resources/styles/log_dialog.qss +++ b/interface/resources/styles/log_dialog.qss @@ -21,7 +21,7 @@ QLineEdit { } QPushButton#searchButton { - background: url(resources/styles/search.svg); + background: url(styles/search.svg); background-repeat: none; background-position: left center; background-origin: content; @@ -33,7 +33,7 @@ QPushButton#searchButton { } QPushButton#revealLogButton { - background: url(resources/styles/txt-file.svg); + background: url(styles/txt-file.svg); background-repeat: none; background-position: left center; background-origin: content; @@ -50,9 +50,9 @@ QCheckBox { } QCheckBox::indicator:unchecked { - image: url(resources/styles/unchecked.svg); + image: url(:/styles/unchecked.svg); } QCheckBox::indicator:checked { - image: url(resources/styles/checked.svg); -} + image: url(:/styles/checked.svg); +} \ No newline at end of file diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8894ccab28..434aa0876f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -118,6 +118,15 @@ void messageHandler(QtMsgType type, const QMessageLogContext& context, const QSt } } +QString& Application::resourcesPath() { +#ifdef Q_OS_MAC + static QString staticResourcePath = QCoreApplication::applicationDirPath() + "/../Resources/"; +#else + static QString staticResourcePath = QCoreApplication::applicationDirPath() + "/resources/"; +#endif + return staticResourcePath; +} + Application::Application(int& argc, char** argv, timeval &startup_time) : QApplication(argc, argv), _window(new QMainWindow(desktop())), @@ -153,10 +162,8 @@ Application::Application(int& argc, char** argv, timeval &startup_time) : _resetRecentMaxPacketsSoon(true), _logger(new FileLogger(this)) { - switchToResourcesParentIfRequired(); - // read the ApplicationInfo.ini file for Name/Version/Domain information - QSettings applicationInfo("resources/info/ApplicationInfo.ini", QSettings::IniFormat); + QSettings applicationInfo(Application::resourcesPath() + "info/ApplicationInfo.ini", QSettings::IniFormat); // set the associated application properties applicationInfo.beginGroup("INFO"); @@ -174,7 +181,7 @@ Application::Application(int& argc, char** argv, timeval &startup_time) : _applicationStartupTime = startup_time; - QFontDatabase::addApplicationFont("resources/styles/Inconsolata.otf"); + QFontDatabase::addApplicationFont(Application::resourcesPath() + "styles/Inconsolata.otf"); _window->setWindowTitle("Interface"); qInstallMessageHandler(messageHandler); @@ -284,9 +291,6 @@ Application::Application(int& argc, char** argv, timeval &startup_time) : restoreSizeAndPosition(); - QFontDatabase fontDatabase; - fontDatabase.addApplicationFont("resources/styles/Inconsolata.otf"); - _window->setVisible(true); _glWidget->setFocusPolicy(Qt::StrongFocus); _glWidget->setFocus(); @@ -1008,10 +1012,6 @@ void Application::mouseMoveEvent(QMouseEvent* event) { _mouseX = event->x(); _mouseY = event->y(); - - if (activeWindow() == _window) { - _pieMenu.mouseMoveEvent(_mouseX, _mouseY); - } } void Application::mousePressEvent(QMouseEvent* event) { @@ -1064,8 +1064,6 @@ void Application::mouseReleaseEvent(QMouseEvent* event) { if (Menu::getInstance()->isOptionChecked(MenuOption::Stats)) { checkStatsClick(); } - - _pieMenu.mouseReleaseEvent(_mouseX, _mouseY); } } } @@ -1570,11 +1568,7 @@ void Application::init() { SIGNAL(particleCollisionWithParticle(const ParticleID&, const ParticleID&, const glm::vec3&)), ScriptEngine::getParticlesScriptingInterface(), SLOT(forwardParticleCollisionWithParticle(const ParticleID&, const ParticleID&, const glm::vec3&))); - - _pieMenu.init("./resources/images/hifi-interface-tools-v2-pie.svg", - _glWidget->width(), - _glWidget->height()); - + _audio.init(_glWidget); _rearMirrorTools = new RearMirrorTools(_glWidget, _mirrorViewRect, _settings); @@ -2176,7 +2170,7 @@ void Application::updateShadowMap() { rotation * (glm::mix(_viewFrustum.getNearBottomLeft(), _viewFrustum.getFarBottomLeft(), farScale) + translation), rotation * (glm::mix(_viewFrustum.getNearBottomRight(), _viewFrustum.getFarBottomRight(), farScale) + translation) }; glm::vec3 minima(FLT_MAX, FLT_MAX, FLT_MAX), maxima(-FLT_MAX, -FLT_MAX, -FLT_MAX); - for (int i = 0; i < sizeof(points) / sizeof(points[0]); i++) { + for (size_t i = 0; i < sizeof(points) / sizeof(points[0]); i++) { minima = glm::min(minima, points[i]); maxima = glm::max(maxima, points[i]); } @@ -2508,10 +2502,6 @@ void Application::displayOverlay() { drawText(_glWidget->width() - 100, _glWidget->height() - timerBottom, 0.30f, 1.0f, 0, frameTimer, WHITE_TEXT); } - if (_pieMenu.isDisplayed()) { - _pieMenu.render(); - } - _overlays.render2D(); glPopMatrix(); @@ -3652,9 +3642,8 @@ void Application::skipVersion(QString latestVersion) { } void Application::takeSnapshot() { - switchToResourcesParentIfRequired(); QMediaPlayer* player = new QMediaPlayer(); - QFileInfo inf = QFileInfo("resources/sounds/snap.wav"); + QFileInfo inf = QFileInfo(Application::resourcesPath() + "sounds/snap.wav"); player->setMedia(QUrl::fromLocalFile(inf.absoluteFilePath())); player->play(); diff --git a/interface/src/Application.h b/interface/src/Application.h index 8c64da86b6..0837ea92e3 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -30,7 +30,6 @@ #include #include "Audio.h" - #include "BandwidthMeter.h" #include "BuckyBalls.h" #include "Camera.h" @@ -43,7 +42,6 @@ #include "MetavoxelSystem.h" #include "PacketHeaders.h" #include "ParticleTreeRenderer.h" -#include "PieMenu.h" #include "Stars.h" #include "ViewFrustum.h" #include "VoxelFade.h" @@ -108,6 +106,7 @@ class Application : public QApplication { public: static Application* getInstance() { return static_cast(QCoreApplication::instance()); } + static QString& resourcesPath(); Application(int& argc, char** argv, timeval &startup_time); ~Application(); @@ -452,8 +451,6 @@ private: StDev _idleLoopStdev; float _idleLoopMeasuredJitter; - PieMenu _pieMenu; - int parseOctreeStats(const QByteArray& packet, const SharedNodePointer& sendingNode); void trackIncomingVoxelPacket(const QByteArray& packet, const SharedNodePointer& sendingNode, bool wasStatsPacket); diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index 66c8dbd5d0..7f6f1bcb05 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -88,9 +88,8 @@ Audio::Audio(Oscilloscope* scope, int16_t initialJitterBufferSamples, QObject* p } void Audio::init(QGLWidget *parent) { - switchToResourcesParentIfRequired(); - _micTextureId = parent->bindTexture(QImage("./resources/images/mic.svg")); - _muteTextureId = parent->bindTexture(QImage("./resources/images/mute.svg")); + _micTextureId = parent->bindTexture(QImage(Application::resourcesPath() + "images/mic.svg")); + _muteTextureId = parent->bindTexture(QImage(Application::resourcesPath() + "images/mute.svg")); } void Audio::reset() { diff --git a/interface/src/BandwidthMeter.cpp b/interface/src/BandwidthMeter.cpp index bd7574dcdc..dfc142fb95 100644 --- a/interface/src/BandwidthMeter.cpp +++ b/interface/src/BandwidthMeter.cpp @@ -131,7 +131,7 @@ void BandwidthMeter::render(int screenWidth, int screenHeight) { // Determine total float totalIn = 0.0f, totalOut = 0.0f; - for (int i = 0; i < N_CHANNELS; ++i) { + for (size_t i = 0; i < N_CHANNELS; ++i) { totalIn += inputStream(ChannelIndex(i)).getValue(); totalOut += outputStream(ChannelIndex(i)).getValue(); @@ -207,7 +207,7 @@ void BandwidthMeter::render(int screenWidth, int screenHeight) { // Render bars int xIn = 0, xOut = 0; - for (int i = 0; i < N_CHANNELS; ++i) { + for (size_t i = 0; i < N_CHANNELS; ++i) { ChannelIndex chIdx = ChannelIndex(i); int wIn = int(barWidth * inputStream(chIdx).getValue() * UNIT_SCALE / scaleMax); @@ -242,7 +242,7 @@ void BandwidthMeter::render(int screenWidth, int screenHeight) { // After rendering, indicate that no data has been sent/received since the last feed. // This way, the meters fall when not continuously fed. - for (int i = 0; i < N_CHANNELS; ++i) { + for (size_t i = 0; i < N_CHANNELS; ++i) { inputStream(ChannelIndex(i)).updateValue(0); outputStream(ChannelIndex(i)).updateValue(0); } diff --git a/interface/src/Environment.cpp b/interface/src/Environment.cpp index 59f16fc5eb..9efaa274c0 100644 --- a/interface/src/Environment.cpp +++ b/interface/src/Environment.cpp @@ -5,6 +5,8 @@ // Created by Andrzej Kapolka on 5/6/13. // Copyright (c) 2013 High Fidelity, Inc. All rights reserved. +#include "InterfaceConfig.h" + #include #include #include @@ -13,11 +15,13 @@ #include #include +#include "Application.h" #include "Camera.h" -#include "Environment.h" #include "renderer/ProgramObject.h" #include "world.h" +#include "Environment.h" + uint qHash(const HifiSockAddr& sockAddr) { if (sockAddr.getAddress().isNull()) { return 0; // shouldn't happen, but if it does, zero is a perfectly valid hash @@ -44,7 +48,6 @@ void Environment::init() { return; } - switchToResourcesParentIfRequired(); _skyFromAtmosphereProgram = createSkyProgram("Atmosphere", _skyFromAtmosphereUniformLocations); _skyFromSpaceProgram = createSkyProgram("Space", _skyFromSpaceUniformLocations); @@ -174,7 +177,7 @@ int Environment::parseData(const HifiSockAddr& senderAddress, const QByteArray& ProgramObject* Environment::createSkyProgram(const char* from, int* locations) { ProgramObject* program = new ProgramObject(); - QByteArray prefix = QByteArray("resources/shaders/SkyFrom") + from; + QByteArray prefix = QString(Application::resourcesPath() + "/shaders/SkyFrom" + from).toUtf8(); program->addShaderFromSourceFile(QGLShader::Vertex, prefix + ".vert"); program->addShaderFromSourceFile(QGLShader::Fragment, prefix + ".frag"); program->link(); diff --git a/interface/src/Environment.h b/interface/src/Environment.h index 273ee54cee..1c9ee578c3 100644 --- a/interface/src/Environment.h +++ b/interface/src/Environment.h @@ -15,7 +15,6 @@ #include #include "EnvironmentData.h" -#include "InterfaceConfig.h" class Camera; class ProgramObject; diff --git a/interface/src/Field.cpp b/interface/src/Field.cpp deleted file mode 100644 index 1f4024653b..0000000000 --- a/interface/src/Field.cpp +++ /dev/null @@ -1,100 +0,0 @@ -// -// Field.cpp -// interface -// -// Created by Philip Rosedale on 8/23/12. -// Copyright (c) 2012 High Fidelity, Inc. All rights reserved. -// -// A vector-valued field over an array of elements arranged as a 3D lattice - -#include "Field.h" - -int Field::value(float *value, float *pos) { - int index = (int)(pos[0] / _worldSize * 10.0) + - (int)(pos[1] / _worldSize * 10.0) * 10 + - (int)(pos[2] / _worldSize * 10.0) * 100; - - if ((index >= 0) && (index < FIELD_ELEMENTS)) { - value[0] = _field[index].val.x; - value[1] = _field[index].val.y; - value[2] = _field[index].val.z; - return 1; - } else { - return 0; - } -} - -Field::Field(float worldSize, float coupling) { - _worldSize = worldSize; - _coupling = coupling; - //float fx, fy, fz; - for (int i = 0; i < FIELD_ELEMENTS; i++) { - const float FIELD_INITIAL_MAG = 0.0f; - _field[i].val = randVector() * FIELD_INITIAL_MAG * _worldSize; - _field[i].center.x = ((float)(i % 10) + 0.5f); - _field[i].center.y = ((float)(i % 100 / 10) + 0.5f); - _field[i].center.z = ((float)(i / 100) + 0.5f); - _field[i].center *= _worldSize / 10.f; - - } -} - -void Field::add(float* add, float *pos) { - int index = (int)(pos[0] / _worldSize * 10.0) + - (int)(pos[1] / _worldSize * 10.0) * 10 + - (int)(pos[2] / _worldSize * 10.0) * 100; - - if ((index >= 0) && (index < FIELD_ELEMENTS)) { - _field[index].val.x += add[0]; - _field[index].val.y += add[1]; - _field[index].val.z += add[2]; - } -} - -void Field::interact(float deltaTime, const glm::vec3& pos, glm::vec3& vel) { - - int index = (int)(pos.x / _worldSize * 10.0) + - (int)(pos.y / _worldSize*10.0) * 10 + - (int)(pos.z / _worldSize*10.0) * 100; - if ((index >= 0) && (index < FIELD_ELEMENTS)) { - vel += _field[index].val * deltaTime; // Particle influenced by field - _field[index].val += vel * deltaTime * _coupling; // Field influenced by particle - } -} - -void Field::simulate(float deltaTime) { - glm::vec3 neighbors, add, diff; - - for (int i = 0; i < FIELD_ELEMENTS; i++) { - const float CONSTANT_DAMPING = 0.5f; - _field[i].val *= (1.f - CONSTANT_DAMPING * deltaTime); - } -} - -void Field::render() { - int i; - float scale_view = 0.05f * _worldSize; - - glDisable(GL_LIGHTING); - glBegin(GL_LINES); - for (i = 0; i < FIELD_ELEMENTS; i++) { - glColor3f(0, 1, 0); - glVertex3fv(&_field[i].center.x); - glVertex3f(_field[i].center.x + _field[i].val.x * scale_view, - _field[i].center.y + _field[i].val.y * scale_view, - _field[i].center.z + _field[i].val.z * scale_view); - } - glEnd(); - - glColor3f(0, 1, 0); - glPointSize(4.0); - glEnable(GL_POINT_SMOOTH); - glBegin(GL_POINTS); - for (i = 0; i < FIELD_ELEMENTS; i++) { - glVertex3fv(&_field[i].center.x); - } - glEnd(); -} - - - diff --git a/interface/src/Field.h b/interface/src/Field.h deleted file mode 100644 index c85c3d33a4..0000000000 --- a/interface/src/Field.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// Field.h -// interface -// -// Created by Philip Rosedale on 8/23/12. -// Copyright (c) 2012 High Fidelity, Inc. All rights reserved. -// - -#ifndef __interface__Field__ -#define __interface__Field__ - -#include -#include -#include "InterfaceConfig.h" -#include "world.h" -#include "Util.h" - -const int FIELD_ELEMENTS = 1000; - -/// Field is a lattice of vectors uniformly distributed in 3D with FIELD_ELEMENTS^(1/3) per side -class Field { -public: - struct FieldElement { - glm::vec3 val; - glm::vec3 center; - glm::vec3 fld; - } _field[FIELD_ELEMENTS]; - - Field(float worldSize, float coupling); - /// The field value at a position in space, given simply as the value of the enclosing cell - int value(float *ret, float *pos); - /// Visualize the field as vector lines drawn at each center - void render(); - /// Add to the field value cell enclosing a location - void add(float* add, float *loc); - /// A particle with a position and velocity interacts with the field given the coupling - /// constant passed when creating the field. - void interact(float deltaTime, const glm::vec3& pos, glm::vec3& vel); - /// Field evolves over timestep - void simulate(float deltaTime); -private: - float _worldSize; - float _coupling; -}; - -#endif diff --git a/interface/src/ImportDialog.cpp b/interface/src/ImportDialog.cpp index 59c8c93f26..2741fada0a 100644 --- a/interface/src/ImportDialog.cpp +++ b/interface/src/ImportDialog.cpp @@ -5,7 +5,8 @@ // Created by Clement Brisset on 8/12/13. // Copyright (c) 2013 High Fidelity, Inc. All rights reserved. // -#include "ImportDialog.h" + +#include "InterfaceConfig.h" #include #include @@ -14,6 +15,10 @@ #include #include +#include "Application.h" + +#include "ImportDialog.h" + const QString WINDOW_NAME = QObject::tr("Import Voxels"); const QString IMPORT_BUTTON_NAME = QObject::tr("Import Voxels"); const QString LOADING_BUTTON_NAME = QObject::tr("Loading ..."); @@ -27,8 +32,6 @@ const int SECOND_INDEX_LETTER = 1; QIcon HiFiIconProvider::icon(QFileIconProvider::IconType type) const { - switchToResourcesParentIfRequired(); - // types // Computer, Desktop, Trashcan, Network, Drive, Folder, File QString typeString; @@ -54,30 +57,29 @@ QIcon HiFiIconProvider::icon(QFileIconProvider::IconType type) const { break; } - return QIcon("resources/icons/" + typeString + ".svg"); + return QIcon(Application::resourcesPath() + "icons/" + typeString + ".svg"); } QIcon HiFiIconProvider::icon(const QFileInfo &info) const { - switchToResourcesParentIfRequired(); const QString ext = info.suffix().toLower(); if (info.isDir()) { if (info.absoluteFilePath() == QDir::homePath()) { - return QIcon("resources/icons/home.svg"); + return QIcon(Application::resourcesPath() + "icons/home.svg"); } else if (info.absoluteFilePath() == QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)) { - return QIcon("resources/icons/desktop.svg"); + return QIcon(Application::resourcesPath() + "icons/desktop.svg"); } else if (info.absoluteFilePath() == QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)) { - return QIcon("resources/icons/documents.svg"); + return QIcon(Application::resourcesPath() + "icons/documents.svg"); } - return QIcon("resources/icons/folder.svg"); + return QIcon(Application::resourcesPath() + "icons/folder.svg"); } - QFileInfo iconFile("resources/icons/" + iconsMap[ext]); + QFileInfo iconFile(Application::resourcesPath() + "icons/" + iconsMap[ext]); if (iconFile.exists() && iconFile.isFile()) { return QIcon(iconFile.filePath()); } - return QIcon("resources/icons/file.svg"); + return QIcon(Application::resourcesPath() + "icons/file.svg"); } QString HiFiIconProvider::type(const QFileInfo &info) const { @@ -245,18 +247,16 @@ void ImportDialog::setLayout() { widget = findChild("treeView"); widget->setAttribute(Qt::WA_MacShowFocusRect, false); - switchToResourcesParentIfRequired(); - QFile styleSheet("resources/styles/import_dialog.qss"); + QFile styleSheet(Application::resourcesPath() + "styles/import_dialog.qss"); if (styleSheet.open(QIODevice::ReadOnly)) { + QDir::setCurrent(Application::resourcesPath()); setStyleSheet(styleSheet.readAll()); } } void ImportDialog::setImportTypes() { - - switchToResourcesParentIfRequired(); - QFile config("resources/config/config.json"); + QFile config(Application::resourcesPath() + "config/config.json"); config.open(QFile::ReadOnly | QFile::Text); QJsonDocument document = QJsonDocument::fromJson(config.readAll()); if (!document.isNull() && !document.isEmpty()) { diff --git a/interface/src/ImportDialog.h b/interface/src/ImportDialog.h index 910cd8f789..278fac932d 100644 --- a/interface/src/ImportDialog.h +++ b/interface/src/ImportDialog.h @@ -9,6 +9,8 @@ #ifndef __hifi__ImportDialog__ #define __hifi__ImportDialog__ +#include "InterfaceConfig.h" + #include #include #include diff --git a/interface/src/InfoView.cpp b/interface/src/InfoView.cpp index 8de171deef..fbf63666d8 100644 --- a/interface/src/InfoView.cpp +++ b/interface/src/InfoView.cpp @@ -18,12 +18,11 @@ #define MAX_DIALOG_HEIGHT_RATIO 0.9 InfoView::InfoView(bool forced) : - _forced(forced) { - + _forced(forced) +{ setWindowFlags(Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint); - switchToResourcesParentIfRequired(); - QString absPath = QFileInfo("resources/html/interface-welcome-allsvg.html").absoluteFilePath(); + QString absPath = QFileInfo(Application::resourcesPath() + "html/interface-welcome-allsvg.html").absoluteFilePath(); QUrl url = QUrl::fromLocalFile(absPath); load(url); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 8c6cdacae1..0586382cb9 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -1320,17 +1320,25 @@ void Menu::addSeparator(const QString& menuName, const QString& separatorName) { void Menu::removeSeparator(const QString& menuName, const QString& separatorName) { QMenu* menu = getMenu(menuName); + bool separatorRemoved = false; if (menu) { int textAt = findPositionOfMenuItem(menu, separatorName); QList menuActions = menu->actions(); QAction* separatorText = menuActions[textAt]; - QAction* separatorLine = menuActions[textAt - 1]; - if (separatorLine->isSeparator()) { - menu->removeAction(separatorText); - menu->removeAction(separatorLine); + if (textAt > 0 && textAt < menuActions.size()) { + QAction* separatorLine = menuActions[textAt - 1]; + if (separatorLine) { + if (separatorLine->isSeparator()) { + menu->removeAction(separatorText); + menu->removeAction(separatorLine); + separatorRemoved = true; + } + } } } - QMenuBar::repaint(); + if (separatorRemoved) { + QMenuBar::repaint(); + } } void Menu::addMenuItem(const MenuItemProperties& properties) { diff --git a/interface/src/MetavoxelSystem.cpp b/interface/src/MetavoxelSystem.cpp index eeb92be5ec..41b4dde73e 100644 --- a/interface/src/MetavoxelSystem.cpp +++ b/interface/src/MetavoxelSystem.cpp @@ -30,8 +30,7 @@ MetavoxelSystem::MetavoxelSystem() : void MetavoxelSystem::init() { if (!_program.isLinked()) { - switchToResourcesParentIfRequired(); - _program.addShaderFromSourceFile(QGLShader::Vertex, "resources/shaders/metavoxel_point.vert"); + _program.addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + "shaders/metavoxel_point.vert"); _program.link(); _pointScaleLocation = _program.uniformLocation("pointScale"); diff --git a/interface/src/PieMenu.cpp b/interface/src/PieMenu.cpp deleted file mode 100644 index d62d0447e1..0000000000 --- a/interface/src/PieMenu.cpp +++ /dev/null @@ -1,137 +0,0 @@ -// -// PieMenu.cpp -// hifi -// -// Created by Clement Brisset on 7/18/13. -// Copyright (c) 2013 High Fidelity, Inc. All rights reserved. -// - -#include "PieMenu.h" - -#include - -#include -#include -#include -#include -#include - -PieMenu::PieMenu() : - _radiusIntern(30), - _radiusExtern(70), - _magnification(1.2f), - _isDisplayed(false) { -} - -void PieMenu::init(const char *fileName, int screenWidth, int screenHeight) { - // Load SVG - switchToResourcesParentIfRequired(); - QSvgRenderer renderer((QString) QString(fileName)); - - // Prepare a QImage with desired characteritisc - QImage image(2 * _radiusExtern, 2 * _radiusExtern, QImage::Format_ARGB32); - image.fill(0x0); - - // Get QPainter that paints to the image - QPainter painter(&image); - renderer.render(&painter); - - //get the OpenGL-friendly image - _textureImage = QGLWidget::convertToGLFormat(image); - - glGenTextures(1, &_textureID); - glBindTexture(GL_TEXTURE_2D, _textureID); - - //generate the texture - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, - _textureImage.width(), - _textureImage.height(), - 0, GL_RGBA, GL_UNSIGNED_BYTE, - _textureImage.bits()); - - //texture parameters - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); -} - -void PieMenu::addAction(QAction* action){ - _actions.push_back(action); -} - -void PieMenu::render() { - if (_actions.size() == 0) { - return; - } - - float start = (float)M_PI / 2.0f; - float end = start + 2.0f * (float)M_PI; - float step = 2.0f * (float)M_PI / 100.0f; - float distance = sqrt((float)(_mouseX - _x) * (_mouseX - _x) + (_mouseY - _y) * (_mouseY - _y)); - - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, _textureID); - - glColor3f(1.0f, 1.0f, 1.0f); - - if (_radiusIntern < distance) { - float angle = atan2((float)(_mouseY - _y), (float)(_mouseX - _x)) - start; - angle = (0.0f < angle) ? angle : angle + 2.0f * M_PI; - - _selectedAction = floor(angle / (2.0f * M_PI / _actions.size())); - - start = start + _selectedAction * 2.0f * M_PI / _actions.size(); - end = start + 2.0f * M_PI / _actions.size(); - glBegin(GL_TRIANGLE_FAN); - glTexCoord2f(0.5f, 0.5f); - glVertex2f(_x, _y); - for (float i = start; i < end; i += step) { - glTexCoord2f(0.5f + 0.5f * cos(i), 0.5f - 0.5f * sin(i)); - glVertex2f(_x + _magnification * _radiusExtern * cos(i), - _y + _magnification * _radiusExtern * sin(i)); - } - glTexCoord2f(0.5f + 0.5f * cos(end), 0.5f + - 0.5f * sin(end)); - glVertex2f(_x + _magnification * _radiusExtern * cos(end), - _y + _magnification * _radiusExtern * sin(end)); - glEnd(); - } else { - _selectedAction = -1; - - glBegin(GL_QUADS); - glTexCoord2f(1, 1); - glVertex2f(_x + _radiusExtern, _y - _radiusExtern); - - glTexCoord2f(1, 0); - glVertex2f(_x + _radiusExtern, _y + _radiusExtern); - - glTexCoord2f(0, 0); - glVertex2f(_x - _radiusExtern, _y + _radiusExtern); - - glTexCoord2f(0, 1); - glVertex2f(_x - _radiusExtern, _y - _radiusExtern); - glEnd(); - } - glDisable(GL_TEXTURE_2D); -} - -void PieMenu::resize(int screenWidth, int screenHeight) { -} - -void PieMenu::mouseMoveEvent(int x, int y) { - _mouseX = x; - _mouseY = y; -} - -void PieMenu::mousePressEvent(int x, int y) { - _x = _mouseX = x; - _y = _mouseY = y; - _selectedAction = -1; - _isDisplayed = true; -} - -void PieMenu::mouseReleaseEvent(int x, int y) { - if (0 <= _selectedAction && _selectedAction < (int)_actions.size() && _actions[_selectedAction]) { - _actions[_selectedAction]->trigger(); - } - - _isDisplayed = false; -} diff --git a/interface/src/PieMenu.h b/interface/src/PieMenu.h deleted file mode 100644 index f80f94f5d4..0000000000 --- a/interface/src/PieMenu.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// PieMenu.h -// hifi -// -// Created by Clement Brisset on 7/18/13. -// Copyright (c) 2013 High Fidelity, Inc. All rights reserved. -// - -#ifndef __hifi__PieMenu__ -#define __hifi__PieMenu__ - -#include - -#include "InterfaceConfig.h" -#include "Util.h" - -#include - -class QAction; - -class PieMenu { -public: - PieMenu(); - - void init(const char* fileName, int screenWidth, int screenHeight); - void addAction(QAction* action); - void render(); - void resize(int screenWidth, int screenHeight); - - bool isDisplayed() const {return _isDisplayed;} - int getX () const {return _x;} - int getY () const {return _y;} - - void mouseMoveEvent (int x, int y); - void mousePressEvent (int x, int y); - void mouseReleaseEvent(int x, int y); - -private: - QImage _textureImage; - GLuint _textureID; - - // position of the menu - int _x; - int _y; - int _radiusIntern; - int _radiusExtern; - float _magnification; - - int _mouseX; - int _mouseY; - - int _selectedAction; - - bool _isDisplayed; - - std::vector _actions; -}; - -#endif /* defined(__hifi__PieMenu__) */ diff --git a/interface/src/VoxelSystem.cpp b/interface/src/VoxelSystem.cpp index 1d5a238622..aa628bac7b 100644 --- a/interface/src/VoxelSystem.cpp +++ b/interface/src/VoxelSystem.cpp @@ -496,16 +496,18 @@ void VoxelSystem::initVoxelMemory() { // create our simple fragment shader if we're the first system to init if (!_perlinModulateProgram.isLinked()) { - switchToResourcesParentIfRequired(); - _perlinModulateProgram.addShaderFromSourceFile(QGLShader::Vertex, "resources/shaders/perlin_modulate.vert"); - _perlinModulateProgram.addShaderFromSourceFile(QGLShader::Fragment, "resources/shaders/perlin_modulate.frag"); + _perlinModulateProgram.addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + + "shaders/perlin_modulate.vert"); + _perlinModulateProgram.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + + "shaders/perlin_modulate.frag"); _perlinModulateProgram.link(); _perlinModulateProgram.bind(); _perlinModulateProgram.setUniformValue("permutationNormalTexture", 0); _perlinModulateProgram.release(); - _shadowMapProgram.addShaderFromSourceFile(QGLShader::Fragment, "resources/shaders/shadow_map.frag"); + _shadowMapProgram.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + + "shaders/shadow_map.frag"); _shadowMapProgram.link(); _shadowMapProgram.bind(); diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 7cdc6cfb79..9acef32acb 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -577,13 +577,13 @@ bool Avatar::findParticleCollisions(const glm::vec3& particleCenter, float parti void Avatar::setFaceModelURL(const QUrl& faceModelURL) { AvatarData::setFaceModelURL(faceModelURL); - const QUrl DEFAULT_FACE_MODEL_URL = QUrl::fromLocalFile("resources/meshes/defaultAvatar_head.fst"); + const QUrl DEFAULT_FACE_MODEL_URL = QUrl::fromLocalFile(Application::resourcesPath() + "meshes/defaultAvatar_head.fst"); getHead()->getFaceModel().setURL(_faceModelURL, DEFAULT_FACE_MODEL_URL, true, !isMyAvatar()); } void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { AvatarData::setSkeletonModelURL(skeletonModelURL); - const QUrl DEFAULT_SKELETON_MODEL_URL = QUrl::fromLocalFile("resources/meshes/defaultAvatar_body.fst"); + const QUrl DEFAULT_SKELETON_MODEL_URL = QUrl::fromLocalFile(Application::resourcesPath() + "meshes/defaultAvatar_body.fst"); _skeletonModel.setURL(_skeletonModelURL, DEFAULT_SKELETON_MODEL_URL, true, !isMyAvatar()); } diff --git a/interface/src/avatar/Hand.cpp b/interface/src/avatar/Hand.cpp index ce2f2a242e..8f003d32d5 100644 --- a/interface/src/avatar/Hand.cpp +++ b/interface/src/avatar/Hand.cpp @@ -57,8 +57,7 @@ void Hand::simulate(float deltaTime, bool isMine) { } } -void Hand::playSlaps(PalmData& palm, Avatar* avatar) -{ +void Hand::playSlaps(PalmData& palm, Avatar* avatar) { // Check for palm collisions glm::vec3 myPalmPosition = palm.getPosition(); float palmCollisionDistance = 0.1f; diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 29416546a6..3a00648eb1 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -103,9 +103,8 @@ void MyAvatar::update(float deltaTime) { // Update head mouse from faceshift if active Faceshift* faceshift = Application::getInstance()->getFaceshift(); if (faceshift->isActive()) { - glm::vec3 headVelocity = faceshift->getHeadAngularVelocity(); - // TODO? resurrect headMouse stuff? + //glm::vec3 headVelocity = faceshift->getHeadAngularVelocity(); //// sets how quickly head angular rotation moves the head mouse //const float HEADMOUSE_FACESHIFT_YAW_SCALE = 40.f; //const float HEADMOUSE_FACESHIFT_PITCH_SCALE = 30.f; @@ -923,10 +922,13 @@ void MyAvatar::updateCollisionWithAvatars(float deltaTime) { // HACK: body-body collision uses two coaxial capsules with axes parallel to y-axis // TODO: make the collision work without assuming avatar orientation - Extents myStaticExtents = _skeletonModel.getStaticExtents(); - glm::vec3 staticScale = myStaticExtents.maximum - myStaticExtents.minimum; - float myCapsuleRadius = 0.25f * (staticScale.x + staticScale.z); - float myCapsuleHeight = staticScale.y; + + // TODO: these local variables are not used in the live code, only in the + // commented-outTODO code below. + //Extents myStaticExtents = _skeletonModel.getStaticExtents(); + //glm::vec3 staticScale = myStaticExtents.maximum - myStaticExtents.minimum; + //float myCapsuleRadius = 0.25f * (staticScale.x + staticScale.z); + //float myCapsuleHeight = staticScale.y; CollisionInfo collisionInfo; foreach (const AvatarSharedPointer& avatarPointer, avatars) { diff --git a/interface/src/devices/OculusManager.cpp b/interface/src/devices/OculusManager.cpp index 65c0d9332f..0f937995b9 100644 --- a/interface/src/devices/OculusManager.cpp +++ b/interface/src/devices/OculusManager.cpp @@ -57,8 +57,7 @@ void OculusManager::connect() { _hmdDevice->GetDeviceInfo(&info); _stereoConfig.SetHMDInfo(info); - switchToResourcesParentIfRequired(); - _program.addShaderFromSourceFile(QGLShader::Fragment, "resources/shaders/oculus.frag"); + _program.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + "shaders/oculus.frag"); _program.link(); _textureLocation = _program.uniformLocation("texture"); diff --git a/interface/src/devices/Visage.cpp b/interface/src/devices/Visage.cpp index f9d3f89552..348858bf3b 100644 --- a/interface/src/devices/Visage.cpp +++ b/interface/src/devices/Visage.cpp @@ -36,10 +36,9 @@ Visage::Visage() : _estimatedEyeYaw(0.0f) { #ifdef HAVE_VISAGE - switchToResourcesParentIfRequired(); - QByteArray licensePath = "resources/visage/license.vlc"; + QByteArray licensePath = Application::resourcesPath() + "visage/license.vlc"; initializeLicenseManager(licensePath.data()); - _tracker = new VisageTracker2("resources/visage/Facial Features Tracker - Asymmetric.cfg"); + _tracker = new VisageTracker2(Application::resourcesPath() + "visage/Facial Features Tracker - Asymmetric.cfg"); if (_tracker->trackFromCam()) { _data = new FaceData(); diff --git a/interface/src/renderer/AmbientOcclusionEffect.cpp b/interface/src/renderer/AmbientOcclusionEffect.cpp index d6848453ec..a492552e7c 100644 --- a/interface/src/renderer/AmbientOcclusionEffect.cpp +++ b/interface/src/renderer/AmbientOcclusionEffect.cpp @@ -15,21 +15,22 @@ #include -#include "AmbientOcclusionEffect.h" #include "Application.h" -#include "InterfaceConfig.h" #include "ProgramObject.h" #include "RenderUtil.h" +#include "AmbientOcclusionEffect.h" + const int ROTATION_WIDTH = 4; const int ROTATION_HEIGHT = 4; void AmbientOcclusionEffect::init() { - switchToResourcesParentIfRequired(); _occlusionProgram = new ProgramObject(); - _occlusionProgram->addShaderFromSourceFile(QGLShader::Vertex, "resources/shaders/ambient_occlusion.vert"); - _occlusionProgram->addShaderFromSourceFile(QGLShader::Fragment, "resources/shaders/ambient_occlusion.frag"); + _occlusionProgram->addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + + "shaders/ambient_occlusion.vert"); + _occlusionProgram->addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + + "shaders/ambient_occlusion.frag"); _occlusionProgram->link(); // create the sample kernel: an array of spherically distributed offset vectors @@ -78,8 +79,8 @@ void AmbientOcclusionEffect::init() { glBindTexture(GL_TEXTURE_2D, 0); _blurProgram = new ProgramObject(); - _blurProgram->addShaderFromSourceFile(QGLShader::Vertex, "resources/shaders/ambient_occlusion.vert"); - _blurProgram->addShaderFromSourceFile(QGLShader::Fragment, "resources/shaders/occlusion_blur.frag"); + _blurProgram->addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + "shaders/ambient_occlusion.vert"); + _blurProgram->addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + "shaders/occlusion_blur.frag"); _blurProgram->link(); _blurProgram->bind(); diff --git a/interface/src/renderer/AmbientOcclusionEffect.h b/interface/src/renderer/AmbientOcclusionEffect.h index dba9a97202..e56164bad4 100644 --- a/interface/src/renderer/AmbientOcclusionEffect.h +++ b/interface/src/renderer/AmbientOcclusionEffect.h @@ -9,8 +9,6 @@ #ifndef __interface__AmbientOcclusionEffect__ #define __interface__AmbientOcclusionEffect__ -#include "InterfaceConfig.h" - class ProgramObject; /// A screen space ambient occlusion effect. See John Chapman's tutorial at diff --git a/interface/src/renderer/GlowEffect.cpp b/interface/src/renderer/GlowEffect.cpp index 967f803d61..f926a81941 100644 --- a/interface/src/renderer/GlowEffect.cpp +++ b/interface/src/renderer/GlowEffect.cpp @@ -42,7 +42,7 @@ QOpenGLFramebufferObject* GlowEffect::getFreeFramebufferObject() const { static ProgramObject* createProgram(const QString& name) { ProgramObject* program = new ProgramObject(); - program->addShaderFromSourceFile(QGLShader::Fragment, "resources/shaders/" + name + ".frag"); + program->addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + "shaders/" + name + ".frag"); program->link(); program->bind(); @@ -57,8 +57,6 @@ void GlowEffect::init() { qDebug("[ERROR] GlowEffeect is already initialized."); return; } - - switchToResourcesParentIfRequired(); _addProgram = createProgram("glow_add"); _horizontalBlurProgram = createProgram("horizontal_blur"); diff --git a/interface/src/renderer/Model.cpp b/interface/src/renderer/Model.cpp index e1fede84d1..c4e927dce5 100644 --- a/interface/src/renderer/Model.cpp +++ b/interface/src/renderer/Model.cpp @@ -64,17 +64,18 @@ QVector Model::createJointStates(const FBXGeometry& geometry) void Model::init() { if (!_program.isLinked()) { - switchToResourcesParentIfRequired(); - _program.addShaderFromSourceFile(QGLShader::Vertex, "resources/shaders/model.vert"); - _program.addShaderFromSourceFile(QGLShader::Fragment, "resources/shaders/model.frag"); + _program.addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + "shaders/model.vert"); + _program.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + "shaders/model.frag"); _program.link(); _program.bind(); _program.setUniformValue("texture", 0); _program.release(); - _normalMapProgram.addShaderFromSourceFile(QGLShader::Vertex, "resources/shaders/model_normal_map.vert"); - _normalMapProgram.addShaderFromSourceFile(QGLShader::Fragment, "resources/shaders/model_normal_map.frag"); + _normalMapProgram.addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + + "shaders/model_normal_map.vert"); + _normalMapProgram.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + + "shaders/model_normal_map.frag"); _normalMapProgram.link(); _normalMapProgram.bind(); @@ -83,14 +84,18 @@ void Model::init() { _normalMapTangentLocation = _normalMapProgram.attributeLocation("tangent"); _normalMapProgram.release(); - _skinProgram.addShaderFromSourceFile(QGLShader::Vertex, "resources/shaders/skin_model.vert"); - _skinProgram.addShaderFromSourceFile(QGLShader::Fragment, "resources/shaders/model.frag"); + _skinProgram.addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + + "shaders/skin_model.vert"); + _skinProgram.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + + "shaders/model.frag"); _skinProgram.link(); initSkinProgram(_skinProgram, _skinLocations); - _skinNormalMapProgram.addShaderFromSourceFile(QGLShader::Vertex, "resources/shaders/skin_model_normal_map.vert"); - _skinNormalMapProgram.addShaderFromSourceFile(QGLShader::Fragment, "resources/shaders/model_normal_map.frag"); + _skinNormalMapProgram.addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + + "shaders/skin_model_normal_map.vert"); + _skinNormalMapProgram.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + + "shaders/model_normal_map.frag"); _skinNormalMapProgram.link(); initSkinProgram(_skinNormalMapProgram, _skinNormalMapLocations); diff --git a/interface/src/renderer/PointShader.cpp b/interface/src/renderer/PointShader.cpp index ed4225fbcd..6dd4aae485 100644 --- a/interface/src/renderer/PointShader.cpp +++ b/interface/src/renderer/PointShader.cpp @@ -29,7 +29,7 @@ PointShader::~PointShader() { ProgramObject* PointShader::createPointShaderProgram(const QString& name) { ProgramObject* program = new ProgramObject(); - program->addShaderFromSourceFile(QGLShader::Vertex, "resources/shaders/" + name + ".vert" ); + program->addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + "shaders/" + name + ".vert" ); program->link(); return program; } @@ -39,7 +39,6 @@ void PointShader::init() { qDebug("[ERROR] PointShader is already initialized."); return; } - switchToResourcesParentIfRequired(); _program = createPointShaderProgram("point_size"); _initialized = true; } diff --git a/interface/src/renderer/TextureCache.cpp b/interface/src/renderer/TextureCache.cpp index e86183e859..9f67b3bd0b 100644 --- a/interface/src/renderer/TextureCache.cpp +++ b/interface/src/renderer/TextureCache.cpp @@ -107,7 +107,6 @@ GLuint TextureCache::getBlueTextureID() { GLuint TextureCache::getFileTextureID(const QString& filename) { GLuint id = _fileTextureIDs.value(filename); if (id == 0) { - switchToResourcesParentIfRequired(); QImage image = QImage(filename).convertToFormat(QImage::Format_ARGB32); glGenTextures(1, &id); diff --git a/interface/src/renderer/VoxelShader.cpp b/interface/src/renderer/VoxelShader.cpp index b630006b4b..fab40fc338 100644 --- a/interface/src/renderer/VoxelShader.cpp +++ b/interface/src/renderer/VoxelShader.cpp @@ -29,8 +29,8 @@ VoxelShader::~VoxelShader() { ProgramObject* VoxelShader::createGeometryShaderProgram(const QString& name) { ProgramObject* program = new ProgramObject(); - program->addShaderFromSourceFile(QGLShader::Vertex, "resources/shaders/passthrough.vert" ); - program->addShaderFromSourceFile(QGLShader::Geometry, "resources/shaders/" + name + ".geom" ); + program->addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + "shaders/passthrough.vert" ); + program->addShaderFromSourceFile(QGLShader::Geometry, Application::resourcesPath() + "shaders/" + name + ".geom" ); program->setGeometryInputType(GL_POINTS); program->setGeometryOutputType(GL_TRIANGLE_STRIP); const int VERTICES_PER_FACE = 4; @@ -46,7 +46,7 @@ void VoxelShader::init() { qDebug("[ERROR] TestProgram is already initialized."); return; } - switchToResourcesParentIfRequired(); + _program = createGeometryShaderProgram("voxel"); _initialized = true; } diff --git a/interface/src/ui/LogDialog.cpp b/interface/src/ui/LogDialog.cpp index 474b4f034e..d219c08698 100644 --- a/interface/src/ui/LogDialog.cpp +++ b/interface/src/ui/LogDialog.cpp @@ -6,11 +6,16 @@ // Copyright (c) 2013 High Fidelity, Inc. All rights reserved. // +#include "InterfaceConfig.h" + #include #include #include -#include "SharedUtil.h" +#include + +#include "Application.h" + #include "ui/LogDialog.h" const int TOP_BAR_HEIGHT = 46; @@ -36,9 +41,9 @@ LogDialog::LogDialog(QWidget* parent, AbstractLoggerInterface* logger) : QDialog setWindowTitle("Log"); setAttribute(Qt::WA_DeleteOnClose); - switchToResourcesParentIfRequired(); - QFile styleSheet("resources/styles/log_dialog.qss"); + QFile styleSheet(Application::resourcesPath() + "styles/log_dialog.qss"); if (styleSheet.open(QIODevice::ReadOnly)) { + QDir::setCurrent(Application::resourcesPath()); setStyleSheet(styleSheet.readAll()); } diff --git a/interface/src/ui/LogDialog.h b/interface/src/ui/LogDialog.h index 17216db0c4..5138e231c7 100644 --- a/interface/src/ui/LogDialog.h +++ b/interface/src/ui/LogDialog.h @@ -9,6 +9,8 @@ #ifndef __interface__LogDialog__ #define __interface__LogDialog__ +#include "InterfaceConfig.h" + #include #include #include diff --git a/interface/src/ui/MetavoxelEditor.cpp b/interface/src/ui/MetavoxelEditor.cpp index bb55620edd..0c6c12d868 100644 --- a/interface/src/ui/MetavoxelEditor.cpp +++ b/interface/src/ui/MetavoxelEditor.cpp @@ -113,8 +113,8 @@ MetavoxelEditor::MetavoxelEditor() : if (_gridProgram.isLinked()) { return; } - switchToResourcesParentIfRequired(); - _gridProgram.addShaderFromSourceFile(QGLShader::Fragment, "resources/shaders/grid.frag"); + + _gridProgram.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + "shaders/grid.frag"); _gridProgram.link(); } diff --git a/interface/src/ui/RearMirrorTools.cpp b/interface/src/ui/RearMirrorTools.cpp index b090987fa0..314fd7157b 100644 --- a/interface/src/ui/RearMirrorTools.cpp +++ b/interface/src/ui/RearMirrorTools.cpp @@ -5,11 +5,16 @@ // Created by stojce on 23.10.2013. // Copyright (c) 2013 High Fidelity, Inc. All rights reserved. -#include "RearMirrorTools.h" -#include "Util.h" +#include "InterfaceConfig.h" + +#include #include -#include + +#include "Application.h" +#include "Util.h" + +#include "RearMirrorTools.h" const char SETTINGS_GROUP_NAME[] = "Rear View Tools"; const char ZOOM_LEVEL_SETTINGS[] = "ZoomLevel"; @@ -23,12 +28,11 @@ RearMirrorTools::RearMirrorTools(QGLWidget* parent, QRect& bounds, QSettings* se _windowed(false), _fullScreen(false) { - _zoomLevel = HEAD, - switchToResourcesParentIfRequired(); - _closeTextureId = _parent->bindTexture(QImage("./resources/images/close.png")); - _resetTextureId = _parent->bindTexture(QImage("./resources/images/reset.png")); - _zoomHeadTextureId = _parent->bindTexture(QImage("./resources/images/head.png")); - _zoomBodyTextureId = _parent->bindTexture(QImage("./resources/images/body.png")); + _zoomLevel = HEAD; + _closeTextureId = _parent->bindTexture(QImage(Application::resourcesPath() + "images/close.png")); + _resetTextureId = _parent->bindTexture(QImage(Application::resourcesPath() + "images/reset.png")); + _zoomHeadTextureId = _parent->bindTexture(QImage(Application::resourcesPath() + "images/head.png")); + _zoomBodyTextureId = _parent->bindTexture(QImage(Application::resourcesPath() + "images/body.png")); _shrinkIconRect = QRect(ICON_PADDING, ICON_PADDING, ICON_SIZE, ICON_SIZE); _closeIconRect = QRect(_bounds.left() + ICON_PADDING, _bounds.top() + ICON_PADDING, ICON_SIZE, ICON_SIZE); diff --git a/libraries/avatars/src/HandData.cpp b/libraries/avatars/src/HandData.cpp index e4bb187f28..0355a4c86b 100644 --- a/libraries/avatars/src/HandData.cpp +++ b/libraries/avatars/src/HandData.cpp @@ -178,7 +178,7 @@ int HandData::decodeRemoteData(const QByteArray& dataByteArray) { unsigned int numPalms = *sourceBuffer++; for (unsigned int handIndex = 0; handIndex < numPalms; ++handIndex) { - if (handIndex >= getNumPalms()) + if (handIndex >= (unsigned int)getNumPalms()) addNewPalm(); PalmData& palm = getPalms()[handIndex]; @@ -196,7 +196,7 @@ int HandData::decodeRemoteData(const QByteArray& dataByteArray) { palm.setSixenseID(handIndex); for (unsigned int fingerIndex = 0; fingerIndex < numFingers; ++fingerIndex) { - if (fingerIndex < palm.getNumFingers()) { + if (fingerIndex < (unsigned int)palm.getNumFingers()) { FingerData& finger = palm.getFingers()[fingerIndex]; glm::vec3 tipPosition; diff --git a/libraries/octree/src/AABox.cpp b/libraries/octree/src/AABox.cpp index 1313111765..97fd706c21 100644 --- a/libraries/octree/src/AABox.cpp +++ b/libraries/octree/src/AABox.cpp @@ -335,7 +335,7 @@ glm::vec3 AABox::getClosestPointOnFace(const glm::vec4& origin, const glm::vec4& secondAxisMaxPlane + thirdAxisMaxPlane + offset }; float minDistance = FLT_MAX; - for (int i = 0; i < sizeof(diagonals) / sizeof(diagonals[0]); i++) { + for (size_t i = 0; i < sizeof(diagonals) / sizeof(diagonals[0]); i++) { float divisor = glm::dot(direction, diagonals[i]); if (fabs(divisor) < EPSILON) { continue; // segment is parallel to diagonal plane diff --git a/libraries/octree/src/JurisdictionMap.cpp b/libraries/octree/src/JurisdictionMap.cpp index 6dc5a22e73..0271c77012 100644 --- a/libraries/octree/src/JurisdictionMap.cpp +++ b/libraries/octree/src/JurisdictionMap.cpp @@ -50,7 +50,7 @@ void JurisdictionMap::copyContents(unsigned char* rootCodeIn, const std::vector< unsigned char* rootCode; std::vector endNodes; if (rootCodeIn) { - int bytes = bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(rootCodeIn)); + size_t bytes = bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(rootCodeIn)); rootCode = new unsigned char[bytes]; memcpy(rootCode, rootCodeIn, bytes); } else { @@ -60,7 +60,7 @@ void JurisdictionMap::copyContents(unsigned char* rootCodeIn, const std::vector< for (size_t i = 0; i < endNodesIn.size(); i++) { if (endNodesIn[i]) { - int bytes = bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(endNodesIn[i])); + size_t bytes = bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(endNodesIn[i])); unsigned char* endNodeCode = new unsigned char[bytes]; memcpy(endNodeCode, endNodesIn[i], bytes); endNodes.push_back(endNodeCode); @@ -133,7 +133,7 @@ void myDebugPrintOctalCode(const unsigned char* octalCode, bool withNewLine) { if (!octalCode) { printf("NULL"); } else { - for (int i = 0; i < bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(octalCode)); i++) { + for (size_t i = 0; i < bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(octalCode)); i++) { myDebugoutputBits(octalCode[i],false); } } @@ -293,7 +293,7 @@ int JurisdictionMap::packIntoMessage(unsigned char* destinationBuffer, int avail // add the root jurisdiction if (_rootOctalCode) { - int bytes = bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(_rootOctalCode)); + size_t bytes = bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(_rootOctalCode)); memcpy(destinationBuffer, &bytes, sizeof(bytes)); destinationBuffer += sizeof(bytes); memcpy(destinationBuffer, _rootOctalCode, bytes); @@ -306,7 +306,7 @@ int JurisdictionMap::packIntoMessage(unsigned char* destinationBuffer, int avail for (int i=0; i < endNodeCount; i++) { unsigned char* endNodeCode = _endNodes[i]; - int bytes = 0; + size_t bytes = 0; if (endNodeCode) { bytes = bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(endNodeCode)); } diff --git a/libraries/octree/src/Octree.cpp b/libraries/octree/src/Octree.cpp index 3e7e5dd3c1..f85ed7f487 100644 --- a/libraries/octree/src/Octree.cpp +++ b/libraries/octree/src/Octree.cpp @@ -222,10 +222,8 @@ int Octree::readNodeData(OctreeElement* destinationNode, const unsigned char* no } OctreeElement* childNodeAt = destinationNode->getChildAtIndex(i); - bool nodeWasDirty = false; bool nodeIsDirty = false; if (childNodeAt) { - nodeWasDirty = childNodeAt->isDirty(); bytesRead += childNodeAt->readElementDataFromBuffer(nodeData + bytesRead, bytesLeftToRead, args); childNodeAt->setSourceUUID(args.sourceUUID); diff --git a/libraries/octree/src/OctreeElement.cpp b/libraries/octree/src/OctreeElement.cpp index 67b96b4047..72ac5b14d6 100644 --- a/libraries/octree/src/OctreeElement.cpp +++ b/libraries/octree/src/OctreeElement.cpp @@ -44,7 +44,7 @@ void OctreeElement::init(unsigned char * octalCode) { _voxelNodeLeafCount++; // all nodes start as leaf nodes - int octalCodeLength = bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(octalCode)); + size_t octalCodeLength = bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(octalCode)); if (octalCodeLength > sizeof(_octalCode)) { _octalCode.pointer = octalCode; _octcodePointer = true; diff --git a/libraries/particles/src/ParticleCollisionSystem.cpp b/libraries/particles/src/ParticleCollisionSystem.cpp index f7bf73a637..c827e28c78 100644 --- a/libraries/particles/src/ParticleCollisionSystem.cpp +++ b/libraries/particles/src/ParticleCollisionSystem.cpp @@ -225,6 +225,7 @@ void ParticleCollisionSystem::updateCollisionWithAvatars(Particle* particle) { // while ramping it up to 1 when attenuationFactor = 0 damping = DAMPING + (1.f - attenuationFactor) * (1.f - DAMPING); } + collision->_damping = damping; } // HACK END diff --git a/libraries/particles/src/ParticleTreeElement.cpp b/libraries/particles/src/ParticleTreeElement.cpp index 4930263d64..ee916dcf2f 100644 --- a/libraries/particles/src/ParticleTreeElement.cpp +++ b/libraries/particles/src/ParticleTreeElement.cpp @@ -234,7 +234,6 @@ void ParticleTreeElement::getParticles(const glm::vec3& searchPosition, float se uint16_t numberOfParticles = _particles->size(); for (uint16_t i = 0; i < numberOfParticles; i++) { const Particle* particle = &(*_particles)[i]; - glm::vec3 particlePosition = particle->getPosition(); float distance = glm::length(particle->getPosition() - searchPosition); if (distance < searchRadius + particle->getRadius()) { foundParticles.push_back(particle); @@ -294,15 +293,14 @@ int ParticleTreeElement::readElementDataFromBuffer(const unsigned char* data, in uint16_t numberOfParticles = 0; int expectedBytesPerParticle = Particle::expectedBytes(); - if (bytesLeftToRead >= sizeof(numberOfParticles)) { - + if (bytesLeftToRead >= (int)sizeof(numberOfParticles)) { // read our particles in.... numberOfParticles = *(uint16_t*)dataAt; dataAt += sizeof(numberOfParticles); - bytesLeftToRead -= sizeof(numberOfParticles); + bytesLeftToRead -= (int)sizeof(numberOfParticles); bytesRead += sizeof(numberOfParticles); - if (bytesLeftToRead >= (numberOfParticles * expectedBytesPerParticle)) { + if (bytesLeftToRead >= (int)(numberOfParticles * expectedBytesPerParticle)) { for (uint16_t i = 0; i < numberOfParticles; i++) { Particle tempParticle; int bytesForThisParticle = tempParticle.readParticleDataFromBuffer(dataAt, bytesLeftToRead, args); diff --git a/libraries/shared/src/OctalCode.cpp b/libraries/shared/src/OctalCode.cpp index ff30dad47e..ba0a001fb9 100644 --- a/libraries/shared/src/OctalCode.cpp +++ b/libraries/shared/src/OctalCode.cpp @@ -35,7 +35,7 @@ void printOctalCode(const unsigned char* octalCode) { qDebug("NULL"); } else { QDebug continuedDebug = qDebug().nospace(); - for (int i = 0; i < bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(octalCode)); i++) { + for (size_t i = 0; i < bytesRequiredForCodeLength(numberOfThreeBitSectionsInCode(octalCode)); i++) { outputBits(octalCode[i], &continuedDebug); } } @@ -51,11 +51,11 @@ char sectionValue(const unsigned char* startByte, char startIndexInByte) { } } -int bytesRequiredForCodeLength(unsigned char threeBitCodes) { +size_t bytesRequiredForCodeLength(unsigned char threeBitCodes) { if (threeBitCodes == 0) { return 1; } else { - return 1 + (int)ceilf((threeBitCodes * 3) / 8.0f); + return 1 + ceilf((threeBitCodes * 3) / 8.0f); } } @@ -78,10 +78,10 @@ unsigned char* childOctalCode(const unsigned char* parentOctalCode, char childNu : 0; // get the number of bytes used by the parent octal code - int parentCodeBytes = bytesRequiredForCodeLength(parentCodeSections); + size_t parentCodeBytes = bytesRequiredForCodeLength(parentCodeSections); // child code will have one more section than the parent - int childCodeBytes = bytesRequiredForCodeLength(parentCodeSections + 1); + size_t childCodeBytes = bytesRequiredForCodeLength(parentCodeSections + 1); // create a new buffer to hold the new octal code unsigned char* newCode = new unsigned char[childCodeBytes]; @@ -175,7 +175,7 @@ OctalCodeComparison compareOctalCodes(const unsigned char* codeA, const unsigned OctalCodeComparison result = LESS_THAN; // assume it's shallower - int numberOfBytes = std::min(bytesRequiredForCodeLength(*codeA), bytesRequiredForCodeLength(*codeB)); + size_t numberOfBytes = std::min(bytesRequiredForCodeLength(*codeA), bytesRequiredForCodeLength(*codeB)); int compare = memcmp(codeA, codeB, numberOfBytes); if (compare < 0) { @@ -367,7 +367,7 @@ QString octalCodeToHexString(const unsigned char* octalCode) { if (!octalCode) { output = "00"; } else { - for (int i = 0; i < bytesRequiredForCodeLength(*octalCode); i++) { + for (size_t i = 0; i < bytesRequiredForCodeLength(*octalCode); i++) { output.append(QString("%1").arg(octalCode[i], HEX_BYTE_SIZE, HEX_NUMBER_BASE, QChar('0')).toUpper()); } } diff --git a/libraries/shared/src/OctalCode.h b/libraries/shared/src/OctalCode.h index 36f3e74f63..c80aa82a2d 100644 --- a/libraries/shared/src/OctalCode.h +++ b/libraries/shared/src/OctalCode.h @@ -20,7 +20,7 @@ const int GREEN_INDEX = 1; const int BLUE_INDEX = 2; void printOctalCode(const unsigned char* octalCode); -int bytesRequiredForCodeLength(unsigned char threeBitCodes); +size_t bytesRequiredForCodeLength(unsigned char threeBitCodes); int branchIndexWithDescendant(const unsigned char* ancestorOctalCode, const unsigned char* descendantOctalCode); unsigned char* childOctalCode(const unsigned char* parentOctalCode, char childNumber); diff --git a/libraries/shared/src/ResourceCache.cpp b/libraries/shared/src/ResourceCache.cpp index bd08b240c5..a7c0302a9c 100644 --- a/libraries/shared/src/ResourceCache.cpp +++ b/libraries/shared/src/ResourceCache.cpp @@ -9,7 +9,6 @@ #include #include -#include #include #include @@ -156,25 +155,55 @@ void Resource::finishedLoading(bool success) { _loadPriorities.clear(); } +const int REPLY_TIMEOUT_MS = 5000; + void Resource::handleDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) { if (!_reply->isFinished()) { + _bytesReceived = bytesReceived; + _bytesTotal = bytesTotal; + _replyTimer->start(REPLY_TIMEOUT_MS); return; } _reply->disconnect(this); QNetworkReply* reply = _reply; _reply = NULL; + _replyTimer->disconnect(this); + _replyTimer->deleteLater(); + _replyTimer = NULL; ResourceCache::requestCompleted(); downloadFinished(reply); } void Resource::handleReplyError() { - QDebug debug = qDebug() << _reply->errorString(); + handleReplyError(_reply->error(), qDebug() << _reply->errorString()); +} + +void Resource::handleReplyTimeout() { + handleReplyError(QNetworkReply::TimeoutError, qDebug() << "Timed out loading" << _reply->url() << + "received" << _bytesReceived << "total" << _bytesTotal); +} + +void Resource::makeRequest() { + _reply = ResourceCache::getNetworkAccessManager()->get(_request); - QNetworkReply::NetworkError error = _reply->error(); + connect(_reply, SIGNAL(downloadProgress(qint64,qint64)), SLOT(handleDownloadProgress(qint64,qint64))); + connect(_reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(handleReplyError())); + + _replyTimer = new QTimer(this); + connect(_replyTimer, SIGNAL(timeout()), SLOT(handleReplyTimeout())); + _replyTimer->setSingleShot(true); + _replyTimer->start(REPLY_TIMEOUT_MS); + _bytesReceived = _bytesTotal = 0; +} + +void Resource::handleReplyError(QNetworkReply::NetworkError error, QDebug debug) { _reply->disconnect(this); _reply->deleteLater(); _reply = NULL; + _replyTimer->disconnect(this); + _replyTimer->deleteLater(); + _replyTimer = NULL; ResourceCache::requestCompleted(); // retry for certain types of failures @@ -193,7 +222,7 @@ void Resource::handleReplyError() { const int BASE_DELAY_MS = 1000; if (++_attempts < MAX_ATTEMPTS) { QTimer::singleShot(BASE_DELAY_MS * (int)pow(2.0, _attempts), this, SLOT(attemptRequest())); - debug << " -- retrying..."; + debug << "-- retrying..."; return; } // fall through to final failure @@ -204,13 +233,6 @@ void Resource::handleReplyError() { } } -void Resource::makeRequest() { - _reply = ResourceCache::getNetworkAccessManager()->get(_request); - - connect(_reply, SIGNAL(downloadProgress(qint64,qint64)), SLOT(handleDownloadProgress(qint64,qint64))); - connect(_reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(handleReplyError())); -} - uint qHash(const QPointer& value, uint seed) { return qHash(value.data(), seed); } diff --git a/libraries/shared/src/ResourceCache.h b/libraries/shared/src/ResourceCache.h index c77318aac2..8aed2bfcb0 100644 --- a/libraries/shared/src/ResourceCache.h +++ b/libraries/shared/src/ResourceCache.h @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -20,6 +21,7 @@ class QNetworkAccessManager; class QNetworkReply; +class QTimer; class Resource; @@ -116,14 +118,20 @@ private slots: void handleDownloadProgress(qint64 bytesReceived, qint64 bytesTotal); void handleReplyError(); + void handleReplyTimeout(); private: void makeRequest(); + void handleReplyError(QNetworkReply::NetworkError error, QDebug debug); + friend class ResourceCache; QNetworkReply* _reply; + QTimer* _replyTimer; + qint64 _bytesReceived; + qint64 _bytesTotal; int _attempts; }; diff --git a/libraries/shared/src/SharedUtil.cpp b/libraries/shared/src/SharedUtil.cpp index 2c531bab91..f80c56fd0c 100644 --- a/libraries/shared/src/SharedUtil.cpp +++ b/libraries/shared/src/SharedUtil.cpp @@ -198,21 +198,6 @@ bool isInEnvironment(const char* environment) { } } -void switchToResourcesParentIfRequired() { -#ifdef __APPLE__ - CFBundleRef mainBundle = CFBundleGetMainBundle(); - CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle); - char path[PATH_MAX]; - if (!CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX)) { - // error! - } - CFRelease(resourcesURL); - - chdir(path); - chdir(".."); -#endif -} - void loadRandomIdentifier(unsigned char* identifierBuffer, int numBytes) { // seed the the random number generator srand(time(NULL)); diff --git a/libraries/shared/src/SharedUtil.h b/libraries/shared/src/SharedUtil.h index c18b2fca08..b08e0413a6 100644 --- a/libraries/shared/src/SharedUtil.h +++ b/libraries/shared/src/SharedUtil.h @@ -93,8 +93,6 @@ int getNthBit(unsigned char byte, int ordinal); /// determines the bit placement bool isInEnvironment(const char* environment); -void switchToResourcesParentIfRequired(); - void loadRandomIdentifier(unsigned char* identifierBuffer, int numBytes); const char* getCmdOption(int argc, const char * argv[],const char* option);