From 281fe9408957f5a10df62d46a10ec9b0bac92b80 Mon Sep 17 00:00:00 2001 From: yulya3102 Date: Sat, 1 Feb 2025 08:03:34 +0100 Subject: [PATCH] Add necessary GLES fixes and missing JS functions --- libs/gfx/api/gles32/source/gl.cpp | 27 ++++++++++++++++++++++++++- package/CMakeLists.txt | 1 + 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/libs/gfx/api/gles32/source/gl.cpp b/libs/gfx/api/gles32/source/gl.cpp index 8d5f7cea..14269da1 100644 --- a/libs/gfx/api/gles32/source/gl.cpp +++ b/libs/gfx/api/gles32/source/gl.cpp @@ -803,10 +803,12 @@ namespace gl if (!internal::glGetQueryiv) return false; internal::glGetQueryObjectuiv = reinterpret_cast(internal::get_proc_address("glGetQueryObjectuiv")); if (!internal::glGetQueryObjectuiv) return false; +#if !defined(__EMSCRIPTEN__) internal::glUnmapBuffer = reinterpret_cast(internal::get_proc_address("glUnmapBuffer")); if (!internal::glUnmapBuffer) return false; internal::glGetBufferPointerv = reinterpret_cast(internal::get_proc_address("glGetBufferPointerv")); if (!internal::glGetBufferPointerv) return false; +#endif internal::glDrawBuffers = reinterpret_cast(internal::get_proc_address("glDrawBuffers")); if (!internal::glDrawBuffers) return false; internal::glUniformMatrix2x3fv = reinterpret_cast(internal::get_proc_address("glUniformMatrix2x3fv")); @@ -827,10 +829,12 @@ namespace gl if (!internal::glRenderbufferStorageMultisample) return false; internal::glFramebufferTextureLayer = reinterpret_cast(internal::get_proc_address("glFramebufferTextureLayer")); if (!internal::glFramebufferTextureLayer) return false; +#if !defined(__EMSCRIPTEN__) internal::glMapBufferRange = reinterpret_cast(internal::get_proc_address("glMapBufferRange")); if (!internal::glMapBufferRange) return false; internal::glFlushMappedBufferRange = reinterpret_cast(internal::get_proc_address("glFlushMappedBufferRange")); if (!internal::glFlushMappedBufferRange) return false; +#endif internal::glBindVertexArray = reinterpret_cast(internal::get_proc_address("glBindVertexArray")); if (!internal::glBindVertexArray) return false; internal::glDeleteVertexArrays = reinterpret_cast(internal::get_proc_address("glDeleteVertexArrays")); @@ -984,6 +988,10 @@ namespace gl internal::glGetInternalformativ = reinterpret_cast(internal::get_proc_address("glGetInternalformativ")); if (!internal::glGetInternalformativ) return false; +#if defined(__EMSCRIPTEN__) + return true; +#endif + // OpenGL ES 3.1 internal::glDispatchCompute = reinterpret_cast(internal::get_proc_address("glDispatchCompute")); @@ -1259,7 +1267,13 @@ namespace gl int major_version(){ return 3; } - int minor_version(){ return 2; } + int minor_version(){ +#if defined(__EMSCRIPTEN__) + return 0; +#else + return 2; +#endif + } bool has_extension(const char * name){ return extensions.contains(name); } @@ -1269,6 +1283,16 @@ namespace gl const char * shader_prefix() { +#if defined(__EMSCRIPTEN__) + return R"(#version 300 es + +precision highp int; +precision highp float; +precision highp sampler2D; +precision highp usampler2D; + +)"; +#else return R"(#version 320 es precision highp int; @@ -1277,6 +1301,7 @@ precision highp sampler2D; precision highp usampler2D; )"; +#endif } } // namespace sys diff --git a/package/CMakeLists.txt b/package/CMakeLists.txt index 862baf91..a76bf419 100644 --- a/package/CMakeLists.txt +++ b/package/CMakeLists.txt @@ -24,6 +24,7 @@ if(PSEMEK_PACKAGE_MODE) if(CMAKE_SYSTEM_NAME STREQUAL Emscripten) list(APPEND PSEMEK_PACKAGE_LINK_FLAGS_RAW "-sMIN_WEBGL_VERSION=2" "-sNO_DISABLE_EXCEPTION_CATCHING") + list(APPEND PSEMEK_PACKAGE_LINK_FLAGS_RAW "-sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='$autoResumeAudioContext','$dynCall'") if(CMAKE_BUILD_TYPE STREQUAL Debug) list(APPEND PSEMEK_PACKAGE_LINK_FLAGS_RAW "-g") endif()