Skip to content

Commit 2a540ee

Browse files
committed
lock resolution: 640x480
1 parent 6a9835f commit 2a540ee

2 files changed

Lines changed: 59 additions & 54 deletions

File tree

.github/workflows/emscripten.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on:
44
push:
55
branches:
66
- master
7+
- gpu
78
#- develop
89
tags:
910
- "v*"

src/runtime.cpp

Lines changed: 58 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ CRuntime::~CRuntime()
107107
*/
108108
void CRuntime::paint()
109109
{
110-
CGame &game = *m_game;
111110
/*
111+
CGame &game = *m_game;
112112
if (game.level() == 4)
113113
{
114114
LOGI("paint IN");
@@ -308,6 +308,12 @@ bool CRuntime::createSDLWindow()
308308
#endif
309309
m_resolution = findResolutionIndex();
310310

311+
SDL_SetRenderLogicalPresentation(
312+
m_app.renderer,
313+
width, // e.g. 640
314+
height, // e.g. 480
315+
SDL_LOGICAL_PRESENTATION_INTEGER_SCALE);
316+
311317
return true;
312318
}
313319

@@ -438,10 +444,10 @@ void CRuntime::doInput()
438444
LOGI("SDL_EVENT_WINDOW_RESIZED");
439445
if (!m_app.isFullscreen)
440446
{
441-
LOGI("resized");
447+
LOGI("resized %d x %d", getWidth(), getHeight());
442448
SDL_SetWindowSize(m_app.window, event.window.data1, event.window.data2);
443449
}
444-
// updateScreenInfo();
450+
m_engine->resize(getWidth(), getHeight());
445451
onOrientationChange();
446452
break;
447453

@@ -451,12 +457,10 @@ void CRuntime::doInput()
451457

452458
case SDL_EVENT_WINDOW_RESTORED:
453459
LOGI("SDL_EVENT_WINDOW_RESTORED");
454-
// updateScreenInfo();
455460
break;
456461

457462
case SDL_EVENT_DISPLAY_ORIENTATION:
458463
LOGI("SDL_EVENT_DISPLAY_ORIENTATION");
459-
// updateScreenInfo();
460464
onOrientationChange();
461465
break;
462466

@@ -885,49 +889,6 @@ bool CRuntime::fetchFile(const std::string &path, char **dest, const bool termin
885889

886890
void CRuntime::preloadAssets()
887891
{
888-
/*
889-
std::unique_ptr<CFrameSet> *frameSets[] = {
890-
&m_tiles,
891-
&m_animz,
892-
&m_users,
893-
&m_sheet0,
894-
&m_sheet1,
895-
&m_uisheet,
896-
&m_titlePix,
897-
nullptr,
898-
};
899-
CFileMem mem;
900-
for (size_t i = 0; i < m_assetFiles.size(); ++i)
901-
{
902-
const std::string filename = AssetMan::getPrefix() + "pixels/" + m_assetFiles[i];
903-
if (!frameSets[i])
904-
continue;
905-
*frameSets[i] = std::make_unique<CFrameSet>();
906-
data_t data = AssetMan::read(filename);
907-
if (!data.empty())
908-
{
909-
if (!m_quiet)
910-
LOGI("reading %s", filename.c_str());
911-
mem.replace(data.data(), data.size());
912-
if ((*frameSets[i])->extract(mem))
913-
{
914-
if (!m_quiet)
915-
LOGI("extracted: %ld", ((*frameSets[i])->getSize()));
916-
}
917-
}
918-
else
919-
{
920-
LOGE("can't read: %s", filename.c_str());
921-
}
922-
}
923-
924-
const std::string fontName = AssetMan::getPrefix() + m_config["font"];
925-
data_t data = AssetMan::read(fontName);
926-
if (data.empty())
927-
return;
928-
m_fontData = std::move(data);
929-
*/
930-
931892
const std::string creditsFile = AssetMan::getPrefix() + m_config["credits"];
932893
data_t data = AssetMan::read(creditsFile, true);
933894
if (!data.empty())
@@ -1582,6 +1543,24 @@ void CRuntime::toggleFullscreen()
15821543
}
15831544
else
15841545
{
1546+
if (!m_app.isFullscreen)
1547+
{
1548+
EmscriptenFullscreenStrategy strategy{};
1549+
strategy.scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_ASPECT;
1550+
strategy.canvasResolutionScaleMode =
1551+
EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF;
1552+
strategy.filteringMode =
1553+
EMSCRIPTEN_FULLSCREEN_FILTERING_NEAREST;
1554+
strategy.canvasResizedCallback = nullptr;
1555+
strategy.canvasResizedCallbackUserData = nullptr;
1556+
1557+
emscripten_enter_soft_fullscreen("#canvas", &strategy);
1558+
}
1559+
else
1560+
{
1561+
emscripten_exit_soft_fullscreen();
1562+
}
1563+
/*
15851564
if (m_app.isFullscreen)
15861565
{
15871566
EmscriptenFullscreenStrategy strategy = {
@@ -1596,13 +1575,14 @@ void CRuntime::toggleFullscreen()
15961575
{
15971576
emscripten_exit_soft_fullscreen();
15981577
}
1578+
*/
15991579
}
16001580
#else
16011581
if (m_app.isFullscreen)
16021582
{
16031583
// Currently in fullscreen, switch to windowed
16041584
LOGI("Switching to windowed mode.");
1605-
if (!SDL_SetWindowFullscreen(m_app.window, false)) // false means windowed mode
1585+
if (!SDL_SetWindowFullscreen(m_app.window, 0)) // false means windowed mode
16061586
{
16071587
LOGE("Switching to windowed mode failed: %s", SDL_GetError());
16081588
}
@@ -1613,7 +1593,7 @@ void CRuntime::toggleFullscreen()
16131593
LOGE("SDL_SetWindowSize failed: %s", SDL_GetError());
16141594
}
16151595

