This repository has been archived by the owner on Aug 4, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathRendererOGL.h
130 lines (94 loc) · 3.86 KB
/
RendererOGL.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef MOZILLA_LAYERS_RENDEREROGL_H
#define MOZILLA_LAYERS_RENDEREROGL_H
#include "mozilla/layers/CompositorTypes.h"
#include "mozilla/gfx/Point.h"
#include "mozilla/webrender/RenderThread.h"
#include "mozilla/webrender/WebRenderTypes.h"
#include "mozilla/webrender/webrender_ffi.h"
#include "mozilla/webrender/RendererScreenshotGrabber.h"
namespace mozilla {
namespace gfx {
class DrawTarget;
}
namespace gl {
class GLContext;
}
namespace layers {
class CompositorBridgeParent;
class SyncObjectHost;
} // namespace layers
namespace widget {
class CompositorWidget;
}
namespace wr {
class RenderCompositor;
class RenderTextureHost;
/// Owns the WebRender renderer and GL context.
///
/// There is one renderer per window, all owned by the render thread.
/// This class is a similar abstraction to CompositorOGL except that it is used
/// on the render thread instead of the compositor thread.
class RendererOGL {
friend wr::WrExternalImage LockExternalImage(void* aObj,
wr::ExternalImageId aId,
uint8_t aChannelIndex,
wr::ImageRendering);
friend void UnlockExternalImage(void* aObj, wr::ExternalImageId aId,
uint8_t aChannelIndex);
public:
wr::WrExternalImageHandler GetExternalImageHandler();
/// This can be called on the render thread only.
void Update();
/// This can be called on the render thread only.
RenderedFrameId UpdateAndRender(const Maybe<gfx::IntSize>& aReadbackSize,
const Maybe<wr::ImageFormat>& aReadbackFormat,
const Maybe<Range<uint8_t>>& aReadbackBuffer,
bool aHadSlowFrame, RendererStats* aOutStats);
/// This can be called on the render thread only.
void WaitForGPU();
/// This can be called on the render thread only.
RenderedFrameId GetLastCompletedFrameId();
/// This can be called on the render thread only.
RenderedFrameId UpdateFrameId();
/// This can be called on the render thread only.
void SetProfilerEnabled(bool aEnabled);
/// This can be called on the render thread only.
void SetFrameStartTime(const TimeStamp& aTime);
/// This can be called on the render thread only.
~RendererOGL();
/// This can be called on the render thread only.
RendererOGL(RefPtr<RenderThread>&& aThread,
UniquePtr<RenderCompositor> aCompositor, wr::WindowId aWindowId,
wr::Renderer* aRenderer, layers::CompositorBridgeParent* aBridge);
/// This can be called on the render thread only.
void Pause();
/// This can be called on the render thread only.
bool Resume();
/// This can be called on the render thread only.
void CheckGraphicsResetStatus();
layers::SyncObjectHost* GetSyncObject() const;
layers::CompositorBridgeParent* GetCompositorBridge() { return mBridge; }
RefPtr<WebRenderPipelineInfo> FlushPipelineInfo();
RenderTextureHost* GetRenderTexture(wr::ExternalImageId aExternalImageId);
void AccumulateMemoryReport(MemoryReport* aReport);
wr::Renderer* GetRenderer() { return mRenderer; }
gl::GLContext* gl() const;
bool EnsureAsyncScreenshot();
protected:
RefPtr<RenderThread> mThread;
UniquePtr<RenderCompositor> mCompositor;
wr::Renderer* mRenderer;
layers::CompositorBridgeParent* mBridge;
wr::WindowId mWindowId;
TimeStamp mFrameStartTime;
bool mDisableNativeCompositor;
RendererScreenshotGrabber mScreenshotGrabber;
};
} // namespace wr
} // namespace mozilla
#endif