ksuprynowiczCode review fixes part 1f5c8b8c11 months agoHistory
154 lines · 4.2 KB · C++
RawDownload
////  Created by Bradley Austin Davis on 2018/10/21//  Copyright 2014 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 "PlayerWindow.h" #include <QtCore/QTimer>#include <QtCore/QByteArray>#include <QtCore/QBuffer>#include <QtGui/QResizeEvent>#include <QtGui/QImageReader>#include <QtGui/QScreen>#include <QtWidgets/QFileDialog> #include <gpu/FrameIO.h> //#define FRAME_PLAYER_TRACING PlayerWindow::PlayerWindow() {    installEventFilter(this);    setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); #ifdef USE_GL    setSurfaceType(QSurface::OpenGLSurface);#else    setSurfaceType(QSurface::VulkanSurface);#endif     setGeometry(QRect(QPoint(), QSize(800, 600)));    create();    show();    // Ensure the window is visible and the GL context is valid    QCoreApplication::processEvents();    _renderThread.initialize(this);} PlayerWindow::~PlayerWindow() {} bool PlayerWindow::eventFilter(QObject* obj, QEvent* event)  {    if (event->type() == QEvent::Close) {        _renderThread.terminate();    }     return QWindow::eventFilter(obj, event);} void PlayerWindow::loadFrame() {    static const QString LAST_FILE_KEY{ "lastFile" };    auto lastScene = _settings.value(LAST_FILE_KEY);    QString openDir;    if (lastScene.isValid()) {        QFileInfo lastSceneInfo(lastScene.toString());        if (lastSceneInfo.absoluteDir().exists()) {            openDir = lastSceneInfo.absolutePath();        }    }     QString fileName = QFileDialog::getOpenFileName(nullptr, tr("Open File"), openDir, tr("GPU Frames (*.hfb)"));    if (fileName.isNull()) {        return;    }    _settings.setValue(LAST_FILE_KEY, fileName);    loadFrame(fileName);} void PlayerWindow::keyPressEvent(QKeyEvent* event) {    bool isShifted = event->modifiers().testFlag(Qt::ShiftModifier);    float moveScale = isShifted ? 10.0f : 1.0f;    switch (event->key()) {        case Qt::Key_F1:            loadFrame();            return;         case Qt::Key_F3:#ifdef USE_GL            _renderThread.testGlTransfer();#endif            return;         case Qt::Key_F4:            //_renderThread.testVkTransfer();            return;         case Qt::Key_W:            _renderThread.move(vec3{ 0, 0, -0.1f } * moveScale);            return;         case Qt::Key_S:            _renderThread.move(vec3{ 0, 0, 0.1f } * moveScale);            return;         case Qt::Key_A:            _renderThread.move(vec3{ -0.1f, 0, 0 } * moveScale);            return;         case Qt::Key_D:            _renderThread.move(vec3{ 0.1f, 0, 0 } * moveScale);            return;         case Qt::Key_E:            _renderThread.move(vec3{ 0, 0.1f, 0 } * moveScale);            return;         case Qt::Key_F:            _renderThread.move(vec3{ 0, -0.1f, 0 } * moveScale);            return;         default:            break;    }} void PlayerWindow::resizeEvent(QResizeEvent* ev) {    _renderThread.resize(ev->size());} static const QString DEFAULT_TRACING_RULES =    "trace.*=true\n" \    "*.detail=false\n"; void PlayerWindow::loadFrame(const QString& path) {#ifdef FRAME_PLAYER_TRACING    DependencyManager::get<tracing::Tracer>()->startTracing();    QLoggingCategory::setFilterRules(DEFAULT_TRACING_RULES);    QTimer::singleShot(10 * 1000, [] {        DependencyManager::get<tracing::Tracer>()->stopTracing();        DependencyManager::get<tracing::Tracer>()->serialize("D:/frames/trace-{DATE}_{TIME}.json.gz");    });#endif     auto frame = gpu::readFrame(path.toStdString(), _renderThread._externalTexture);    if (frame) {        _renderThread.submitFrame(frame);        if (!_renderThread.isThreaded()) {            _renderThread.process();        }    }    if (frame->framebuffer) {        const auto& fbo = *frame->framebuffer;        glm::uvec2 size{ fbo.getWidth(), fbo.getHeight() };                auto screenSize = screen()->size();        static const glm::uvec2 maxSize{ screenSize.width() - 100, screenSize.height() - 100 };        while (glm::any(glm::greaterThan(size, maxSize))) {            size /= 2;        }        resize(size.x, size.y);    }}