Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set sw=2 sts=2 ts=8 et tw=99 : */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #ifndef MOZILLA_LAYERS_RENDEREROGL_H
8 : #define MOZILLA_LAYERS_RENDEREROGL_H
9 :
10 : #include "mozilla/webrender/RenderThread.h"
11 : #include "mozilla/webrender/WebRenderTypes.h"
12 : #include "mozilla/webrender/webrender_ffi.h"
13 :
14 : namespace mozilla {
15 :
16 : namespace gfx {
17 : class DrawTarget;
18 : }
19 :
20 : namespace gl {
21 : class GLContext;
22 : }
23 :
24 : namespace layers {
25 : class CompositorBridgeParentBase;
26 : }
27 :
28 : namespace widget {
29 : class CompositorWidget;
30 : }
31 :
32 : namespace wr {
33 :
34 : class RenderTextureHost;
35 :
36 : /// Owns the WebRender renderer and GL context.
37 : ///
38 : /// There is one renderer per window, all owned by the render thread.
39 : /// This class is a similar abstraction to CompositorOGL except that it is used
40 : /// on the render thread instead of the compositor thread.
41 : class RendererOGL
42 : {
43 : friend WrExternalImage LockExternalImage(void* aObj, WrExternalImageId aId, uint8_t aChannelIndex);
44 : friend void UnlockExternalImage(void* aObj, WrExternalImageId aId, uint8_t aChannelIndex);
45 :
46 : public:
47 : WrExternalImageHandler GetExternalImageHandler();
48 :
49 : /// This can be called on the render thread only.
50 : void Update();
51 :
52 : /// This can be called on the render thread only.
53 : bool Render();
54 :
55 : /// This can be called on the render thread only.
56 : bool RenderToTarget(gfx::DrawTarget& aTarget);
57 :
58 : /// This can be called on the render thread only.
59 : void SetProfilerEnabled(bool aEnabled);
60 :
61 : /// This can be called on the render thread only.
62 : ~RendererOGL();
63 :
64 : /// This can be called on the render thread only.
65 : RendererOGL(RefPtr<RenderThread>&& aThread,
66 : RefPtr<gl::GLContext>&& aGL,
67 : RefPtr<widget::CompositorWidget>&&,
68 : wr::WindowId aWindowId,
69 : WrRenderer* aWrRenderer,
70 : layers::CompositorBridgeParentBase* aBridge);
71 :
72 : /// This can be called on the render thread only.
73 : void Pause();
74 :
75 : /// This can be called on the render thread only.
76 : bool Resume();
77 :
78 0 : layers::CompositorBridgeParentBase* GetCompositorBridge() { return mBridge; }
79 :
80 : WrRenderedEpochs* FlushRenderedEpochs();
81 :
82 : RenderTextureHost* GetRenderTexture(WrExternalImageId aExternalImageId);
83 :
84 0 : WrRenderer* GetWrRenderer() { return mWrRenderer; }
85 :
86 : protected:
87 :
88 : RefPtr<RenderThread> mThread;
89 : RefPtr<gl::GLContext> mGL;
90 : RefPtr<widget::CompositorWidget> mWidget;
91 : WrRenderer* mWrRenderer;
92 : layers::CompositorBridgeParentBase* mBridge;
93 : wr::WindowId mWindowId;
94 : };
95 :
96 : } // namespace wr
97 : } // namespace mozilla
98 :
99 : #endif
|