Option to force sw skia in viewer Diffs= 0bd986562 Fix format. 3c8a69240 Option to force sw skia in viewer
diff --git a/.rive_head b/.rive_head index 508d525..86c5b0e 100644 --- a/.rive_head +++ b/.rive_head
@@ -1 +1 @@ -dc76fda7d2436c453a2016212d656d17a90c1ad4 +0bd9865621d71264d8119353bc27a35df7cdc109
diff --git a/viewer/src/skia/skia_host.cpp b/viewer/src/skia/skia_host.cpp index fe433bb..e88e82e 100644 --- a/viewer/src/skia/skia_host.cpp +++ b/viewer/src/skia/skia_host.cpp
@@ -29,6 +29,8 @@ // Experimental flag, until we complete coregraphics_host //#define TEST_CG_RENDERER +//#define SW_SKIA_MODE + #ifdef TEST_CG_RENDERER #include "cg_factory.hpp" #include "cg_renderer.hpp" @@ -75,7 +77,7 @@ #elif defined(SK_GL) // Skia commands are issued to the same GL context before Sokol, so we need // to make sure Sokol does not clear the buffer. - *action = (sg_pass_action){.colors[0] = {.action = SG_ACTION_DONTCARE}}; + *action = (sg_pass_action){.colors[0] = {.action = SG_ACTION_DONTCARE }}; #endif m_context = makeSkiaContext(); @@ -95,6 +97,13 @@ if (content) { #ifdef TEST_CG_RENDERER render_with_cg(canvas, m_dimensions.width(), m_dimensions.height(), content, elapsed); +#elif defined(SW_SKIA_MODE) + auto info = SkImageInfo::MakeN32Premul(m_dimensions.width(), m_dimensions.height()); + auto swsurf = SkSurface::MakeRaster(info); + rive::SkiaRenderer skiaRenderer(swsurf->getCanvas()); + content->handleDraw(&skiaRenderer, elapsed); + auto img = swsurf->makeImageSnapshot(); + canvas->drawImage(img, 0, 0, SkSamplingOptions(SkFilterMode::kNearest), nullptr); #else rive::SkiaRenderer skiaRenderer(canvas); content->handleDraw(&skiaRenderer, elapsed);