[nostalgia/gfx] Fix BG tilesheet loading, add background offset functions
Some checks failed
Build / build (push) Failing after 20s
Some checks failed
Build / build (push) Failing after 20s
This commit is contained in:
@@ -238,6 +238,10 @@ void setBgCbb(Context &ctx, unsigned bgIdx, unsigned cbbIdx) noexcept;
|
|||||||
|
|
||||||
void setBgPriority(Context &ctx, uint_t bgIdx, uint_t priority) noexcept;
|
void setBgPriority(Context &ctx, uint_t bgIdx, uint_t priority) noexcept;
|
||||||
|
|
||||||
|
void setBgOffset(Context &ctx, uint16_t bg, int16_t x, int16_t y) noexcept;
|
||||||
|
|
||||||
|
void scrollBgOffset(Context &ctx, uint16_t bg, int16_t x, int16_t y) noexcept;
|
||||||
|
|
||||||
void hideSprite(Context &ctx, unsigned) noexcept;
|
void hideSprite(Context &ctx, unsigned) noexcept;
|
||||||
|
|
||||||
void showSprite(Context &ctx, unsigned) noexcept;
|
void showSprite(Context &ctx, unsigned) noexcept;
|
||||||
@@ -260,8 +264,8 @@ constexpr ox::CStringView GlslVersion = "#version 330";
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
ox::Size drawSize(int scale = 5) noexcept;
|
ox::Size drawSize(int scale = 5) noexcept;
|
||||||
|
|
||||||
void draw(gfx::Context &ctx, ox::Size const &renderSz) noexcept;
|
void draw(Context &ctx, ox::Size const &renderSz) noexcept;
|
||||||
|
|
||||||
void draw(gfx::Context&, int scale = 5) noexcept;
|
void draw(Context&, int scale = 5) noexcept;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -169,8 +169,8 @@ ox::Error loadBgTileSheet(
|
|||||||
unsigned const cbb,
|
unsigned const cbb,
|
||||||
CompactTileSheet const &ts,
|
CompactTileSheet const &ts,
|
||||||
ox::Optional<unsigned> const &paletteBank) noexcept {
|
ox::Optional<unsigned> const &paletteBank) noexcept {
|
||||||
auto const cnt = (ts.pixels.size() * PixelsPerTile) / (1 + (ts.bpp == 4));
|
auto const cnt = ts.pixels.size() >> (ts.bpp == 4);
|
||||||
for (size_t i = 0; i < cnt; ++i) {
|
for (size_t i{}; i < cnt; ++i) {
|
||||||
auto const srcIdx = i * 2;
|
auto const srcIdx = i * 2;
|
||||||
auto const p1 = static_cast<uint16_t>(ts.pixels[srcIdx]);
|
auto const p1 = static_cast<uint16_t>(ts.pixels[srcIdx]);
|
||||||
auto const p2 = static_cast<uint16_t>(ts.pixels[srcIdx + 1]);
|
auto const p2 = static_cast<uint16_t>(ts.pixels[srcIdx + 1]);
|
||||||
@@ -218,10 +218,10 @@ ox::Error loadSpriteTileSheet(
|
|||||||
Context &ctx,
|
Context &ctx,
|
||||||
CompactTileSheet const &ts,
|
CompactTileSheet const &ts,
|
||||||
bool const loadDefaultPalette) noexcept {
|
bool const loadDefaultPalette) noexcept {
|
||||||
for (size_t i = 0; i < ts.pixels.size(); i += 2) {
|
for (size_t i{}; i < ts.pixels.size(); i += 2) {
|
||||||
uint16_t v = ts.pixels[i];
|
MEM_SPRITE_TILES[i >> 1] =
|
||||||
v |= static_cast<uint16_t>(ts.pixels[i + 1] << 8);
|
static_cast<uint16_t>(ts.pixels[i]) |
|
||||||
MEM_SPRITE_TILES[i] = v;
|
(static_cast<uint16_t>(ts.pixels[i + 1]) << 8);
|
||||||
}
|
}
|
||||||
if (loadDefaultPalette && ts.defaultPalette) {
|
if (loadDefaultPalette && ts.defaultPalette) {
|
||||||
OX_RETURN_ERROR(loadSpritePalette(ctx, ts.defaultPalette));
|
OX_RETURN_ERROR(loadSpritePalette(ctx, ts.defaultPalette));
|
||||||
@@ -294,6 +294,14 @@ void setBgPriority(Context&, uint_t const bgIdx, uint_t const priority) noexcept
|
|||||||
bgCtl = (bgCtl & 0b1111'1111'1111'1100u) | (priority & 0b11);
|
bgCtl = (bgCtl & 0b1111'1111'1111'1100u) | (priority & 0b11);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setBgOffset(Context&, uint16_t const bg, int16_t const x, int16_t const y) noexcept {
|
||||||
|
teagba::setBgOffset(bg, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void scrollBgOffset(Context&, uint16_t const bg, int16_t const x, int16_t const y) noexcept {
|
||||||
|
teagba::scrollBgOffset(bg, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
void hideSprite(Context&, unsigned const idx) noexcept {
|
void hideSprite(Context&, unsigned const idx) noexcept {
|
||||||
//oxAssert(g_spriteUpdates < config::GbaSpriteBufferLen, "Sprite update buffer overflow");
|
//oxAssert(g_spriteUpdates < config::GbaSpriteBufferLen, "Sprite update buffer overflow");
|
||||||
teagba::addSpriteUpdate({
|
teagba::addSpriteUpdate({
|
||||||
|
@@ -249,7 +249,7 @@ void setBgTile(
|
|||||||
}
|
}
|
||||||
|
|
||||||
ox::Error initConsole(Context &ctx) noexcept {
|
ox::Error initConsole(Context &ctx) noexcept {
|
||||||
constexpr ox::FileAddress TilesheetAddr = ox::StringLiteral("/TileSheets/Charset.ng");
|
constexpr ox::FileAddress TilesheetAddr = ox::StringLiteral("/TileSheets/Charset.nts");
|
||||||
constexpr ox::FileAddress PaletteAddr = ox::StringLiteral("/Palettes/Charset.npal");
|
constexpr ox::FileAddress PaletteAddr = ox::StringLiteral("/Palettes/Charset.npal");
|
||||||
setBgStatus(ctx, 0b0001);
|
setBgStatus(ctx, 0b0001);
|
||||||
setBgCbb(ctx, 0, 0);
|
setBgCbb(ctx, 0, 0);
|
||||||
|
Reference in New Issue
Block a user