Kiwano Engine v1.2.x
RenderContext.h
1// Copyright (c) 2016-2019 Kiwano - Nomango
2//
3// Permission is hereby granted, free of charge, to any person obtaining a copy
4// of this software and associated documentation files (the "Software"), to deal
5// in the Software without restriction, including without limitation the rights
6// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7// copies of the Software, and to permit persons to whom the Software is
8// furnished to do so, subject to the following conditions:
9//
10// The above copyright notice and this permission notice shall be included in
11// all copies or substantial portions of the Software.
12//
13// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19// THE SOFTWARE.
20
21#pragma once
22#include <kiwano/core/Time.h>
23#include <kiwano/render/Brush.h>
24#include <kiwano/render/Shape.h>
25#include <kiwano/render/Layer.h>
26#include <kiwano/render/TextLayout.h>
27#include <kiwano/render/Texture.h>
28
29namespace kiwano
30{
31
32KGE_DECLARE_SMART_PTR(RenderContext);
33
42{
43 Default,
44 ClearType,
45 GrayScale,
46 None
47};
48
51enum class BlendMode
52{
53 SourceOver = 0,
54 Copy = 1,
55 Min = 2,
56 Add = 3,
57 Max = 4,
58};
59
63class KGE_API RenderContext : public NativeObject
64{
65public:
70 static RenderContextPtr Create(TexturePtr texture, const PixelSize& size);
71
74 virtual void BeginDraw();
75
78 virtual void EndDraw();
79
84 virtual void CreateTexture(Texture& texture, const PixelSize& size) = 0;
85
91 virtual void DrawTexture(const Texture& texture, const Rect* src_rect = nullptr,
92 const Rect* dest_rect = nullptr) = 0;
93
99 virtual void DrawTextLayout(const TextLayout& layout, const Point& offset, BrushPtr outline_brush) = 0;
100
104 virtual void DrawShape(const Shape& shape) = 0;
105
110 virtual void DrawLine(const Point& point1, const Point& point2) = 0;
111
115 virtual void DrawRectangle(const Rect& rect) = 0;
116
121 virtual void DrawRoundedRectangle(const Rect& rect, const Vec2& radius) = 0;
122
127 virtual void DrawCircle(const Point& center, float radius);
128
133 virtual void DrawEllipse(const Point& center, const Vec2& radius) = 0;
134
138 virtual void FillShape(const Shape& shape) = 0;
139
143 virtual void FillRectangle(const Rect& rect) = 0;
144
149 virtual void FillRoundedRectangle(const Rect& rect, const Vec2& radius) = 0;
150
155 virtual void FillCircle(const Point& center, float radius);
156
161 virtual void FillEllipse(const Point& center, const Vec2& radius) = 0;
162
166 virtual void PushClipRect(const Rect& clip_rect) = 0;
167
170 virtual void PopClipRect() = 0;
171
175 virtual void PushLayer(Layer& layer) = 0;
176
179 virtual void PopLayer() = 0;
180
183 virtual void Clear() = 0;
184
188 virtual void Clear(const Color& clear_color) = 0;
189
192 virtual Size GetSize() const = 0;
193
196 virtual float GetBrushOpacity() const;
197
200 virtual BrushPtr GetCurrentBrush() const;
201
204 virtual const Matrix3x2& GetGlobalTransform() const;
205
208 virtual void SetBrushOpacity(float opacity);
209
212 virtual void SetCurrentBrush(BrushPtr brush);
213
216 virtual void SetCurrentStrokeStyle(StrokeStylePtr stroke);
217
220 virtual void SetBlendMode(BlendMode blend) = 0;
221
224 virtual void SetAntialiasMode(bool enabled) = 0;
225
229
232 virtual bool CheckVisibility(const Rect& bounds, const Matrix3x2& transform) = 0;
233
236 virtual void Resize(const Size& size) = 0;
237
240 virtual void SetTransform(const Matrix3x2& matrix) = 0;
241
244 virtual void SetGlobalTransform(const Matrix3x2& matrix);
245
248 virtual void SetGlobalTransform(const Matrix3x2* matrix);
249
252 virtual TexturePtr GetTarget() const = 0;
253
254public:
257 struct Status
258 {
259 uint32_t primitives;
262
263 Status();
264 };
265
268 void SetCollectingStatus(bool enable);
269
272 const Status& GetStatus() const;
273
274protected:
276
279 void IncreasePrimitivesCount(uint32_t increase = 1) const;
280
281protected:
282 bool antialias_;
283 bool fast_global_transform_;
284 mutable bool collecting_status_;
285 float brush_opacity_;
286 TextAntialiasMode text_antialias_;
287 BrushPtr current_brush_;
288 StrokeStylePtr current_stroke_;
289 Rect visible_size_;
290 Matrix3x2 global_transform_;
291 mutable Status status_;
292};
293
296inline RenderContext::Status::Status()
297 : primitives(0)
298{
299}
300
302{
303 return status_;
304}
305
306} // namespace kiwano
Definition: Color.h:41
图层
Definition: Layer.h:39
含有本地指针的对象
Definition: NativeObject.hpp:34
渲染上下文
Definition: RenderContext.h:64
virtual void FillShape(const Shape &shape)=0
填充形状
virtual void SetTransform(const Matrix3x2 &matrix)=0
设置上下文的二维变换
virtual void DrawTexture(const Texture &texture, const Rect *src_rect=nullptr, const Rect *dest_rect=nullptr)=0
绘制纹理
virtual void FillRectangle(const Rect &rect)=0
填充矩形
virtual void DrawShape(const Shape &shape)=0
绘制形状轮廓
virtual void DrawTextLayout(const TextLayout &layout, const Point &offset, BrushPtr outline_brush)=0
绘制文本布局
virtual void FillEllipse(const Point &center, const Vec2 &radius)=0
填充椭圆
virtual void Resize(const Size &size)=0
重设渲染上下文大小
virtual void PopLayer()=0
取消上一次设置的图层区域
virtual void DrawEllipse(const Point &center, const Vec2 &radius)=0
绘制椭圆边框
virtual void DrawRoundedRectangle(const Rect &rect, const Vec2 &radius)=0
绘制圆角矩形边框
virtual void PushClipRect(const Rect &clip_rect)=0
设置绘制的裁剪区域
virtual TexturePtr GetTarget() const =0
获取渲染目标
virtual void Clear()=0
清空渲染内容
virtual void DrawRectangle(const Rect &rect)=0
绘制矩形边框
virtual Size GetSize() const =0
获取渲染区域大小
virtual void PushLayer(Layer &layer)=0
设置图层区域
virtual void DrawLine(const Point &point1, const Point &point2)=0
绘制线段
virtual bool CheckVisibility(const Rect &bounds, const Matrix3x2 &transform)=0
检查边界是否在视区内
virtual void SetBlendMode(BlendMode blend)=0
设置混合模式
virtual void SetAntialiasMode(bool enabled)=0
设置抗锯齿模式
virtual void Clear(const Color &clear_color)=0
使用纯色清空渲染内容
virtual void SetTextAntialiasMode(TextAntialiasMode mode)=0
设置文字抗锯齿模式
const Status & GetStatus() const
获取渲染上下文状态
Definition: RenderContext.h:301
virtual void PopClipRect()=0
取消上一次设置的绘制裁剪区域
virtual void FillRoundedRectangle(const Rect &rect, const Vec2 &radius)=0
填充圆角矩形
virtual void CreateTexture(Texture &texture, const PixelSize &size)=0
创建空纹理
形状
Definition: Shape.h:40
文本布局
Definition: TextLayout.h:39
纹理
Definition: Texture.h:66
TextAntialiasMode
文字抗锯齿模式
Definition: RenderContext.h:42
BlendMode
混合模式
Definition: RenderContext.h:52
@ GrayScale
灰度抗锯齿
@ None
不启用抗锯齿
@ ClearType
ClearType 抗锯齿
时间段
Definition: Duration.h:48
渲染上下文状态
Definition: RenderContext.h:258
Duration duration
渲染时长
Definition: RenderContext.h:261
uint32_t primitives
渲染图元数量
Definition: RenderContext.h:259
Time start
渲染起始时间
Definition: RenderContext.h:260
时间
Definition: Time.h:42