mirror of
https://github.com/zoriya/ComSquare.git
synced 2026-05-27 00:07:10 +00:00
Fixing framerate for the update interval
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -3,7 +3,6 @@
|
||||
//
|
||||
|
||||
#include <ios>
|
||||
#include <iostream>
|
||||
#include "SNES.hpp"
|
||||
#ifdef DEBUGGER_ENABLED
|
||||
#include "Debugger/CPU/CPUDebug.hpp"
|
||||
|
||||
Reference in New Issue
Block a user