1616-
if (!SDL_SetWindowPosition(m_app.window, m_app.windowedX, m_app.windowedX))
1596+
if (!SDL_SetWindowPosition(m_app.window, m_app.windowedX, m_app.windowedY))
16171597
{
16181598
LOGE("SDL_SetWindowPosition failed: %s", SDL_GetError());
16191599
}
@@ -1624,14 +1604,38 @@ void CRuntime::toggleFullscreen()
16241604
LOGI("Switching to fullscreen desktop mode.");
16251605

16261606
// Save current windowed position and size before going fullscreen
1627-
SDL_GetWindowPosition(m_app.window, &m_app.windowedX, &m_app.windowedX);
1607+
SDL_GetWindowPosition(m_app.window, &m_app.windowedX, &m_app.windowedY);
16281608
SDL_GetWindowSize(m_app.window, &m_app.windowedWidth, &m_app.windowedHeigth);
16291609

1630-
if (!SDL_SetWindowFullscreen(m_app.window, true))
1610+
if (!SDL_SetWindowFullscreen(m_app.window, SDL_WINDOW_FULLSCREEN))
16311611
{
16321612
LOGE("Switching to fullscreen mode failed: %s", SDL_GetError());
16331613
}
16341614
}
1615+
1616+
// ---- IMPORTANT: wait until renderer size becomes valid ----
1617+
// REQUIRED: update renderer state AFTER the switch
1618+
int w = 0, h = 0;
1619+
for (int i = 0; i < 5 && (w == 0 || h == 0); ++i)
1620+
{
1621+
SDL_GetRenderOutputSize(m_app.renderer, &w, &h);
1622+
SDL_Delay(1);
1623+
}
1624+
1625+
SDL_Rect vp;
1626+
vp.x = 0;
1627+
vp.y = 0;
1628+
vp.w = w;
1629+
vp.h = h;
1630+
1631+
SDL_SetRenderViewport(m_app.renderer, &vp);
1632+
1633+
SDL_SetRenderLogicalPresentation(
1634+
m_app.renderer,
1635+
w,
1636+
h,
1637+
SDL_LOGICAL_PRESENTATION_INTEGER_SCALE);
1638+
16351639
#endif
16361640
if (m_verbose)
16371641
{
@@ -2017,8 +2021,8 @@ CMenu &CRuntime::initOptionMenu()
20172021
snprintf(tmp, sizeof(tmp), "%dx%d", rez.w, rez.h);
20182022
resolutions.emplace_back(tmp);
20192023
}
2020-
menu.addItem(CMenuItem("SCREEN: %s", resolutions, &m_resolution))
2021-
.setRole(MENU_ITEM_RESOLUTION);
2024+
// menu.addItem(CMenuItem("SCREEN: %s", resolutions, &m_resolution))
2025+
// .setRole(MENU_ITEM_RESOLUTION);
20222026
menu.addItem(CMenuItem("DISPLAY: %s", {"WINDOWED", "FULLSCREEN"}, &m_fullscreen))
20232027
.setRole(MENU_ITEM_FULLSCREEN);
20242028
#endif

0 commit comments

Comments
 (0)