From 620ccb3e802ff89fc18c696ac149e9c9481d9ce9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Le=20Bihan?= Date: Mon, 26 Jul 2021 16:32:46 +0200 Subject: [PATCH] dynamic renderer seems to work but have some resize/ratio issues --- .../Debugger/TileViewer/RAMTileRenderer.cpp | 10 ++----- sources/Debugger/TileViewer/TileViewer.cpp | 26 ++++++++++++++----- sources/Debugger/TileViewer/TileViewer.hpp | 2 ++ sources/Renderer/SFRenderer.cpp | 8 +++--- 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/sources/Debugger/TileViewer/RAMTileRenderer.cpp b/sources/Debugger/TileViewer/RAMTileRenderer.cpp index 7dc27bc..757d5b8 100644 --- a/sources/Debugger/TileViewer/RAMTileRenderer.cpp +++ b/sources/Debugger/TileViewer/RAMTileRenderer.cpp @@ -20,15 +20,9 @@ namespace ComSquare::Debugger void prepVector(std::vector> &vector, int nbColumns) { - std::vector> vec(1 * PPU::Tile::NbPixelsHeight, std::vector(nbColumns * PPU::Tile::NbPixelsWidth, 0)); + std::vector> vec(1 * PPU::Tile::NbPixelsHeight, + std::vector(nbColumns * PPU::Tile::NbPixelsWidth, 0)); vector = vec; - return; - std::vector pixelLine(static_cast(nbColumns), 0); - - vector.reserve(8); - for (int i = 0; i < 8; i++) { - vector.push_back(pixelLine); - } } void RAMTileRenderer::render() diff --git a/sources/Debugger/TileViewer/TileViewer.cpp b/sources/Debugger/TileViewer/TileViewer.cpp index 12db102..e78909a 100644 --- a/sources/Debugger/TileViewer/TileViewer.cpp +++ b/sources/Debugger/TileViewer/TileViewer.cpp @@ -16,11 +16,12 @@ namespace ComSquare::Debugger { TileViewer::TileViewer(SNES &snes, ComSquare::PPU::PPU &ppu) - :_window(new ClosableWindow([&snes] { snes.disableTileViewer(); })), + : _window(new ClosableWindow([&snes] { snes.disableTileViewer(); })), _snes(snes), _ui(), _ppu(ppu), - _ramTileRenderer(ppu.vram, ppu.cgram) + _ramTileRenderer(ppu.vram, ppu.cgram), + _currentRendererSize(0, 0) { this->_ui.setupUi(this->_window); //this->_qtSfmlRenderer(this->_ui.widget_sfml, 30); @@ -114,14 +115,25 @@ namespace ComSquare::Debugger void TileViewer::internalUpdate() { this->_ramTileRenderer.render(); + if (this->_ramTileRenderer.buffer.size() != this->_currentRendererSize.y + || this->_ramTileRenderer.buffer.at(0).size() != this->_currentRendererSize.x) { + if (this->_ramTileRenderer.buffer.size() == 0 || this->_ramTileRenderer.buffer.at(0).size() == 0) + return; + this->_currentRendererSize = {static_cast(this->_ramTileRenderer.buffer.at(0).size()), static_cast(this->_ramTileRenderer.buffer.size())}; + this->_renderer->setSize(this->_currentRendererSize.x, this->_currentRendererSize.y); + } int i = 0; int j = 0; - for (const auto &row : this->_ramTileRenderer.buffer) { - for (const auto &pixel : row) { - this->_renderer->putPixel(i, j++, pixel); + try { + for (const auto &row : this->_ramTileRenderer.buffer) { + for (const auto &pixel : row) { + this->_renderer->putPixel(i, j++, pixel); + } + j = 0; + i++; } - j = 0; - i++; + } catch (const std::exception &e) { + std::cout << "cc" << std::endl; } } diff --git a/sources/Debugger/TileViewer/TileViewer.hpp b/sources/Debugger/TileViewer/TileViewer.hpp index 4fa7f2f..1221e3a 100644 --- a/sources/Debugger/TileViewer/TileViewer.hpp +++ b/sources/Debugger/TileViewer/TileViewer.hpp @@ -40,6 +40,8 @@ namespace ComSquare::Debugger //! @brief Change the bpp from the index given by the ui (QT combo box) void _bppChangeUIHandler(int index); + Vector2 _currentRendererSize; + public: //! @brief ctor explicit TileViewer(SNES &snes, ComSquare::PPU::PPU &ppu); diff --git a/sources/Renderer/SFRenderer.cpp b/sources/Renderer/SFRenderer.cpp index 127f37b..a79f70d 100644 --- a/sources/Renderer/SFRenderer.cpp +++ b/sources/Renderer/SFRenderer.cpp @@ -61,10 +61,10 @@ namespace ComSquare::Renderer void SFRenderer::putPixel(unsigned verticalPosition, unsigned horizontalPosition, uint32_t rgba) { - if (verticalPosition >= this->_videoMode.width) - throw InvalidPixelPosition("Width", verticalPosition, this->_videoMode.width); - if (horizontalPosition >= this->_videoMode.height) - throw InvalidPixelPosition("Height", horizontalPosition, this->_videoMode.height); + if (horizontalPosition >= this->_videoMode.width) + throw InvalidPixelPosition("Width", horizontalPosition, this->_videoMode.width); + if (verticalPosition >= this->_videoMode.height) + throw InvalidPixelPosition("Height", verticalPosition, this->_videoMode.height); this->_pixelBuffer[this->_videoMode.width * verticalPosition + horizontalPosition] = sf::Color(rgba); }