Tidy up some leftover work from the scanline rendering update.

Signed-off-by: Adrian Conlon <Adrian.conlon@gmail.com>
This commit is contained in:
Adrian Conlon 2017-10-22 21:25:06 +01:00
parent 90b0673259
commit a065199098
6 changed files with 18 additions and 30 deletions

View File

@ -11,14 +11,13 @@ namespace EightBit {
class CharacterDefinition { class CharacterDefinition {
public: public:
CharacterDefinition(); CharacterDefinition();
CharacterDefinition(Ram* ram, uint16_t address, int height); CharacterDefinition(Ram* ram, uint16_t address);
std::array<int, 8> get(int row) const; std::array<int, 8> get(int row) const;
private: private:
Ram* m_ram; Ram* m_ram;
uint16_t m_address; uint16_t m_address;
int m_height;
}; };
} }
} }

View File

@ -54,7 +54,6 @@ namespace EightBit {
const std::array<int, 4>& palette); const std::array<int, 4>& palette);
void renderObjects(); void renderObjects();
void renderObjects(int objBlockHeight);
void renderTile( void renderTile(
int height, int height,

View File

@ -12,7 +12,7 @@ namespace EightBit {
class ObjectAttribute { class ObjectAttribute {
public: public:
ObjectAttribute(); ObjectAttribute();
ObjectAttribute(Ram& ram, uint16_t address, int height); ObjectAttribute(Ram& ram, uint16_t address);
uint8_t positionY() const { return m_positionY; } uint8_t positionY() const { return m_positionY; }
uint8_t positionX() const { return m_positionX; } uint8_t positionX() const { return m_positionX; }

View File

@ -5,14 +5,12 @@
EightBit::GameBoy::CharacterDefinition::CharacterDefinition() EightBit::GameBoy::CharacterDefinition::CharacterDefinition()
: m_ram(nullptr), : m_ram(nullptr),
m_address(~0), m_address(~0) {
m_height(0) {
} }
EightBit::GameBoy::CharacterDefinition::CharacterDefinition(Ram* ram, uint16_t address, int height) EightBit::GameBoy::CharacterDefinition::CharacterDefinition(Ram* ram, uint16_t address)
: m_ram(ram), : m_ram(ram),
m_address(address), m_address(address) {
m_height(height) {
} }
std::array<int, 8> EightBit::GameBoy::CharacterDefinition::get(int row) const { std::array<int, 8> EightBit::GameBoy::CharacterDefinition::get(int row) const {

View File

@ -48,20 +48,15 @@ std::array<int, 4> EightBit::GameBoy::Display::createPalette(const int address)
return palette; return palette;
} }
void EightBit::GameBoy::Display::renderObjects() {
const auto objBlockHeight = (m_control & IoRegisters::ObjectBlockCompositionSelection) ? 16 : 8;
renderObjects(objBlockHeight);
}
void EightBit::GameBoy::Display::loadObjectAttributes() { void EightBit::GameBoy::Display::loadObjectAttributes() {
const auto objBlockHeight = (m_control & IoRegisters::ObjectBlockCompositionSelection) ? 16 : 8; for (int i = 0; i < 40; ++i)
for (int i = 0; i < 40; ++i) { m_objectAttributes[i] = ObjectAttribute(m_oam, 4 * i);
m_objectAttributes[i] = ObjectAttribute(m_oam, 4 * i, objBlockHeight);
}
} }
void EightBit::GameBoy::Display::renderObjects(int objBlockHeight) { void EightBit::GameBoy::Display::renderObjects() {
const auto objBlockHeight = (m_control & IoRegisters::ObjectBlockCompositionSelection) ? 16 : 8;
std::vector<std::array<int, 4>> palettes(2); std::vector<std::array<int, 4>> palettes(2);
palettes[0] = createPalette(IoRegisters::OBP0); palettes[0] = createPalette(IoRegisters::OBP0);
palettes[1] = createPalette(IoRegisters::OBP1); palettes[1] = createPalette(IoRegisters::OBP1);
@ -79,7 +74,7 @@ void EightBit::GameBoy::Display::renderObjects(int objBlockHeight) {
const auto drawX = spriteX - 8; const auto drawX = spriteX - 8;
const auto sprite = current.pattern(); const auto sprite = current.pattern();
const auto definition = CharacterDefinition(&m_vram, 16 * sprite, objBlockHeight); const auto definition = CharacterDefinition(&m_vram, (objBlockHeight == 8 ? 16 : 8) * sprite);
const auto& palette = palettes[current.palette()]; const auto& palette = palettes[current.palette()];
const auto flipX = current.flipX(); const auto flipX = current.flipX();
const auto flipY = current.flipY(); const auto flipY = current.flipY();
@ -120,14 +115,13 @@ void EightBit::GameBoy::Display::renderBackground(
const std::array<int, 4>& palette) { const std::array<int, 4>& palette) {
const int row = (m_scanLine - offsetY) / 8; const int row = (m_scanLine - offsetY) / 8;
const auto baseAddress = bgArea + row * BufferCharacterWidth; auto address = bgArea + row * BufferCharacterWidth;
for (int column = 0; column < BufferCharacterWidth; ++column) { for (int column = 0; column < BufferCharacterWidth; ++column) {
const auto address = baseAddress + column; const auto character = m_vram.peek(address++);
const auto character = m_vram.peek(address);
const auto definition = CharacterDefinition(&m_vram, bgCharacters + 16 * character, 8); const auto definition = CharacterDefinition(&m_vram, bgCharacters + 16 * character);
renderTile( renderTile(
8, 8,
column * 8 + offsetX, row * 8 + offsetY, column * 8 + offsetX, row * 8 + offsetY,

View File

@ -6,11 +6,9 @@
EightBit::GameBoy::ObjectAttribute::ObjectAttribute() { EightBit::GameBoy::ObjectAttribute::ObjectAttribute() {
} }
EightBit::GameBoy::ObjectAttribute::ObjectAttribute(Ram& ram, uint16_t address, int height) { EightBit::GameBoy::ObjectAttribute::ObjectAttribute(Ram& ram, uint16_t address) {
m_positionY = ram.peek(address); m_positionY = ram.peek(address);
m_positionX = ram.peek(address + 1); m_positionX = ram.peek(++address);
m_pattern = ram.peek(address + 2); m_pattern = ram.peek(++address);
if (height == 16) m_flags = ram.peek(++address);
m_pattern >>= 1;
m_flags = ram.peek(address + 3);
} }