164 lines · 4.9 KB · C++
RawDownload
////  main.cpp//  tests/gpu-test/src////  Copyright 2015 High Fidelity, Inc.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// #include <unordered_map>#include <memory>#include <cstdio>#include <mutex>#include <set> #include <glm/glm.hpp>#include <glm/gtc/matrix_transform.hpp> #include <QtCore/QTime>#include <QtCore/QTimer>#include <QtCore/QDir>#include <QtCore/QElapsedTimer>#include <QtCore/QFile>#include <QtCore/QLoggingCategory> #include <QtGui/QResizeEvent>#include <QtGui/QWindow>#include <QtGui/QGuiApplication>#include <QtGui/QImage> #include <QtQuick/QQuickItem>#include <QtQml/QQmlApplicationEngine>#include <QtQml/QQmlContext> #include <plugins/Plugin.h>#include <ui-plugins/PluginContainer.h>#include <plugins/PluginManager.h>#include <input-plugins/InputPlugin.h>#include <input-plugins/KeyboardMouseDevice.h>#include <controllers/ScriptingInterface.h> #include <DependencyManager.h>#include <controllers/UserInputMapper.h> const QString& getResourcesDir() {    static QString dir;    if (dir.isEmpty()) {        QDir path(__FILE__);        path.cdUp();        dir = path.cleanPath(path.absoluteFilePath("../../../interface/resources/")) + "/";        qDebug() << "Resources Path: " << dir;    }    return dir;} const QString& getQmlDir() {    static QString dir;    if (dir.isEmpty()) {        dir = getResourcesDir() + "qml/";        qDebug() << "Qml Path: " << dir;    }    return dir;} const QString& getTestQmlDir() {    static QString dir;    if (dir.isEmpty()) {        QDir path(__FILE__);        path.cdUp();        dir = path.cleanPath(path.absoluteFilePath("../")) + "/qml/";        qDebug() << "Qml Test Path: " << dir;    }    return dir;} using namespace controller;  class PluginContainerProxy : public QObject, PluginContainer {    Q_OBJECTpublic:    virtual ~PluginContainerProxy() {}    virtual void showDisplayPluginsTools(bool show) override {}    virtual void requestReset() override {}    virtual bool makeRenderingContextCurrent() override { return true; }    virtual void releaseSceneTexture(const gpu::TexturePointer& texture) override {}    virtual void releaseOverlayTexture(const gpu::TexturePointer& texture) override {}    virtual GLWidget* getPrimaryWidget() override { return nullptr; }    virtual MainWindow* getPrimaryWindow() override { return nullptr; }    virtual QOpenGLContext* getPrimaryContext() override { return nullptr; }    virtual ui::Menu* getPrimaryMenu() override { return nullptr; }    virtual bool isForeground() const override { return true; }    virtual DisplayPluginPointer getActiveDisplayPlugin() const override { return DisplayPluginPointer();  }}; class MyControllerScriptingInterface : public controller::ScriptingInterface {public:    virtual void registerControllerTypes(QScriptEngine* engine) {};};  int main(int argc, char** argv) {    QGuiApplication app(argc, argv);    QQmlApplicationEngine engine;    auto rootContext = engine.rootContext();    new PluginContainerProxy();     // Simulate our application idle loop    QTimer timer;    QObject::connect(&timer, &QTimer::timeout, [] {        static float last = secTimestampNow();        float now = secTimestampNow();        float delta = now - last;        last = now;         InputCalibrationData calibrationData = {            glm::mat4(),            glm::mat4(),            glm::mat4()        };         foreach(auto inputPlugin, PluginManager::getInstance()->getInputPlugins()) {            inputPlugin->pluginUpdate(delta, calibrationData);        }         auto userInputMapper = DependencyManager::get<controller::UserInputMapper>();        userInputMapper->update(delta);    });    timer.start(50);     {        InputCalibrationData calibrationData = {            glm::mat4(),            glm::mat4(),            glm::mat4()        };         DependencyManager::set<controller::UserInputMapper>();        foreach(auto inputPlugin, PluginManager::getInstance()->getInputPlugins()) {            QString name = inputPlugin->getName();            inputPlugin->activate();            auto userInputMapper = DependencyManager::get<controller::UserInputMapper>();            if (name == KeyboardMouseDevice::NAME) {                userInputMapper->registerDevice(std::dynamic_pointer_cast<KeyboardMouseDevice>(inputPlugin)->getInputDevice());            }            inputPlugin->pluginUpdate(0, calibrationData);        }        rootContext->setContextProperty("Controllers", new MyControllerScriptingInterface());    }    qDebug() << getQmlDir();    rootContext->setContextProperty("ResourcePath", getQmlDir());    engine.setBaseUrl(QUrl::fromLocalFile(getQmlDir()));    engine.addImportPath(getQmlDir());    engine.load(getTestQmlDir() + "main.qml");    for (auto pathItem : engine.importPathList()) {        qDebug() << pathItem;    }    app.exec();    return 0;} #include "main.moc"