Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Unified Diff: tools/viewer/Viewer.cpp

Issue 2184163003: Enable backend switching for Windows Viewer (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Delete extra glMakeCurrent Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/viewer/sk_app/Window.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/viewer/Viewer.cpp
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index eb8097282891c4237c5fd92e1bd22f2a4b30e6fe..132dd486d1394979a9d84e2b3d4b7d1b4fb99e32 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -60,7 +60,7 @@ DEFINE_string2(match, m, nullptr,
"it is skipped unless some list entry starts with ~");
#ifdef SK_VULKAN
-# define BACKENDS_STR "\"sw\", \"gl\", and \"vulkan\""
+# define BACKENDS_STR "\"sw\", \"gl\", and \"vk\""
#else
# define BACKENDS_STR "\"sw\" and \"gl\""
#endif
@@ -180,25 +180,43 @@ Viewer::Viewer(int argc, char** argv, void* platformData)
this->changeZoomLevel(-1.f / 32.f);
fWindow->inval();
});
-#if 0 // this doesn't seem to work on any platform right now
-#ifndef SK_BUILD_FOR_ANDROID
+#ifdef SK_BUILD_FOR_WIN
fCommands.addCommand('d', "Modes", "Change rendering backend", [this]() {
+ if (sk_app::Window::kRaster_BackendType == fBackendType) {
+ fBackendType = sk_app::Window::kNativeGL_BackendType;
+#ifdef SK_VULKAN
+ } else if (sk_app::Window::kNativeGL_BackendType == fBackendType) {
+ fBackendType = sk_app::Window::kVulkan_BackendType;
+#endif
+ } else {
+ fBackendType = sk_app::Window::kRaster_BackendType;
+ }
+
fWindow->detach();
+#ifdef SK_VULKAN
+ // Switching from OpenGL to Vulkan in the same window is problematic at this point,
+ // so we just delete the window and recreate it.
+ // On Windows, only tearing down the window when going from OpenGL to Vulkan works fine.
+ // On Linux, we may need to tear down the window for the Vulkan to OpenGL case as well.
if (sk_app::Window::kVulkan_BackendType == fBackendType) {
- fBackendType = sk_app::Window::kNativeGL_BackendType;
- }
- // TODO: get Vulkan -> OpenGL working on Windows without swapchain creation failure
- //else if (sk_app::Window::kNativeGL_BackendType == fBackendType) {
- // fBackendType = sk_app::Window::kVulkan_BackendType;
- //}
-
+ delete fWindow;
+ fWindow = Window::CreateNativeWindow(nullptr);
+
+ // re-register callbacks
+ fCommands.attach(fWindow);
+ fWindow->registerPaintFunc(on_paint_handler, this);
+ fWindow->registerTouchFunc(on_touch_handler, this);
+ fWindow->registerUIStateChangedFunc(on_ui_state_changed_handler, this);
+ }
+#endif
fWindow->attach(fBackendType, DisplayParams());
+
this->updateTitle();
fWindow->inval();
+ fWindow->show();
});
#endif
-#endif
// set up slides
this->initSlides();
« no previous file with comments | « no previous file | tools/viewer/sk_app/Window.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698