From cbc567562e37edf06bb173315b033a767fc551c8 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Wed, 20 Aug 2025 11:17:05 +0300 Subject: [PATCH] Switching arm64 linux version to use OpenGLES 3.0, and made MSAA work on OpenGLES 3.0 --- linuxinstall/com.infinipaint.infinipaint.yml | 2 +- src/DrawingProgram/DrawingProgramCache.cpp | 6 +++++- src/DrawingProgram/EyeDropperTool.cpp | 6 +++++- src/DrawingProgram/ScreenshotTool.cpp | 6 +++++- src/main.cpp | 8 +++++++- 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/linuxinstall/com.infinipaint.infinipaint.yml b/linuxinstall/com.infinipaint.infinipaint.yml index ff7e51c..ef66a90 100644 --- a/linuxinstall/com.infinipaint.infinipaint.yml +++ b/linuxinstall/com.infinipaint.infinipaint.yml @@ -103,7 +103,7 @@ modules: - -DSKIA_PARAGRAPH_LIB=/app/Skia/out/Static/libskparagraph.a - -DCMAKE_BUILD_TYPE=Release - -DTBB_NOT_ONETBB=ON - - -DGRAPHICS_BACKEND=OpenGL2.1 + - -DGRAPHICS_BACKEND=OpenGLES3.0 sources: - type: dir # branch: master diff --git a/src/DrawingProgram/DrawingProgramCache.cpp b/src/DrawingProgram/DrawingProgramCache.cpp index 0b7b319..3505ade 100644 --- a/src/DrawingProgram/DrawingProgramCache.cpp +++ b/src/DrawingProgram/DrawingProgramCache.cpp @@ -311,7 +311,11 @@ void DrawingProgramCache::refresh_draw_cache(const std::shared_ptrdrawCache = std::nullopt; // Ensure drawCache is nullopt, so that the draw_components_to_canvas function doesnt use it while drawing } else { - SkImageInfo imgInfo = SkImageInfo::MakeN32Premul(bvhNode->resolution.x(), bvhNode->resolution.y()); + #ifdef USE_BACKEND_OPENGLES_3_0 + SkImageInfo imgInfo = SkImageInfo::Make(bvhNode->resolution.x(), bvhNode->resolution.y(), kRGBA_8888_SkColorType, kPremul_SkAlphaType); + #else + SkImageInfo imgInfo = SkImageInfo::MakeN32Premul(mS.m->window.size.x(), mS.m->window.size.y()); + #endif #ifdef USE_SKIA_BACKEND_GRAPHITE drawCache.surface = SkSurfaces::RenderTarget(drawP.world.main.window.recorder(), imgInfo, skgpu::Mipmapped::kNo, drawP.world.main.window.defaultMSAASurfaceProps); #elif USE_SKIA_BACKEND_GANESH diff --git a/src/DrawingProgram/EyeDropperTool.cpp b/src/DrawingProgram/EyeDropperTool.cpp index 5451376..ad25951 100644 --- a/src/DrawingProgram/EyeDropperTool.cpp +++ b/src/DrawingProgram/EyeDropperTool.cpp @@ -40,7 +40,11 @@ void EyeDropperTool::gui_toolbox() { void EyeDropperTool::tool_update() { if(drawP.controls.leftClick) { SkSurfaceProps props; - SkImageInfo imgInfo = SkImageInfo::MakeN32Premul(drawP.world.main.window.size.x(), drawP.world.main.window.size.y()); + #ifdef USE_BACKEND_OPENGLES_3_0 + SkImageInfo imgInfo = SkImageInfo::Make(drawP.world.main.window.size.x(), drawP.world.main.window.size.y(), kRGBA_8888_SkColorType, kPremul_SkAlphaType); + #else + SkImageInfo imgInfo = SkImageInfo::MakeN32Premul(mS.m->window.size.x(), mS.m->window.size.y()); + #endif #ifdef USE_SKIA_BACKEND_GRAPHITE sk_sp surface = SkSurfaces::RenderTarget(drawP.world.main.window.recorder(), imgInfo, skgpu::Mipmapped::kNo, &props); #elif USE_SKIA_BACKEND_GANESH diff --git a/src/DrawingProgram/ScreenshotTool.cpp b/src/DrawingProgram/ScreenshotTool.cpp index f7fa6da..2c9edde 100644 --- a/src/DrawingProgram/ScreenshotTool.cpp +++ b/src/DrawingProgram/ScreenshotTool.cpp @@ -119,7 +119,11 @@ void ScreenshotTool::take_screenshot(const std::filesystem::path& filePath) { std::vector finalImgRawData(imageByteSize); SkPixmap finalImgData(finalImgInfo, finalImgRawData.data(), imageRowSize); - SkImageInfo imgInfo = SkImageInfo::MakeN32Premul(drawP.world.main.window.size.x(), drawP.world.main.window.size.y()); + #ifdef USE_BACKEND_OPENGLES_3_0 + SkImageInfo imgInfo = SkImageInfo::Make(drawP.world.main.window.size.x(), drawP.world.main.window.size.y(), kRGBA_8888_SkColorType, kPremul_SkAlphaType); + #else + SkImageInfo imgInfo = SkImageInfo::MakeN32Premul(mS.m->window.size.x(), mS.m->window.size.y()); + #endif #ifdef USE_SKIA_BACKEND_GRAPHITE sk_sp surface = SkSurfaces::RenderTarget(drawP.world.main.window.recorder(), imgInfo, skgpu::Mipmapped::kNo, &drawP.world.main.window.defaultMSAASurfaceProps); #elif USE_SKIA_BACKEND_GANESH diff --git a/src/main.cpp b/src/main.cpp index e910d0e..229998f 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,6 +5,8 @@ #include #include #include +#include +#include #ifdef USE_BACKEND_OPENGL #ifndef __EMSCRIPTEN__ #ifdef USE_BACKEND_OPENGLES_3_0 @@ -265,7 +267,11 @@ void sdl_terminate(MainStruct& mS) { void resize_window(MainStruct& mS) { // Having intermediate surface allows for changing options more easily - SkImageInfo imgInfo = SkImageInfo::MakeN32Premul(mS.m->window.size.x(), mS.m->window.size.y()); + #ifdef USE_BACKEND_OPENGLES_3_0 + SkImageInfo imgInfo = SkImageInfo::Make(mS.m->window.size.x(), mS.m->window.size.y(), kRGBA_8888_SkColorType, kPremul_SkAlphaType); + #else + SkImageInfo imgInfo = SkImageInfo::MakeN32Premul(mS.m->window.size.x(), mS.m->window.size.y()); + #endif #ifdef USE_SKIA_BACKEND_GRAPHITE mS.intermediateSurface = SkSurfaces::RenderTarget(mS.vulkanWindowContext->graphiteRecorder(), imgInfo, skgpu::Mipmapped::kNo, &mS.m->window.defaultMSAASurfaceProps); #elif USE_SKIA_BACKEND_GANESH