Fixing framerate for the update interval

This commit is contained in:
Zoe Roux
2021-06-29 10:26:47 +02:00
parent fbcb81d518
commit 7994c5dbf0
7 changed files with 29 additions and 31 deletions
+14 -14
View File
@@ -8,7 +8,6 @@
#include <QMenuBar>
#include <iostream>
#include "SNES.hpp"
#include "../../Exceptions/DebuggableError.hpp"
#include "QtSFML.hpp"
#ifdef Q_WS_X11
@@ -19,13 +18,14 @@
namespace ComSquare::Renderer
{
QtSFML::QtSFML(QWidget *parentWidget)
: _window(parentWidget), _sfWidget(nullptr)
: _window(parentWidget),
_sfWidget(nullptr)
{
}
void QtSFML::createWindow(SNES &snes, int maxFPS)
{
this->_sfWidget = std::make_unique<QtFullSFML>(snes, this->_window, QPoint(0, 0), QSize(this->_window->width(), this->_window->height()), maxFPS);
this->_sfWidget = new QtFullSFML(snes, this->_window, QPoint(0, 0), QSize(this->_window->width(), this->_window->height()), maxFPS);
}
void QtSFML::putPixel(unsigned y, unsigned x, uint32_t rgba)
@@ -50,7 +50,7 @@ namespace ComSquare::Renderer
_snes(snes)
{ }
void QtFullSFML::_onUpdate()
void QtFullSFML::onUpdate()
{
try {
this->_snes.update();
@@ -119,7 +119,7 @@ namespace ComSquare::Renderer
{
QtSFML::createWindow(snes, maxFPS);
this->setWindowName(snes.cartridge->header.gameName);
this->_window.setCentralWidget(this->_sfWidget.get());
this->_window.setCentralWidget(this->_sfWidget);
QMenu *file = this->_window.menuBar()->addMenu("&File");
//TODO implement rom opening from this menu.
@@ -127,7 +127,7 @@ namespace ComSquare::Renderer
QMenu *game = this->_window.menuBar()->addMenu("&Game");
QAction *reset = new QAction("Reset", &this->_window);
QMainWindow::connect(reset, &QAction::triggered, this->_sfWidget.get(), &QtFullSFML::reset);
QMainWindow::connect(reset, &QAction::triggered, this->_sfWidget, &QtFullSFML::reset);
game->addAction(reset);
@@ -135,42 +135,42 @@ namespace ComSquare::Renderer
QMenu *debugger = this->_window.menuBar()->addMenu("&Debugger");
QAction *cpuDebugger = new QAction("CPU's Debugger", &this->_window);
cpuDebugger->setShortcut(Qt::Key_F1);
QMainWindow::connect(cpuDebugger, &QAction::triggered, this->_sfWidget.get(), &QtFullSFML::enableDebugCPU);
QMainWindow::connect(cpuDebugger, &QAction::triggered, this->_sfWidget, &QtFullSFML::enableDebugCPU);
debugger->addAction(cpuDebugger);
QAction *ramViewer = new QAction("Memory viewer", &this->_window);
ramViewer->setShortcut(Qt::Key_F2);
QMainWindow::connect(ramViewer, &QAction::triggered, this->_sfWidget.get(), &QtFullSFML::enableRamViewer);
QMainWindow::connect(ramViewer, &QAction::triggered, this->_sfWidget, &QtFullSFML::enableRamViewer);
debugger->addAction(ramViewer);
QAction *headerViewer = new QAction("Header viewer", &this->_window);
headerViewer->setShortcut(Qt::Key_F3);
QMainWindow::connect(headerViewer, &QAction::triggered, this->_sfWidget.get(), &QtFullSFML::enableHeaderViewer);
QMainWindow::connect(headerViewer, &QAction::triggered, this->_sfWidget, &QtFullSFML::enableHeaderViewer);
debugger->addAction(headerViewer);
QAction *apuDebugger = new QAction("APU's Debugger", &this->_window);
apuDebugger->setShortcut(Qt::Key_F4);
QMainWindow::connect(apuDebugger, &QAction::triggered, this->_sfWidget.get(), &QtFullSFML::enableDebugAPU);
QMainWindow::connect(apuDebugger, &QAction::triggered, this->_sfWidget, &QtFullSFML::enableDebugAPU);
debugger->addAction(apuDebugger);
QAction *busDebugger = new QAction("Memory bus Viewer", &this->_window);
busDebugger->setShortcut(Qt::Key_F5);
QMainWindow::connect(busDebugger, &QAction::triggered, this->_sfWidget.get(), &QtFullSFML::enableDebugBus);
QMainWindow::connect(busDebugger, &QAction::triggered, this->_sfWidget, &QtFullSFML::enableDebugBus);
debugger->addAction(busDebugger);
QAction *cgramDebugger = new QAction("Palette Viewer", &this->_window);
cgramDebugger->setShortcut(Qt::Key_F6);
QMainWindow::connect(cgramDebugger, &QAction::triggered, this->_sfWidget.get(), &QtFullSFML::enableCgramViewer);
QMainWindow::connect(cgramDebugger, &QAction::triggered, this->_sfWidget, &QtFullSFML::enableCgramViewer);
debugger->addAction(cgramDebugger);
QAction *registerDebugger = new QAction("Registers Viewer", &this->_window);
registerDebugger->setShortcut(Qt::Key_F7);
QMainWindow::connect(registerDebugger, &QAction::triggered, this->_sfWidget.get(), &QtFullSFML::enableRegisterViewer);
QMainWindow::connect(registerDebugger, &QAction::triggered, this->_sfWidget, &QtFullSFML::enableRegisterViewer);
debugger->addAction(registerDebugger);
QAction *tileDebugger = new QAction("Tile Viewer", &this->_window);
tileDebugger->setShortcut(Qt::Key_F8);
QMainWindow::connect(tileDebugger, &QAction::triggered, this->_sfWidget.get(), &QtFullSFML::enableTileViewer);
QMainWindow::connect(tileDebugger, &QAction::triggered, this->_sfWidget, &QtFullSFML::enableTileViewer);
debugger->addAction(tileDebugger);
this->_window.show();
+2 -2
View File
@@ -21,7 +21,7 @@ namespace ComSquare::Renderer
private:
//! @brief The snes to update.
SNES &_snes;
void _onUpdate() override;
void onUpdate() override;
public:
//! @brief Action called when clicking on the enable CPU debugger button.
void enableDebugCPU();
@@ -56,7 +56,7 @@ namespace ComSquare::Renderer
QWidget *_window;
protected:
//! @brief The SFML widget.
std::unique_ptr<QtFullSFML> _sfWidget = nullptr;
QtFullSFML *_sfWidget = nullptr;
public:
//! @brief Use this function to create the window.
//! @param maxFPS The number of FPS you aim to run on.
@@ -15,7 +15,7 @@ namespace ComSquare::Renderer
// todo the size of the sfml renderwindow should fill the parent
}
void QtSFMLTileRenderer::_onUpdate()
void QtSFMLTileRenderer::onUpdate()
{
this->_window.clear(sf::Color::Black);
for (unsigned long i = 0; i < this->buffer.size(); i++) {
@@ -17,10 +17,10 @@ namespace ComSquare::Renderer
std::array<std::array<uint32_t, 1024>, 1024> buffer;
//! @brief Function called to update this widget.
void _onUpdate() override;
void onUpdate() override;
//! @brief ctor
explicit QtSFMLTileRenderer(QWidget* parent, int frameRate = 0);
explicit QtSFMLTileRenderer(QWidget* parent, int frameRate = 60);
//! @brief copy ctor
QtSFMLTileRenderer(const QtSFMLTileRenderer &) = delete;
//! @brief default ctor
+4 -4
View File
@@ -17,8 +17,7 @@ namespace ComSquare::Renderer
this->move(position);
this->resize(size);
this->_timer.setInterval(frameRate);
this->_timer.setInterval(1000 / frameRate);
}
void QtWidgetSFML::showEvent(QShowEvent *)
@@ -30,9 +29,11 @@ namespace ComSquare::Renderer
XFlush(QX11Info::display());
#endif
this->_window.create((sf::WindowHandle)this->winId());
this->_window.setFramerateLimit(60);
this->_onInit();
connect(&_timer, SIGNAL(timeout()), this, SLOT(repaint()));
this->_timer.setSingleShot(false);
connect(&_timer, SIGNAL(timeout()), this, SLOT(onUpdate()));
this->_timer.start();
this->_isInitialized = true;
}
@@ -45,7 +46,6 @@ namespace ComSquare::Renderer
void QtWidgetSFML::paintEvent(QPaintEvent *)
{
this->_onUpdate();
this->drawScreen();
}
+6 -7
View File
@@ -2,8 +2,7 @@
// Created by anonymus-raccoon on 2/16/20.
//
#ifndef COMSQUARE_QTWIDGETSFML_HPP
#define COMSQUARE_QTWIDGETSFML_HPP
#pragma once
#include <QtWidgets/QWidget>
#include <SFML/Graphics/RenderWindow.hpp>
@@ -16,11 +15,13 @@ namespace ComSquare::Renderer
{
//! @brief A widget that you can put inside a QT application that render using the SFML.
class QtWidgetSFML : public QWidget, public SFRenderer {
Q_OBJECT
public slots:
//! @brief Function called to update this widget.
virtual void onUpdate() = 0;
private:
//! @brief Function called when this widget is created.
virtual void _onInit();
//! @brief Function called to update this widget.
virtual void _onUpdate() = 0;
//! @brief Qt internal paint engine (always null since we use a custom one)
QPaintEngine* paintEngine() const override;
//! @brief Used to create the SF window and bind it to the window manager of the user.
@@ -38,6 +39,4 @@ namespace ComSquare::Renderer
QtWidgetSFML &operator=(const QtWidgetSFML &) = delete;
~QtWidgetSFML() override = default;
};
}
#endif //COMSQUARE_QTWIDGETSFML_HPP
}
-1
View File
@@ -3,7 +3,6 @@
//
#include <ios>
#include <iostream>
#include "SNES.hpp"
#ifdef DEBUGGER_ENABLED
#include "Debugger/CPU/CPUDebug.hpp"