From 58a0f226e680e81d19a80a02ee43e543b24c67d1 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Wed, 5 Feb 2025 14:52:36 +0100 Subject: [PATCH 1/2] Fix GLSL version on some platforms --- src/shadermanager.cpp | 8 +++----- src/shaders/sprite.frag | 17 +++++++++-------- src/shaders/sprite.vert | 6 +++--- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/shadermanager.cpp b/src/shadermanager.cpp index 7d96640..93625ba 100644 --- a/src/shadermanager.cpp +++ b/src/shadermanager.cpp @@ -24,12 +24,10 @@ static float wrapClamp(float n, float min, float max) static const QString VERTEX_SHADER_SRC = ":/qt/qml/ScratchCPP/Render/shaders/sprite.vert"; static const QString FRAGMENT_SHADER_SRC = ":/qt/qml/ScratchCPP/Render/shaders/sprite.frag"; -#if defined(Q_OS_WASM) -static const QString SHADER_PREFIX = ""; // compiles, but doesn't work? -#elif defined(Q_OS_ANDROID) -static const QString SHADER_PREFIX = "#version 300 es\n"; +#ifdef Q_OS_MACOS +static const QString SHADER_PREFIX = "#version 410\n"; #else -static const QString SHADER_PREFIX = "#version 140\n"; +static const QString SHADER_PREFIX = "#version 300 es\n"; #endif static const char *TEXTURE_UNIT_UNIFORM = "u_skin"; diff --git a/src/shaders/sprite.frag b/src/shaders/sprite.frag index 3209cf8..6399587 100644 --- a/src/shaders/sprite.frag +++ b/src/shaders/sprite.frag @@ -35,7 +35,8 @@ uniform vec2 u_skinSize; uniform float u_mosaic; #endif // ENABLE_mosaic -varying vec2 v_texCoord; +in vec2 v_texCoord; +out vec4 fragColor; uniform sampler2D u_skin; // Add this to divisors to prevent division by 0, which results in NaNs propagating through calculations. @@ -147,16 +148,16 @@ void main() } #endif // ENABLE_fisheye - gl_FragColor = texture2D(u_skin, texcoord0); + fragColor = texture(u_skin, texcoord0); #if defined(ENABLE_color) || defined(ENABLE_brightness) // Divide premultiplied alpha values for proper color processing // Add epsilon to avoid dividing by 0 for fully transparent pixels - gl_FragColor.rgb = clamp(gl_FragColor.rgb / (gl_FragColor.a + epsilon), 0.0, 1.0); + fragColor.rgb = clamp(fragColor.rgb / (fragColor.a + epsilon), 0.0, 1.0); #ifdef ENABLE_color { - vec3 hsv = convertRGB2HSV(gl_FragColor.rgb); + vec3 hsv = convertRGB2HSV(fragColor.rgb); // Force grayscale values to be slightly saturated const float minLightness = 0.11 / 2.0; @@ -167,20 +168,20 @@ void main() hsv.x = mod(hsv.x + u_color, 1.0); if (hsv.x < 0.0) hsv.x += 1.0; - gl_FragColor.rgb = convertHSV2RGB(hsv); + fragColor.rgb = convertHSV2RGB(hsv); } #endif // ENABLE_color #ifdef ENABLE_brightness - gl_FragColor.rgb = clamp(gl_FragColor.rgb + vec3(u_brightness), vec3(0), vec3(1)); + fragColor.rgb = clamp(fragColor.rgb + vec3(u_brightness), vec3(0), vec3(1)); #endif // ENABLE_brightness // Re-multiply color values - gl_FragColor.rgb *= gl_FragColor.a + epsilon; + fragColor.rgb *= fragColor.a + epsilon; #endif // defined(ENABLE_color) || defined(ENABLE_brightness) #ifdef ENABLE_ghost - gl_FragColor *= u_ghost; + fragColor *= u_ghost; #endif // ENABLE_ghost } diff --git a/src/shaders/sprite.vert b/src/shaders/sprite.vert index ef79415..b52cc8f 100644 --- a/src/shaders/sprite.vert +++ b/src/shaders/sprite.vert @@ -1,9 +1,9 @@ uniform mat4 u_projectionMatrix; uniform mat4 u_modelMatrix; -attribute vec2 a_position; -attribute vec2 a_texCoord; +in vec2 a_position; +in vec2 a_texCoord; -varying vec2 v_texCoord; +out vec2 v_texCoord; void main() { gl_Position = u_projectionMatrix * u_modelMatrix * vec4(a_position, 0, 1); From d7219ffd201afc7fbb91de336dcbec9d24fa79d4 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Fri, 7 Feb 2025 11:01:40 +0100 Subject: [PATCH 2/2] Use OpenGL core profile on macOS --- src/global_functions.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/global_functions.cpp b/src/global_functions.cpp index de18977..9338197 100644 --- a/src/global_functions.cpp +++ b/src/global_functions.cpp @@ -10,6 +10,10 @@ void scratchcpprender::init() QSurfaceFormat format = QSurfaceFormat::defaultFormat(); format.setSwapInterval(0); +#ifdef Q_OS_MACOS + format.setProfile(QSurfaceFormat::CoreProfile); + format.setVersion(3, 2); +#endif QSurfaceFormat::setDefaultFormat(format); }