Compare commits

...

6 Commits

Author SHA1 Message Date
ae81f6b3de [ox/std] Make Span::operator[] const
All checks were successful
Build / build (push) Successful in 1m17s
2025-05-13 22:02:23 -05:00
c1108301c0 [nostalgia/gfx] Cleanup 2025-05-13 22:01:59 -05:00
83fbe6ac74 [keel,turbine,studio] Fix some install mistakes
All checks were successful
Build / build (push) Successful in 2m17s
2025-05-13 21:39:37 -05:00
80b452833f [nostalgia/gfx] Cleanup
All checks were successful
Build / build (push) Successful in 2m28s
2025-05-13 21:24:04 -05:00
0fa394333b [nostalgia] Add release note about Mac menubar using Cmd
All checks were successful
Build / build (push) Successful in 1m15s
2025-05-10 01:01:11 -05:00
cae7535034 [nostalgia] Fix typos in release notes
All checks were successful
Build / build (push) Successful in 1m15s
2025-05-10 00:57:45 -05:00
8 changed files with 78 additions and 72 deletions

View File

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

View File

@@ -4,16 +4,17 @@
* Change application font to Roboto Medium * Change application font to Roboto Medium
* Closing application will now confirm with user if any files have unsaved * Closing application will now confirm with user if any files have unsaved
changes. changes.
* UUID duplicates will now be reported when opening a project * UUID duplicates will now be reported when opening a project.
* Deleting a directory now closes files in that directory * Deleting a directory now closes files in that directory.
* Delete key now initiates deletion of selected directory * Delete key now initiates deletion of selected directory.
* Remove ability to re-order tabs. There were bugs associated with that. * Remove ability to re-order tabs. There were bugs associated with that.
* TileSheetEditor: Fix selection clearing in to work when clicking outside * Mac: Menu bar shortcuts now say Cmd instead of Ctrl.
image. * TileSheetEditor: Fix selection clearing to work when clicking outside image.
* TileSheetEditor: Fix Delete Tile functionality, which was completely broken * TileSheetEditor: Fix Delete Tile functionality, which was completely broken
* PaletteEditor: Fix color number key range in. Previously, pressing A caused * TileSheetEditor: Fix Insert Tile functionality, which was completely broken
the editor to jump to the last color. * PaletteEditor: Fix color number key range. Previously, pressing A caused the
* PaletteEditor: page rename will now take effect upon pressing enter if the editor to jump to the last color.
* PaletteEditor: Page rename will now take effect upon pressing enter if the
text input has focus text input has focus
# d2025.02.1 # 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 setBgStatus(Context &ctx, unsigned bg, bool status) noexcept;
void setBgCbb(Context &ctx, unsigned bgIdx, unsigned cbb) noexcept; 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;
@@ -231,10 +231,10 @@ void hideSprite(Context &ctx, unsigned) noexcept;
void showSprite(Context &ctx, unsigned) noexcept; void showSprite(Context &ctx, unsigned) noexcept;
void setSprite(Context &c, uint_t idx, Sprite const&s) noexcept; void setSprite(Context &ctx, uint_t idx, Sprite const&sprite) noexcept;
[[nodiscard]] [[nodiscard]]
uint_t spriteCount(Context &ctx) noexcept; uint_t spriteCount(Context const &ctx) noexcept;
ox::Error initConsole(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( ox::Error loadBgPalette(
Context&, Context&,
size_t palBank, size_t const palBank,
CompactPalette const&palette, CompactPalette const&palette,
size_t page) noexcept { size_t const page) noexcept {
if (palette.pages.empty()) { if (palette.pages.empty()) {
return {}; return {};
} }
@@ -52,7 +52,7 @@ ox::Error loadBgPalette(
ox::Error loadSpritePalette( ox::Error loadSpritePalette(
Context&, Context&,
CompactPalette const&palette, CompactPalette const&palette,
size_t page) noexcept { size_t const page) noexcept {
if (palette.pages.empty()) { if (palette.pages.empty()) {
return {}; return {};
} }
@@ -133,7 +133,7 @@ ox::Error loadBgTileSheet(
ox::Error loadBgTileSheet( ox::Error loadBgTileSheet(
Context &ctx, Context &ctx,
unsigned 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() * PixelsPerTile) / (1 + (ts.bpp == 4));
@@ -184,7 +184,7 @@ static void setSpritesBpp(unsigned const bpp) noexcept {
ox::Error loadSpriteTileSheet( ox::Error loadSpriteTileSheet(
Context &ctx, Context &ctx,
CompactTileSheet const&ts, CompactTileSheet const&ts,
bool loadDefaultPalette) noexcept { bool const loadDefaultPalette) noexcept {
for (size_t i = 0; i < ts.pixels.size(); i += 2) { for (size_t i = 0; i < ts.pixels.size(); i += 2) {
uint16_t v = ts.pixels[i]; uint16_t v = ts.pixels[i];
v |= static_cast<uint16_t>(ts.pixels[i + 1] << 8); v |= static_cast<uint16_t>(ts.pixels[i + 1] << 8);
@@ -206,7 +206,8 @@ ox::Error loadSpriteTileSheet(
return {}; return {};
} }
void setBgTile(Context &ctx, uint_t bgIdx, int column, int row, BgTile const&tile) noexcept { void setBgTile(
Context &ctx, uint_t const bgIdx, int const column, int const row, BgTile const&tile) noexcept {
auto const tileIdx = static_cast<std::size_t>(row * tileColumns(ctx) + column); auto const tileIdx = static_cast<std::size_t>(row * tileColumns(ctx) + column);
// see Tonc 9.3 // see Tonc 9.3
MEM_BG_MAP[bgIdx][tileIdx] = MEM_BG_MAP[bgIdx][tileIdx] =
@@ -216,7 +217,7 @@ void setBgTile(Context &ctx, uint_t bgIdx, int column, int row, BgTile const&til
static_cast<uint16_t>(tile.palBank << 0xc); static_cast<uint16_t>(tile.palBank << 0xc);
} }
void clearBg(Context &ctx, uint_t bgIdx) noexcept { void clearBg(Context &ctx, uint_t const bgIdx) noexcept {
memset(MEM_BG_MAP[bgIdx].data(), 0, static_cast<size_t>(tileRows(ctx) * tileColumns(ctx))); memset(MEM_BG_MAP[bgIdx].data(), 0, static_cast<size_t>(tileRows(ctx) * tileColumns(ctx)));
} }
@@ -224,39 +225,39 @@ uint8_t bgStatus(Context&) noexcept {
return (REG_DISPCTL >> 8u) & 0b1111u; return (REG_DISPCTL >> 8u) & 0b1111u;
} }
void setBgStatus(Context&, uint32_t status) noexcept { void setBgStatus(Context&, uint32_t const status) noexcept {
constexpr auto BgStatus = 8; constexpr auto BgStatus = 8;
REG_DISPCTL = (REG_DISPCTL & ~0b111100000000u) | status << BgStatus; REG_DISPCTL = (REG_DISPCTL & ~0b111100000000u) | status << BgStatus;
} }
bool bgStatus(Context&, unsigned bg) noexcept { bool bgStatus(Context&, unsigned const bg) noexcept {
return (REG_DISPCTL >> (8 + bg)) & 1; return (REG_DISPCTL >> (8 + bg)) & 1;
} }
void setBgStatus(Context&, unsigned bg, bool status) noexcept { void setBgStatus(Context&, unsigned const bg, bool const status) noexcept {
constexpr auto Bg0Status = 8; constexpr auto Bg0Status = 8;
const auto mask = static_cast<uint32_t>(status) << (Bg0Status + bg); const auto mask = static_cast<uint32_t>(status) << (Bg0Status + bg);
REG_DISPCTL = REG_DISPCTL | ((REG_DISPCTL & ~mask) | mask); REG_DISPCTL = REG_DISPCTL | ((REG_DISPCTL & ~mask) | mask);
} }
void setBgBpp(Context&, unsigned bgIdx, unsigned bpp) noexcept { void setBgBpp(Context&, unsigned const bgIdx, unsigned const bpp) noexcept {
auto &bgCtl = regBgCtl(bgIdx); auto &bgCtl = regBgCtl(bgIdx);
teagba::bgSetBpp(bgCtl, bpp); teagba::bgSetBpp(bgCtl, bpp);
} }
void setBgCbb(Context &ctx, unsigned bgIdx, unsigned cbb) noexcept { void setBgCbb(Context &ctx, unsigned const bgIdx, unsigned const cbbIdx) noexcept {
auto &bgCtl = regBgCtl(bgIdx); auto &bgCtl = regBgCtl(bgIdx);
const auto &cbbData = ctx.cbbData[cbb]; const auto &cbbData = ctx.cbbData[cbbIdx];
teagba::bgSetBpp(bgCtl, cbbData.bpp); teagba::bgSetBpp(bgCtl, cbbData.bpp);
teagba::bgSetCbb(bgCtl, cbb); teagba::bgSetCbb(bgCtl, cbbIdx);
} }
void setBgPriority(Context&, uint_t bgIdx, uint_t priority) noexcept { void setBgPriority(Context&, uint_t const bgIdx, uint_t const priority) noexcept {
auto &bgCtl = regBgCtl(bgIdx); auto &bgCtl = regBgCtl(bgIdx);
bgCtl = (bgCtl & 0b1111'1111'1111'1100u) | (priority & 0b11); bgCtl = (bgCtl & 0b1111'1111'1111'1100u) | (priority & 0b11);
} }
void hideSprite(Context&, unsigned 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({
.attr0 = uint16_t{0b11 << 8}, .attr0 = uint16_t{0b11 << 8},
@@ -264,7 +265,7 @@ void hideSprite(Context&, unsigned idx) noexcept {
}); });
} }
void showSprite(Context&, unsigned idx) noexcept { void showSprite(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({
.attr0 = 0, .attr0 = 0,
@@ -272,7 +273,7 @@ void showSprite(Context&, unsigned idx) noexcept {
}); });
} }
void setSprite(Context&, uint_t idx, Sprite const&s) noexcept { void setSprite(Context&, uint_t const idx, Sprite const&s) noexcept {
//oxAssert(g_spriteUpdates < config::GbaSpriteBufferLen, "Sprite update buffer overflow"); //oxAssert(g_spriteUpdates < config::GbaSpriteBufferLen, "Sprite update buffer overflow");
uint16_t const eightBpp = s.bpp == 8; uint16_t const eightBpp = s.bpp == 8;
teagba::addSpriteUpdate({ teagba::addSpriteUpdate({
@@ -293,7 +294,7 @@ void setSprite(Context&, uint_t idx, Sprite const&s) noexcept {
}); });
} }
uint_t spriteCount(Context&) noexcept { uint_t spriteCount(Context const&) noexcept {
return SpriteCount; return SpriteCount;
} }

View File

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

View File

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

View File

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

View File

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