tile renderer is working fine with 2 bpp

This commit is contained in:
Clément Le Bihan
2021-05-25 00:28:03 +02:00
parent 569a955d5b
commit 26d8dd7123
6 changed files with 58 additions and 18 deletions
+23 -8
View File
@@ -3,8 +3,10 @@
//
#include <complex>
#include <cmath>
#include "TileRenderer.hpp"
#include "PPU/PPU.hpp"
#include "PPU/Tile.hpp"
namespace ComSquare::Debugger
{
@@ -13,6 +15,8 @@ namespace ComSquare::Debugger
_cgram(nullptr),
_bpp(2),
_palette(0),
_renderSize(5000),
_nbColumns(16),
buffer({{{0}}})
{
}
@@ -27,25 +31,26 @@ namespace ComSquare::Debugger
uint8_t colorReference;
uint24_t color;
std::vector<uint16_t> palette = this->getPalette(this->_palette);
int bufX = 0;
int bufY = 0;
int bufX = this->_offsetX;
int bufY = this->_offsetY;
int nbTilesDrawn = 0;
int resetX = 0;
int resetX = bufX;
int it = 0;
for (uint24_t i = 0; i < this->_ram->getSize(); i += this->_bpp, it++) {
for (uint24_t i = 0; i < fmin(this->_ram->getSize(), this->_renderSize); i += this->_bpp, it++) {
if (bufX >= 1024 || bufY >= 1024)
break;
if (it && it % 8 == 0) {
resetX += 8;
resetX += PPU::Tile::NbPixelsWidth;
bufX = resetX;
bufY -= 8;
bufY -= PPU::Tile::NbPixelsHeight;
nbTilesDrawn++;
}
if (nbTilesDrawn && nbTilesDrawn % 16 == 0) {
resetX = 0;
nbTilesDrawn = 0;
resetX = this->_offsetX;
bufX = resetX;
bufY += 8;
bufY += PPU::Tile::NbPixelsHeight;
}
for (int j = 0; j < 8; j++) {
colorReference = this->getPixelReferenceFromTileRow(i, j);
@@ -112,4 +117,14 @@ namespace ComSquare::Debugger
{
this->_cgram = std::move(ram);
}
void TileRenderer::setRenderSize(int size)
{
this->_renderSize = size;
}
void TileRenderer::setNbColumns(int nbColumns)
{
this->_nbColumns = nbColumns;
}
}
@@ -19,12 +19,22 @@ namespace ComSquare::Debugger
int _bpp;
//! @brief The palette number to use while rendering
int _palette;
//! @brief The size to render in the ram
int _renderSize;
//! @brief The number of tile columns to display
int _nbColumns;
//! @brief render offset in x
int _offsetX = 100;
//! @brief render offset in y
int _offsetY = 120;
public:
//! @brief internal buffer
std::array<std::array<uint32_t, 1024>, 1024> buffer;
void setPalette(int palette);
void setCgram(std::shared_ptr<Ram::Ram> ram);
void setBpp(int bpp);
void setNbColumns(int nbColumns);
void setRenderSize(int size);
void setRam(std::shared_ptr<Ram::Ram> ram);
uint8_t getPixelReferenceFromTileRow(uint16_t tileRowAddress, uint8_t pixelIndex);
std::vector<uint16_t> getPalette(int nbPalette);