diff options
| author | Rodrigo Locatti <reinuseslisp@airmail.cc> | 2020-04-02 01:38:25 -0300 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-02 01:38:25 -0300 | 
| commit | 825a6e2615f86742b2e5182af1329da4a2bae413 (patch) | |
| tree | 0b5d26f82b65067f0562b14a65b0d34aba688e01 /src/core/frontend | |
| parent | baf91c920c7df131c9099721bad960556e74d86d (diff) | |
| parent | f1da3ec584e5956c8090ac9a958447e4f5e78da2 (diff) | |
Merge pull request #3552 from jroweboy/single-context
Refactor Context management (Fixes renderdoc on opengl issues)
Diffstat (limited to 'src/core/frontend')
| -rw-r--r-- | src/core/frontend/emu_window.h | 44 | ||||
| -rw-r--r-- | src/core/frontend/scope_acquire_context.cpp | 18 | ||||
| -rw-r--r-- | src/core/frontend/scope_acquire_context.h | 23 | 
3 files changed, 28 insertions, 57 deletions
diff --git a/src/core/frontend/emu_window.h b/src/core/frontend/emu_window.h index 5eb87fb63..72294d4d8 100644 --- a/src/core/frontend/emu_window.h +++ b/src/core/frontend/emu_window.h @@ -13,19 +13,39 @@  namespace Core::Frontend {  /** - * Represents a graphics context that can be used for background computation or drawing. If the - * graphics backend doesn't require the context, then the implementation of these methods can be - * stubs + * Represents a drawing context that supports graphics operations.   */  class GraphicsContext {  public:      virtual ~GraphicsContext(); +    /// Inform the driver to swap the front/back buffers and present the current image +    virtual void SwapBuffers() {} +      /// Makes the graphics context current for the caller thread -    virtual void MakeCurrent() = 0; +    virtual void MakeCurrent() {}      /// Releases (dunno if this is the "right" word) the context from the caller thread -    virtual void DoneCurrent() = 0; +    virtual void DoneCurrent() {} + +    class Scoped { +    public: +        explicit Scoped(GraphicsContext& context_) : context(context_) { +            context.MakeCurrent(); +        } +        ~Scoped() { +            context.DoneCurrent(); +        } + +    private: +        GraphicsContext& context; +    }; + +    /// Calls MakeCurrent on the context and calls DoneCurrent when the scope for the returned value +    /// ends +    Scoped Acquire() { +        return Scoped{*this}; +    }  };  /** @@ -46,7 +66,7 @@ public:   * - DO NOT TREAT THIS CLASS AS A GUI TOOLKIT ABSTRACTION LAYER. That's not what it is. Please   *   re-read the upper points again and think about it if you don't see this.   */ -class EmuWindow : public GraphicsContext { +class EmuWindow {  public:      /// Data structure to store emuwindow configuration      struct WindowConfig { @@ -60,17 +80,9 @@ public:      virtual void PollEvents() = 0;      /** -     * Returns a GraphicsContext that the frontend provides that is shared with the emu window. This -     * context can be used from other threads for background graphics computation. If the frontend -     * is using a graphics backend that doesn't need anything specific to run on a different thread, -     * then it can use a stubbed implemenation for GraphicsContext. -     * -     * If the return value is null, then the core should assume that the frontend cannot provide a -     * Shared Context +     * Returns a GraphicsContext that the frontend provides to be used for rendering.       */ -    virtual std::unique_ptr<GraphicsContext> CreateSharedContext() const { -        return nullptr; -    } +    virtual std::unique_ptr<GraphicsContext> CreateSharedContext() const = 0;      /// Returns if window is shown (not minimized)      virtual bool IsShown() const = 0; diff --git a/src/core/frontend/scope_acquire_context.cpp b/src/core/frontend/scope_acquire_context.cpp deleted file mode 100644 index 878c3157c..000000000 --- a/src/core/frontend/scope_acquire_context.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2019 yuzu Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#include "core/frontend/emu_window.h" -#include "core/frontend/scope_acquire_context.h" - -namespace Core::Frontend { - -ScopeAcquireContext::ScopeAcquireContext(Core::Frontend::GraphicsContext& context) -    : context{context} { -    context.MakeCurrent(); -} -ScopeAcquireContext::~ScopeAcquireContext() { -    context.DoneCurrent(); -} - -} // namespace Core::Frontend diff --git a/src/core/frontend/scope_acquire_context.h b/src/core/frontend/scope_acquire_context.h deleted file mode 100644 index 7a65c0623..000000000 --- a/src/core/frontend/scope_acquire_context.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2019 yuzu Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#pragma once - -#include "common/common_types.h" - -namespace Core::Frontend { - -class GraphicsContext; - -/// Helper class to acquire/release window context within a given scope -class ScopeAcquireContext : NonCopyable { -public: -    explicit ScopeAcquireContext(Core::Frontend::GraphicsContext& context); -    ~ScopeAcquireContext(); - -private: -    Core::Frontend::GraphicsContext& context; -}; - -} // namespace Core::Frontend  | 
