Viewer: Fixes for shader editing in ANGLE
- Include default precision in viewer's highlight shader when needed
- Flush cache when switching backends. Fixes issues between (eg) GL
and ANGLE where shader caps are different.
Change-Id: I80bc9fb56fdab49fdbe2e858db7398a5471048c6
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/212194
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Auto-Submit: Brian Osman <brianosman@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 89f89b2..cd74346 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -1049,6 +1049,8 @@
}
void Viewer::setBackend(sk_app::Window::BackendType backendType) {
+ fPersistentCache.reset();
+ fCachedGLSL.reset();
fBackendType = backendType;
fWindow->detach();
@@ -2047,8 +2049,14 @@
}
if (doSave) {
// The hovered item (if any) gets a special shader to make it identifiable
- SkSL::String highlight = ctx->priv().caps()->shaderCaps()->versionDeclString();
- const char* f4Type = params.fGrContextOptions.fCacheSKSL ? "half4" : "vec4";
+ auto shaderCaps = ctx->priv().caps()->shaderCaps();
+ bool sksl = params.fGrContextOptions.fCacheSKSL;
+
+ SkSL::String highlight = shaderCaps->versionDeclString();
+ if (shaderCaps->usesPrecisionModifiers() && !sksl) {
+ highlight.append("precision mediump float;\n");
+ }
+ const char* f4Type = sksl ? "half4" : "vec4";
highlight.appendf("out %s sk_FragColor;\n"
"void main() { sk_FragColor = %s(1, 0, 1, 0.5); }",
f4Type, f4Type);