diff options
author | 2017-11-17 09:25:23 -0500 | |
---|---|---|
committer | 2017-11-17 16:22:56 +0000 | |
commit | 55ad77481290384038d7638ac4136ebf32a4ee2b (patch) | |
tree | c5c99f170efa149a933d0839c7ae96645e25c243 /tools/gpu/gl/mac | |
parent | 3e4d1fde7fab46875cb70e23003b40aac262f0bc (diff) |
Revert "Revert "Add method to sk_gpu_test::TestContext to automatically restore the previous context.""
This reverts commit 1e09e461d2ffcf8b07242cfe93dd7d12c4d75866.
Change-Id: I95d5544a7baaa078536790493ce4119816a77e94
Reviewed-on: https://skia-review.googlesource.com/72903
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'tools/gpu/gl/mac')
-rw-r--r-- | tools/gpu/gl/mac/CreatePlatformGLTestContext_mac.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/tools/gpu/gl/mac/CreatePlatformGLTestContext_mac.cpp b/tools/gpu/gl/mac/CreatePlatformGLTestContext_mac.cpp index a94f503d48..9f1c61e564 100644 --- a/tools/gpu/gl/mac/CreatePlatformGLTestContext_mac.cpp +++ b/tools/gpu/gl/mac/CreatePlatformGLTestContext_mac.cpp @@ -14,6 +14,12 @@ #include <dlfcn.h> namespace { + +std::function<void()> context_restorer() { + auto context = CGLGetCurrentContext(); + return [context] { CGLSetCurrentContext(context); }; +} + class MacGLTestContext : public sk_gpu_test::GLTestContext { public: MacGLTestContext(MacGLTestContext* shareContext); @@ -23,6 +29,7 @@ private: void destroyGLContext(); void onPlatformMakeCurrent() const override; + std::function<void()> onPlatformGetAutoContextRestore() const override; void onPlatformSwapBuffers() const override; GrGLFuncPtr onPlatformGetProcAddress(const char*) const override; @@ -58,6 +65,7 @@ MacGLTestContext::MacGLTestContext(MacGLTestContext* shareContext) return; } + SkScopeExit restorer(context_restorer()); CGLSetCurrentContext(fContext); sk_sp<const GrGLInterface> gl(GrGLCreateNativeInterface()); @@ -86,6 +94,10 @@ MacGLTestContext::~MacGLTestContext() { void MacGLTestContext::destroyGLContext() { if (fContext) { + if (CGLGetCurrentContext() == fContext) { + // This will ensure that the context is immediately deleted. + CGLSetCurrentContext(nullptr); + } CGLReleaseContext(fContext); fContext = nullptr; } @@ -98,6 +110,13 @@ void MacGLTestContext::onPlatformMakeCurrent() const { CGLSetCurrentContext(fContext); } +std::function<void()> MacGLTestContext::onPlatformGetAutoContextRestore() const { + if (CGLGetCurrentContext() == fContext) { + return nullptr; + } + return context_restorer(); +} + void MacGLTestContext::onPlatformSwapBuffers() const { CGLFlushDrawable(fContext); } |