Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ target_link_libraries(emu
SDL3::SDL3)

target_compile_definitions(emu PUBLIC CHIPS_USE_UI)
target_compile_definitions(emu PRIVATE ${SOKOL_GFX_BACKEND_DEFINE})

if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
message(STATUS "Building for Linux")
Expand Down
5 changes: 5 additions & 0 deletions src/common/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,22 +1,27 @@
# select the sokol-gfx backend depending on platform
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
add_definitions(-DSOKOL_GLES3)
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_GLES3" PARENT_SCOPE)
set(slang "glsl300es")
elseif(FIPS_ANDROID)
add_definitions(-DSOKOL_GLES3)
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_GLES3" PARENT_SCOPE)
set(slang "glsl300es")
elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows")
add_definitions(-DSOKOL_GLCORE)
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_GLCORE" PARENT_SCOPE)
set(slang "glsl410")
elseif(FIPS_OSX)
add_definitions(-DSOKOL_METAL)
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_METAL" PARENT_SCOPE)
if (FIPS_IOS)
set(slang "metal_ios")
else()
set(slang "metal_macos")
endif()
else()
add_definitions(-DSOKOL_GLES3)
set(SOKOL_GFX_BACKEND_DEFINE "SOKOL_GLES3" PARENT_SCOPE)
set(slang "glsl300es")
endif()

Expand Down
23 changes: 23 additions & 0 deletions src/x65.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,12 @@ static void app_load_rom_labels(const char* rom_file) {
}

void app_init(void) {
#if defined(SOKOL_GLES3) || defined(SOKOL_GLCORE)
LOG_INFO("OpenGL context: %s %d.%d",
sapp_gl_is_gles() ? "OpenGL ES" : "OpenGL",
sapp_gl_get_major_version(),
sapp_gl_get_minor_version());
#endif
saudio_setup(&(saudio_desc){
.sample_rate = SGU_CHIP_CLOCK,
.num_channels = SGU_AUDIO_CHANNELS,
Expand Down Expand Up @@ -838,6 +844,19 @@ sapp_desc sokol_main(int argc, char* argv[]) {
const chips_display_info_t info = x65_display_info(0);
const int default_width = info.screen.width + BORDER_LEFT + BORDER_RIGHT;
const int default_height = info.screen.height + BORDER_TOP + BORDER_BOTTOM;

// Use the minimum OpenGL/GLES version required by the compiled shaders to
// maximize compatibility with older hardware.
// - SOKOL_GLES3 shaders are compiled for glsl300es -> requires GLES 3.0
// - SOKOL_GLCORE shaders are compiled for glsl410 -> requires GL 4.1
#if defined(SOKOL_GLES3)
const int gl_major = 3, gl_minor = 0;
#elif defined(SOKOL_GLCORE)
const int gl_major = 4, gl_minor = 1;
#else
const int gl_major = 0, gl_minor = 0; // Metal / D3D11 / WebGPU: ignored
#endif

return (sapp_desc){
.init_cb = app_init,
.frame_cb = app_frame,
Expand All @@ -855,6 +874,10 @@ sapp_desc sokol_main(int argc, char* argv[]) {
},
.enable_clipboard = true,
.enable_dragndrop = true,
.gl = {
.major_version = gl_major,
.minor_version = gl_minor,
},
.html5 = {
.bubble_mouse_events = true,
.update_document_title = true,
Expand Down
Loading