Skip to content

Commit 40561ba

Browse files
Copilotsmokku
andcommitted
Fix OpenGL minimum version handling for compatibility with older hardware
Agent-Logs-Url: https://github.com/X65/emu/sessions/7482445c-d7b5-4ffa-ad1d-a48d8ea8583a Co-authored-by: smokku <147687+smokku@users.noreply.github.com>
1 parent bb2435a commit 40561ba

3 files changed

Lines changed: 30 additions & 0 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ target_link_libraries(emu
6262
SDL3::SDL3)
6363

6464
target_compile_definitions(emu PUBLIC CHIPS_USE_UI)
65+
target_compile_definitions(emu PRIVATE ${SOKOL_GFX_BACKEND_DEFINE})
6566

6667
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
6768
message(STATUS "Building for Linux")

src/common/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
11
# select the sokol-gfx backend depending on platform
22
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
33
add_definitions(-DSOKOL_GLES3)
4+
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_GLES3" PARENT_SCOPE)
45
set(slang "glsl300es")
56
elseif(FIPS_ANDROID)
67
add_definitions(-DSOKOL_GLES3)
8+
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_GLES3" PARENT_SCOPE)
79
set(slang "glsl300es")
810
elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows")
911
add_definitions(-DSOKOL_GLCORE)
12+
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_GLCORE" PARENT_SCOPE)
1013
set(slang "glsl410")
1114
elseif(FIPS_OSX)
1215
add_definitions(-DSOKOL_METAL)
16+
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_METAL" PARENT_SCOPE)
1317
if (FIPS_IOS)
1418
set(slang "metal_ios")
1519
else()
1620
set(slang "metal_macos")
1721
endif()
1822
else()
1923
add_definitions(-DSOKOL_GLES3)
24+
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_GLES3" PARENT_SCOPE)
2025
set(slang "glsl300es")
2126
endif()
2227

src/x65.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,13 @@ static void app_load_rom_labels(const char* rom_file) {
158158
}
159159

160160
void app_init(void) {
161+
#if defined(SOKOL_GLES3) || defined(SOKOL_GLCORE)
162+
log_func(3, "app_init", __FILE__, __LINE__,
163+
"OpenGL context: %s %d.%d",
164+
sapp_gl_is_gles() ? "OpenGL ES" : "OpenGL",
165+
sapp_gl_get_major_version(),
166+
sapp_gl_get_minor_version());
167+
#endif
161168
saudio_setup(&(saudio_desc){
162169
.sample_rate = SGU_CHIP_CLOCK,
163170
.num_channels = SGU_AUDIO_CHANNELS,
@@ -838,6 +845,19 @@ sapp_desc sokol_main(int argc, char* argv[]) {
838845
const chips_display_info_t info = x65_display_info(0);
839846
const int default_width = info.screen.width + BORDER_LEFT + BORDER_RIGHT;
840847
const int default_height = info.screen.height + BORDER_TOP + BORDER_BOTTOM;
848+
849+
// Use the minimum OpenGL/GLES version required by the compiled shaders to
850+
// maximize compatibility with older hardware.
851+
// - SOKOL_GLES3 shaders are compiled for glsl300es -> requires GLES 3.0
852+
// - SOKOL_GLCORE shaders are compiled for glsl410 -> requires GL 4.1
853+
#if defined(SOKOL_GLES3)
854+
const int gl_major = 3, gl_minor = 0;
855+
#elif defined(SOKOL_GLCORE)
856+
const int gl_major = 4, gl_minor = 1;
857+
#else
858+
const int gl_major = 0, gl_minor = 0; // Metal / D3D11 / WebGPU: ignored
859+
#endif
860+
841861
return (sapp_desc){
842862
.init_cb = app_init,
843863
.frame_cb = app_frame,
@@ -855,6 +875,10 @@ sapp_desc sokol_main(int argc, char* argv[]) {
855875
},
856876
.enable_clipboard = true,
857877
.enable_dragndrop = true,
878+
.gl = {
879+
.major_version = gl_major,
880+
.minor_version = gl_minor,
881+
},
858882
.html5 = {
859883
.bubble_mouse_events = true,
860884
.update_document_title = true,

0 commit comments

Comments
 (0)