Index: mojo/skia/ganesh_context.h |
diff --git a/mojo/skia/ganesh_context.h b/mojo/skia/ganesh_context.h |
index 149981d3031d5be07ecb476cc74ac9090bc7a4d1..6432d589f172ada9f2402132365ce729ef9ee68b 100644 |
--- a/mojo/skia/ganesh_context.h |
+++ b/mojo/skia/ganesh_context.h |
@@ -11,44 +11,68 @@ |
#include "skia/ext/refptr.h" |
#include "third_party/skia/include/gpu/GrContext.h" |
-namespace gpu { |
-namespace gles2 { |
-class GLES2Interface; |
-} |
-} |
- |
namespace mojo { |
+namespace skia { |
+// Binds a Ganesh rendering context to a GL context. |
+// |
+// This object is not thread-safe. |
class GaneshContext : public GLContext::Observer { |
public: |
+ // RAII style helper for executing code within a Ganesh environment. |
+ // |
+ // Note that Ganesh assumes that it owns the state of the GL Context |
+ // for the duration while the scope is active. Take care not to perform |
+ // any significant low-level GL operations while in the Ganesh scope |
+ // which might disrupt what Ganesh is doing! |
+ // |
+ // Entering a Ganesh scope recursively has no effect. In particular, |
+ // no state will be flushed. |
class Scope { |
public: |
- explicit Scope(GaneshContext*); |
+ // Upon entry to the scope, makes the GL context active and resets |
+ // the Ganesh context state. |
+ explicit Scope(GaneshContext* context); |
+ |
+ // Upon exit from the scope, flushes the Ganesh context state and |
+ // restores the prior GL context. |
~Scope(); |
private: |
- gpu::gles2::GLES2Interface* previous_; |
+ GaneshContext* context_; |
}; |
explicit GaneshContext(base::WeakPtr<GLContext> gl_context); |
~GaneshContext() override; |
+ // Gets the underlying GL context. |
+ const base::WeakPtr<GLContext>& gl_context() const { return gl_context_; } |
+ |
+ // Gets the Ganesh renderer context. |
// Note: You must be in a GaneshContext::Scope to use GrContext. |
- GrContext* gr() const { |
+ GrContext* gr_context() const { |
DCHECK(InScope()); |
- return context_.get(); |
+ return gr_context_.get(); |
} |
private: |
bool InScope() const; |
void OnContextLost() override; |
+ void ReleaseContext(); |
+ |
+ void EnterScope(); |
+ void ExitScope(); |
base::WeakPtr<GLContext> gl_context_; |
- skia::RefPtr<GrContext> context_; |
+ ::skia::RefPtr<GrContext> gr_context_; |
+ |
+ uint32_t scope_nest_count_ = 0u; |
+ MGLContext previous_mgl_context_ = MGL_NO_CONTEXT; |
DISALLOW_COPY_AND_ASSIGN(GaneshContext); |
}; |
+} // namespace skia |
} // namespace mojo |
#endif // MOJO_SKIA_GANESH_CONTEXT_H_ |