diff --git a/build.zig b/build.zig index 5485cda47..3987242d8 100644 --- a/build.zig +++ b/build.zig @@ -205,8 +205,9 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std. if (options.rmodels) { try c_source_files.append("src/rmodels.c"); } - raylib_mod.addCMacro("SUPPORT_MODULE_RAUDIO", &.{@as(u8, @intFromBool(options.raudio)) + 0x30}); - if (options.raudio) { + const raudio_enabled = options.raudio and options.platform != .wasigl; + raylib_mod.addCMacro("SUPPORT_MODULE_RAUDIO", &.{@as(u8, @intFromBool(raudio_enabled)) + 0x30}); + if (raudio_enabled) { try c_source_files.append("src/raudio.c"); } @@ -361,6 +362,12 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std. raylib_mod.addCMacro(OpenglVersion.gl_soft.toCMacroStr(), ""); raylib_mod.addCMacro("PLATFORM_MEMORY", ""); }, + .wasigl => { + raylib_mod.addCMacro("PLATFORM_WASIGL", ""); + raylib_mod.addCMacro("GRAPHICS_API_OPENGL_ES2", ""); + raylib_mod.addIncludePath(b.path("src/external/glfw/include")); + raylib.import_symbols = true; + }, .win32 => { if (target.result.os.tag != .windows) { @panic("Target is not supported with this platform"); @@ -573,17 +580,7 @@ pub const LinuxDisplayBackend = enum { Both, }; -pub const PlatformBackend = enum { - glfw, - rgfw, - sdl, - sdl2, - sdl3, - memory, - win32, - drm, - android, -}; +pub const PlatformBackend = enum { glfw, rgfw, sdl, sdl2, sdl3, memory, win32, drm, android, wasigl }; fn translateCMod( comptime header: []const u8, @@ -687,6 +684,7 @@ fn addExamples( } if (std.mem.eql(u8, filename, "raylib_opengl_interop")) { if (platform == .drm) continue; + if (platform == .wasigl) continue; if (target.result.os.tag == .macos) continue; exe_mod.addIncludePath(b.path("src/external")); } @@ -794,4 +792,3 @@ fn waylandGenerate( } } } - diff --git a/src/Makefile b/src/Makefile index f3c7d5d61..436019c68 100644 --- a/src/Makefile +++ b/src/Makefile @@ -578,6 +578,14 @@ ifeq ($(TARGET_PLATFORM),PLATFORM_ANDROID) endif endif +ifeq ($(PLATFORM),PLATFORM_WASIGL) + WASI_SDK ?= /opt/wasi-sdk + CC = $(WASI_SDK)/bin/clang + AR = $(WASI_SDK)/bin/llvm-ar + LDFLAGS += -Wl,--allow-undefined + CFLAGS += -DPLATFORM_WASIGL -DGRAPHICS_API_OPENGL_ES2 +endif + # Define library paths containing required libs: LDFLAGS # NOTE: This is only required for dynamic library generation #------------------------------------------------------------------------------------------------ diff --git a/src/platforms/rcore_wasigl.c b/src/platforms/rcore_wasigl.c new file mode 100644 index 000000000..689a3f338 --- /dev/null +++ b/src/platforms/rcore_wasigl.c @@ -0,0 +1 @@ +#include "./rcore_desktop_glfw.c" diff --git a/src/rcore.c b/src/rcore.c index 0dad0cd96..a5d909041 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -33,6 +33,8 @@ * - Android (ARM, ARM64) * > PLATFORM_MEMORY * - Memory framebuffer output, using software renderer, no OS required +* > PLATFORM_WASIGL +* - WASM that imports GL/GLFW from host * * CONFIGURATION: * #define SUPPORT_CAMERA_SYSTEM 1 @@ -528,6 +530,8 @@ const char *TextFormat(const char *text, ...); // Formatting of text with variab #include "platforms/rcore_android.c" #elif defined(PLATFORM_MEMORY) #include "platforms/rcore_memory.c" +#elif defined(PLATFORM_WASIGL) + #include "platforms/rcore_wasigl.c" #else // TODO: Include your custom platform backend! // i.e software rendering backend or console backend! diff --git a/src/rlgl.h b/src/rlgl.h index ea5673397..037e27073 100644 --- a/src/rlgl.h +++ b/src/rlgl.h @@ -883,7 +883,7 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad // NOTE: OpenGL ES 2.0 can be enabled on Desktop platforms, // in that case, functions are loaded from a custom glad for OpenGL ES 2.0 // TODO: OpenGL ES 2.0 support shouldn't be platform-dependent, neither require GLAD - #if defined(PLATFORM_DESKTOP_GLFW) || defined(PLATFORM_DESKTOP_SDL) + #if defined(PLATFORM_DESKTOP_GLFW) || defined(PLATFORM_DESKTOP_SDL) || defined(PLATFORM_WASIGL) #define GLAD_GLES2_IMPLEMENTATION #include "external/glad_gles2.h" #else @@ -2484,7 +2484,7 @@ void rlLoadExtensions(void *loader) #elif defined(GRAPHICS_API_OPENGL_ES2) - #if defined(PLATFORM_DESKTOP_GLFW) || defined(PLATFORM_DESKTOP_SDL) + #if defined(PLATFORM_DESKTOP_GLFW) || defined(PLATFORM_DESKTOP_SDL) || defined(PLATFORM_WASIGL) // TODO: Support GLAD loader for OpenGL ES 3.0 if (gladLoadGLES2((GLADloadfunc)loader) == 0) TRACELOG(RL_LOG_WARNING, "GLAD: Cannot load OpenGL ES2.0 functions"); else TRACELOG(RL_LOG_INFO, "GLAD: OpenGL ES 2.0 loaded successfully");