mirror of
https://github.com/MoleskiCoder/EightBit.git
synced 2024-10-06 14:59:17 +00:00
Tidy up some leftover work from the scanline rendering update.
Signed-off-by: Adrian Conlon <Adrian.conlon@gmail.com>
This commit is contained in:
parent
90b0673259
commit
a065199098
@ -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;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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,
|
||||||
|
@ -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; }
|
||||||
|
@ -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 {
|
||||||
|
@ -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,
|
||||||
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user