mirror of
https://github.com/zoriya/ComSquare.git
synced 2026-06-04 18:46:11 +00:00
tile renderer is working fine with 2 bpp
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user