Compare commits

..

1 Commits

Author SHA1 Message Date
f5573e06da [nostalgia/studio] Set version to d2025.05.0
All checks were successful
Build / build (push) Successful in 1m13s
2025-05-10 00:23:30 -05:00
10 changed files with 74 additions and 80 deletions

View File

@@ -146,7 +146,12 @@ class Span {
return iterator<const T&, const T*, true>(m_items, MaxValue<size_type>, m_size);
}
constexpr T &operator[](std::size_t i) const noexcept {
constexpr T &operator[](std::size_t i) noexcept {
boundsCheck(__FILE__, __LINE__, i, size(), "Span access overflow");
return m_items[i];
}
constexpr T const&operator[](std::size_t i) const noexcept {
boundsCheck(__FILE__, __LINE__, i, size(), "Span access overflow");
return m_items[i];
}

View File

@@ -4,17 +4,16 @@
* Change application font to Roboto Medium
* Closing application will now confirm with user if any files have unsaved
changes.
* UUID duplicates will now be reported when opening a project.
* Deleting a directory now closes files in that directory.
* Delete key now initiates deletion of selected directory.
* UUID duplicates will now be reported when opening a project
* Deleting a directory now closes files in that directory
* Delete key now initiates deletion of selected directory
* Remove ability to re-order tabs. There were bugs associated with that.
* Mac: Menu bar shortcuts now say Cmd instead of Ctrl.
* TileSheetEditor: Fix selection clearing to work when clicking outside image.
* TileSheetEditor: Fix selection clearing in to work when clicking outside
image.
* TileSheetEditor: Fix Delete Tile functionality, which was completely broken
* TileSheetEditor: Fix Insert Tile functionality, which was completely broken
* PaletteEditor: Fix color number key range. Previously, pressing A caused the
editor to jump to the last color.
* PaletteEditor: Page rename will now take effect upon pressing enter if the
* PaletteEditor: Fix color number key range in. Previously, pressing A caused
the editor to jump to the last color.
* PaletteEditor: page rename will now take effect upon pressing enter if the
text input has focus
# d2025.02.1

View File

@@ -223,7 +223,7 @@ bool bgStatus(Context &ctx, unsigned bg) noexcept;
void setBgStatus(Context &ctx, unsigned bg, bool status) noexcept;
void setBgCbb(Context &ctx, unsigned bgIdx, unsigned cbbIdx) noexcept;
void setBgCbb(Context &ctx, unsigned bgIdx, unsigned cbb) noexcept;
void setBgPriority(Context &ctx, uint_t bgIdx, uint_t priority) noexcept;
@@ -231,10 +231,10 @@ void hideSprite(Context &ctx, unsigned) noexcept;
void showSprite(Context &ctx, unsigned) noexcept;
void setSprite(Context &ctx, uint_t idx, Sprite const&sprite) noexcept;
void setSprite(Context &c, uint_t idx, Sprite const&s) noexcept;
[[nodiscard]]
uint_t spriteCount(Context const &ctx) noexcept;
uint_t spriteCount(Context &ctx) noexcept;
ox::Error initConsole(Context &ctx) noexcept;

View File

@@ -36,9 +36,9 @@ ox::Error initGfx(Context&, InitParams const&) noexcept {
ox::Error loadBgPalette(
Context&,
size_t const palBank,
size_t palBank,
CompactPalette const&palette,
size_t const page) noexcept {
size_t page) noexcept {
if (palette.pages.empty()) {
return {};
}
@@ -52,7 +52,7 @@ ox::Error loadBgPalette(
ox::Error loadSpritePalette(
Context&,
CompactPalette const&palette,
size_t const page) noexcept {
size_t page) noexcept {
if (palette.pages.empty()) {
return {};
}
@@ -133,7 +133,7 @@ ox::Error loadBgTileSheet(
ox::Error loadBgTileSheet(
Context &ctx,
unsigned const cbb,
unsigned cbb,
CompactTileSheet const&ts,
ox::Optional<unsigned> const&paletteBank) noexcept {
auto const cnt = (ts.pixels.size() * PixelsPerTile) / (1 + (ts.bpp == 4));
@@ -184,7 +184,7 @@ static void setSpritesBpp(unsigned const bpp) noexcept {
ox::Error loadSpriteTileSheet(
Context &ctx,
CompactTileSheet const&ts,
bool const loadDefaultPalette) noexcept {
bool loadDefaultPalette) noexcept {
for (size_t i = 0; i < ts.pixels.size(); i += 2) {
uint16_t v = ts.pixels[i];
v |= static_cast<uint16_t>(ts.pixels[i + 1] << 8);
@@ -206,8 +206,7 @@ ox::Error loadSpriteTileSheet(
return {};
}
void setBgTile(
Context &ctx, uint_t const bgIdx, int const column, int const row, BgTile const&tile) noexcept {
void setBgTile(Context &ctx, uint_t bgIdx, int column, int row, BgTile const&tile) noexcept {
auto const tileIdx = static_cast<std::size_t>(row * tileColumns(ctx) + column);
// see Tonc 9.3
MEM_BG_MAP[bgIdx][tileIdx] =
@@ -217,7 +216,7 @@ void setBgTile(
static_cast<uint16_t>(tile.palBank << 0xc);
}
void clearBg(Context &ctx, uint_t const bgIdx) noexcept {
void clearBg(Context &ctx, uint_t bgIdx) noexcept {
memset(MEM_BG_MAP[bgIdx].data(), 0, static_cast<size_t>(tileRows(ctx) * tileColumns(ctx)));
}
@@ -225,39 +224,39 @@ uint8_t bgStatus(Context&) noexcept {
return (REG_DISPCTL >> 8u) & 0b1111u;
}
void setBgStatus(Context&, uint32_t const status) noexcept {
void setBgStatus(Context&, uint32_t status) noexcept {
constexpr auto BgStatus = 8;
REG_DISPCTL = (REG_DISPCTL & ~0b111100000000u) | status << BgStatus;
}
bool bgStatus(Context&, unsigned const bg) noexcept {
bool bgStatus(Context&, unsigned bg) noexcept {
return (REG_DISPCTL >> (8 + bg)) & 1;
}
void setBgStatus(Context&, unsigned const bg, bool const status) noexcept {
void setBgStatus(Context&, unsigned bg, bool status) noexcept {
constexpr auto Bg0Status = 8;
const auto mask = static_cast<uint32_t>(status) << (Bg0Status + bg);
REG_DISPCTL = REG_DISPCTL | ((REG_DISPCTL & ~mask) | mask);
}
void setBgBpp(Context&, unsigned const bgIdx, unsigned const bpp) noexcept {
void setBgBpp(Context&, unsigned bgIdx, unsigned bpp) noexcept {
auto &bgCtl = regBgCtl(bgIdx);
teagba::bgSetBpp(bgCtl, bpp);
}
void setBgCbb(Context &ctx, unsigned const bgIdx, unsigned const cbbIdx) noexcept {
void setBgCbb(Context &ctx, unsigned bgIdx, unsigned cbb) noexcept {
auto &bgCtl = regBgCtl(bgIdx);
const auto &cbbData = ctx.cbbData[cbbIdx];
const auto &cbbData = ctx.cbbData[cbb];
teagba::bgSetBpp(bgCtl, cbbData.bpp);
teagba::bgSetCbb(bgCtl, cbbIdx);
teagba::bgSetCbb(bgCtl, cbb);
}
void setBgPriority(Context&, uint_t const bgIdx, uint_t const priority) noexcept {
void setBgPriority(Context&, uint_t bgIdx, uint_t priority) noexcept {
auto &bgCtl = regBgCtl(bgIdx);
bgCtl = (bgCtl & 0b1111'1111'1111'1100u) | (priority & 0b11);
}
void hideSprite(Context&, unsigned const idx) noexcept {
void hideSprite(Context&, unsigned idx) noexcept {
//oxAssert(g_spriteUpdates < config::GbaSpriteBufferLen, "Sprite update buffer overflow");
teagba::addSpriteUpdate({
.attr0 = uint16_t{0b11 << 8},
@@ -265,7 +264,7 @@ void hideSprite(Context&, unsigned const idx) noexcept {
});
}
void showSprite(Context&, unsigned const idx) noexcept {
void showSprite(Context&, unsigned idx) noexcept {
//oxAssert(g_spriteUpdates < config::GbaSpriteBufferLen, "Sprite update buffer overflow");
teagba::addSpriteUpdate({
.attr0 = 0,
@@ -273,7 +272,7 @@ void showSprite(Context&, unsigned const idx) noexcept {
});
}
void setSprite(Context&, uint_t const idx, Sprite const&s) noexcept {
void setSprite(Context&, uint_t idx, Sprite const&s) noexcept {
//oxAssert(g_spriteUpdates < config::GbaSpriteBufferLen, "Sprite update buffer overflow");
uint16_t const eightBpp = s.bpp == 8;
teagba::addSpriteUpdate({
@@ -294,7 +293,7 @@ void setSprite(Context&, uint_t const idx, Sprite const&s) noexcept {
});
}
uint_t spriteCount(Context const&) noexcept {
uint_t spriteCount(Context&) noexcept {
return SpriteCount;
}

View File

@@ -106,7 +106,7 @@ static constexpr ox::CStringView spritefshadTmpl = R"glsl(
})glsl";
[[nodiscard]]
static constexpr auto bgVertexRow(uint_t const x, uint_t const y) noexcept {
static constexpr auto bgVertexRow(uint_t x, uint_t y) noexcept {
return y * TileRows + x;
}
@@ -183,7 +183,7 @@ static void setTileBufferObject(
ox::spancpy<GLuint>(ebo, elms);
}
static void initSpriteBufferObjects(Context const &ctx, glutils::BufferSet &bs) noexcept {
static void initSpriteBufferObjects(Context &ctx, glutils::BufferSet &bs) noexcept {
for (auto i = 0u; i < ctx.spriteCount; ++i) {
auto const vbo = ox::Span{bs.vertices}
+ i * static_cast<std::size_t>(SpriteVertexVboLength);
@@ -256,7 +256,7 @@ static void initSpritesBufferset(Context &ctx) noexcept {
}
static void initBackgroundBufferset(
GLuint const shader,
GLuint shader,
glutils::BufferSet &bs) noexcept {
// vao
bs.vao = glutils::generateVertexArrayObject();
@@ -290,8 +290,8 @@ static void initBackgroundBufferset(
}
static glutils::GLTexture createTexture(
GLsizei const w,
GLsizei const h,
GLsizei w,
GLsizei h,
void const*pixels) noexcept {
GLuint texId = 0;
glGenTextures(1, &texId);
@@ -375,10 +375,10 @@ static void drawSprites(Context &ctx, ox::Size const&renderSz) noexcept {
static void loadPalette(
ox::Array<GLfloat, 1024> &palette,
size_t const palOffset,
GLuint const shaderPgrm,
size_t palOffset,
GLuint shaderPgrm,
CompactPalette const&pal,
size_t const page = 0) noexcept {
size_t page = 0) noexcept {
static constexpr std::size_t ColorCnt = 256;
for (auto i = palOffset; auto const c : pal.pages[page]) {
palette[i++] = redf(c);
@@ -523,18 +523,14 @@ static ox::Result<TileSheetData> normalizeTileSheet(
pixels[i * 2 + 1] = ts.pixels[i] >> 4;
}
}
return TileSheetData{
.pixels = std::move(pixels),
.width = width,
.height = height
};
return TileSheetData{std::move(pixels), width, height};
}
ox::Error loadBgPalette(
Context &ctx,
size_t const palBank,
size_t palBank,
CompactPalette const&palette,
size_t const page) noexcept {
size_t page) noexcept {
renderer::loadPalette(ctx.bgPalette, palBank * 16 * 4, ctx.bgShader, palette, page);
return {};
}
@@ -542,14 +538,14 @@ ox::Error loadBgPalette(
ox::Error loadSpritePalette(
Context &ctx,
CompactPalette const&palette,
size_t const page) noexcept {
size_t page) noexcept {
ox::Array<GLfloat, 1024> pal;
renderer::loadPalette(pal, 0, ctx.spriteShader, palette, page);
return {};
}
static ox::Result<TileSheetData> buildSetTsd(
Context const &ctx,
Context &ctx,
TileSheetSet const&set) noexcept {
auto &kctx = keelCtx(ctx.turbineCtx);
TileSheetData setTsd;
@@ -628,7 +624,7 @@ ox::Error loadBgTileSheet(
ox::Error loadBgTileSheet(
Context &ctx,
uint_t const cbb,
uint_t cbb,
CompactTileSheet const&ts,
ox::Optional<unsigned> const&paletteBank) noexcept {
auto const bytesPerTile = static_cast<uint64_t>(PixelsPerTile / (1 + (ts.bpp == 4)));
@@ -642,7 +638,7 @@ ox::Error loadBgTileSheet(
ox::Error loadBgTileSheet(
Context &ctx,
unsigned const cbb,
unsigned cbb,
TileSheetSet const&set) noexcept {
OX_REQUIRE(setTsd, buildSetTsd(ctx, set));
ctx.cbbs[cbb].tex = renderer::createTexture(setTsd.width, setTsd.height, setTsd.pixels.data());
@@ -652,7 +648,7 @@ ox::Error loadBgTileSheet(
ox::Error loadSpriteTileSheet(
Context &ctx,
CompactTileSheet const&ts,
bool const loadDefaultPalette) noexcept {
bool loadDefaultPalette) noexcept {
OX_REQUIRE(tsd, normalizeTileSheet(ts));
oxTracef("nostalgia.gfx.gl", "loadSpriteTexture: { w: {}, h: {} }", tsd.width, tsd.height);
ctx.spriteBlocks.tex = renderer::createTexture(tsd.width, tsd.height, tsd.pixels.data());
@@ -673,8 +669,8 @@ ox::Error loadSpriteTileSheet(
void setBgTile(
Context &ctx,
uint_t bgIdx,
int const column,
int const row,
int column,
int row,
BgTile const&tile) noexcept {
oxTracef(
"nostalgia.gfx.setBgTile",
@@ -702,7 +698,7 @@ void setBgTile(
cbb.updated = true;
}
void clearBg(Context &ctx, uint_t const bgIdx) noexcept {
void clearBg(Context &ctx, uint_t bgIdx) noexcept {
auto &cbb = ctx.cbbs[static_cast<std::size_t>(bgIdx)];
initBackgroundBufferObjects(cbb);
cbb.updated = true;
@@ -718,59 +714,61 @@ uint8_t bgStatus(Context &ctx) noexcept {
return out;
}
void setBgStatus(Context &ctx, uint32_t const status) noexcept {
void setBgStatus(Context &ctx, uint32_t status) noexcept {
for (uint_t i = 0; i < ctx.cbbs.size(); ++i) {
ctx.backgrounds[i].enabled = (status >> i) & 1;
}
}
bool bgStatus(Context &ctx, uint_t const bg) noexcept {
bool bgStatus(Context &ctx, uint_t bg) noexcept {
return ctx.backgrounds[bg].enabled;
}
void setBgStatus(Context&ctx, uint_t const bg, bool const status) noexcept {
void setBgStatus(Context&ctx, uint_t bg, bool status) noexcept {
ctx.backgrounds[bg].enabled = status;
}
void setBgCbb(Context &ctx, uint_t const bgIdx, uint_t const cbbIdx) noexcept {
void setBgBpp(Context&, unsigned, unsigned) noexcept {}
void setBgCbb(Context &ctx, uint_t bgIdx, uint_t cbbIdx) noexcept {
auto &bg = ctx.backgrounds[bgIdx];
bg.cbbIdx = cbbIdx;
}
void setBgPriority(Context &ctx, uint_t const bgIdx, uint_t const priority) noexcept {
void setBgPriority(Context &ctx, uint_t bgIdx, uint_t priority) noexcept {
auto &bg = ctx.backgrounds[bgIdx];
bg.priority = static_cast<float>(priority & 0b11);
}
void hideSprite(Context &ctx, uint_t const idx) noexcept {
void hideSprite(Context &ctx, uint_t idx) noexcept {
auto &s = ctx.spriteStates[idx];
s.enabled = false;
renderer::setSprite(ctx, idx, s);
}
void showSprite(Context &ctx, uint_t const idx) noexcept {
void showSprite(Context &ctx, uint_t idx) noexcept {
auto &s = ctx.spriteStates[idx];
s.enabled = true;
renderer::setSprite(ctx, idx, s);
}
void setSprite(Context &ctx, uint_t const idx, Sprite const&sprite) noexcept {
void setSprite(Context &ctx, uint_t idx, Sprite const&sprite) noexcept {
auto &s = ctx.spriteStates[idx];
s = sprite;
renderer::setSprite(ctx, idx, s);
}
uint_t spriteCount(Context const &ctx) noexcept {
uint_t spriteCount(Context &ctx) noexcept {
return ctx.spriteCount;
}
namespace gl {
ox::Size drawSize(int const scale) noexcept {
ox::Size drawSize(int scale) noexcept {
return {240 * scale, 160 * scale};
}
void draw(Context &ctx, ox::Size const&renderSz) noexcept {
void draw(gfx::Context &ctx, ox::Size const&renderSz) noexcept {
glViewport(0, 0, renderSz.width, renderSz.height);
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
@@ -785,7 +783,7 @@ void draw(Context &ctx, ox::Size const&renderSz) noexcept {
glDisable(GL_BLEND);
}
void draw(Context &ctx, int scale) noexcept {
void draw(gfx::Context &ctx, int scale) noexcept {
draw(ctx, drawSize(scale));
}

View File

@@ -15,7 +15,7 @@ target_link_libraries(
target_compile_definitions(
NostalgiaStudio PUBLIC
OLYMPIC_APP_VERSION="dev build"
OLYMPIC_APP_VERSION="d2025.05.0"
)
install(

View File

@@ -18,7 +18,7 @@
<string>APPL</string>
<key>CFBundleVersion</key>
<string>dev build</string>
<string>d2025.05.0</string>
<key>LSMinimumSystemVersion</key>
<string>12.0.0</string>

View File

@@ -28,7 +28,7 @@ install(
DIRECTORY
../include/keel
DESTINATION
include
include/keel
)
install(
@@ -60,11 +60,4 @@ if(TURBINE_BUILD_TYPE STREQUAL "Native")
OxClaw
OxLogConn
)
install(
TARGETS
KeelPack-AppLib
DESTINATION
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
endif()

View File

@@ -44,5 +44,5 @@ install(
DIRECTORY
../include/studio
DESTINATION
include
include/studio
)

View File

@@ -38,7 +38,7 @@ install(
DIRECTORY
../include/turbine
DESTINATION
include
include/turbine
)
install(