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 {
public:
CharacterDefinition();
CharacterDefinition(Ram* ram, uint16_t address, int height);
CharacterDefinition(Ram* ram, uint16_t address);
std::array<int, 8> get(int row) const;
private:
Ram* m_ram;
uint16_t m_address;
int m_height;
};
}
}

View File

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

View File

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

View File

@ -5,14 +5,12 @@
EightBit::GameBoy::CharacterDefinition::CharacterDefinition()
: m_ram(nullptr),
m_address(~0),
m_height(0) {
m_address(~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_address(address),
m_height(height) {
m_address(address) {
}
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;
}
void EightBit::GameBoy::Display::renderObjects() {
const auto objBlockHeight = (m_control & IoRegisters::ObjectBlockCompositionSelection) ? 16 : 8;
renderObjects(objBlockHeight);
}
void EightBit::GameBoy::Display::loadObjectAttributes() {
const auto objBlockHeight = (m_control & IoRegisters::ObjectBlockCompositionSelection) ? 16 : 8;
for (int i = 0; i < 40; ++i) {
m_objectAttributes[i] = ObjectAttribute(m_oam, 4 * i, objBlockHeight);
}
for (int i = 0; i < 40; ++i)
m_objectAttributes[i] = ObjectAttribute(m_oam, 4 * i);
}
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);
palettes[0] = createPalette(IoRegisters::OBP0);
palettes[1] = createPalette(IoRegisters::OBP1);
@ -79,7 +74,7 @@ void EightBit::GameBoy::Display::renderObjects(int objBlockHeight) {
const auto drawX = spriteX - 8;
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 flipX = current.flipX();
const auto flipY = current.flipY();
@ -120,14 +115,13 @@ void EightBit::GameBoy::Display::renderBackground(
const std::array<int, 4>& palette) {
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) {
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(
8,
column * 8 + offsetX, row * 8 + offsetY,

View File

@ -6,11 +6,9 @@
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_positionX = ram.peek(address + 1);
m_pattern = ram.peek(address + 2);
if (height == 16)
m_pattern >>= 1;
m_flags = ram.peek(address + 3);
m_positionX = ram.peek(++address);
m_pattern = ram.peek(++address);
m_flags = ram.peek(++address);
}