Rename RenderTarget to RenderContext

This commit is contained in:
Nomango 2020-01-10 15:22:12 +08:00
parent 8547397cc6
commit b102f85096
44 changed files with 399 additions and 398 deletions

View File

@ -74,7 +74,7 @@
<ClInclude Include="..\..\src\kiwano\renderer\TextureCache.h" /> <ClInclude Include="..\..\src\kiwano\renderer\TextureCache.h" />
<ClInclude Include="..\..\src\kiwano\renderer\LayerArea.h" /> <ClInclude Include="..\..\src\kiwano\renderer\LayerArea.h" />
<ClInclude Include="..\..\src\kiwano\renderer\Renderer.h" /> <ClInclude Include="..\..\src\kiwano\renderer\Renderer.h" />
<ClInclude Include="..\..\src\kiwano\renderer\RenderTarget.h" /> <ClInclude Include="..\..\src\kiwano\renderer\RenderContext.h" />
<ClInclude Include="..\..\src\kiwano\renderer\TextLayout.h" /> <ClInclude Include="..\..\src\kiwano\renderer\TextLayout.h" />
<ClInclude Include="..\..\src\kiwano\renderer\win32\D2DDeviceResources.h" /> <ClInclude Include="..\..\src\kiwano\renderer\win32\D2DDeviceResources.h" />
<ClInclude Include="..\..\src\kiwano\renderer\win32\D3D10DeviceResources.h" /> <ClInclude Include="..\..\src\kiwano\renderer\win32\D3D10DeviceResources.h" />
@ -143,7 +143,7 @@
<ClCompile Include="..\..\src\kiwano\renderer\TextureCache.cpp" /> <ClCompile Include="..\..\src\kiwano\renderer\TextureCache.cpp" />
<ClCompile Include="..\..\src\kiwano\renderer\LayerArea.cpp" /> <ClCompile Include="..\..\src\kiwano\renderer\LayerArea.cpp" />
<ClCompile Include="..\..\src\kiwano\renderer\Renderer.cpp" /> <ClCompile Include="..\..\src\kiwano\renderer\Renderer.cpp" />
<ClCompile Include="..\..\src\kiwano\renderer\RenderTarget.cpp" /> <ClCompile Include="..\..\src\kiwano\renderer\RenderContext.cpp" />
<ClCompile Include="..\..\src\kiwano\renderer\TextLayout.cpp" /> <ClCompile Include="..\..\src\kiwano\renderer\TextLayout.cpp" />
<ClCompile Include="..\..\src\kiwano\renderer\win32\D2DDeviceResources.cpp" /> <ClCompile Include="..\..\src\kiwano\renderer\win32\D2DDeviceResources.cpp" />
<ClCompile Include="..\..\src\kiwano\renderer\win32\D3D10DeviceResources.cpp" /> <ClCompile Include="..\..\src\kiwano\renderer\win32\D3D10DeviceResources.cpp" />

View File

@ -186,9 +186,6 @@
<ClInclude Include="..\..\src\kiwano\renderer\win32\TextRenderer.h"> <ClInclude Include="..\..\src\kiwano\renderer\win32\TextRenderer.h">
<Filter>renderer\win32</Filter> <Filter>renderer\win32</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\kiwano\renderer\RenderTarget.h">
<Filter>renderer</Filter>
</ClInclude>
<ClInclude Include="..\..\src\kiwano\2d\Transform.h"> <ClInclude Include="..\..\src\kiwano\2d\Transform.h">
<Filter>2d</Filter> <Filter>2d</Filter>
</ClInclude> </ClInclude>
@ -282,6 +279,9 @@
<ClInclude Include="..\..\src\kiwano\2d\Button.h"> <ClInclude Include="..\..\src\kiwano\2d\Button.h">
<Filter>2d</Filter> <Filter>2d</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\kiwano\renderer\RenderContext.h">
<Filter>renderer</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\src\kiwano\2d\Canvas.cpp"> <ClCompile Include="..\..\src\kiwano\2d\Canvas.cpp">
@ -407,9 +407,6 @@
<ClCompile Include="..\..\src\kiwano\renderer\win32\TextRenderer.cpp"> <ClCompile Include="..\..\src\kiwano\renderer\win32\TextRenderer.cpp">
<Filter>renderer\win32</Filter> <Filter>renderer\win32</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\kiwano\renderer\RenderTarget.cpp">
<Filter>renderer</Filter>
</ClCompile>
<ClCompile Include="..\..\src\kiwano\2d\Transform.cpp"> <ClCompile Include="..\..\src\kiwano\2d\Transform.cpp">
<Filter>2d</Filter> <Filter>2d</Filter>
</ClCompile> </ClCompile>
@ -479,5 +476,8 @@
<ClCompile Include="..\..\src\kiwano\renderer\StrokeStyle.cpp"> <ClCompile Include="..\..\src\kiwano\renderer\StrokeStyle.cpp">
<Filter>renderer</Filter> <Filter>renderer</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\kiwano\renderer\RenderContext.cpp">
<Filter>renderer</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -16,20 +16,19 @@ template <typename _Ty, typename _PTy = typename std::pointer_traits<_Ty>::point
class intrusive_list_item class intrusive_list_item
{ {
public: public:
using pointer_type = _PTy; using pointer = _PTy;
using const_pointer_type = const _PTy;
intrusive_list_item() : prev_(nullptr), next_(nullptr) {} intrusive_list_item() : prev_(nullptr), next_(nullptr) {}
intrusive_list_item(pointer_type rhs) : prev_(nullptr), next_(nullptr) { if (rhs) { prev_ = rhs->prev_; next_ = rhs->next_; } } intrusive_list_item(pointer rhs) : prev_(nullptr), next_(nullptr) { if (rhs) { prev_ = rhs->prev_; next_ = rhs->next_; } }
const_pointer_type prev_item() const { return prev_; } const pointer prev_item() const { return prev_; }
pointer_type prev_item() { return prev_; } pointer prev_item() { return prev_; }
const_pointer_type next_item() const { return next_; } const pointer next_item() const { return next_; }
pointer_type next_item() { return next_; } pointer next_item() { return next_; }
private: private:
pointer_type prev_; pointer prev_;
pointer_type next_; pointer next_;
friend class intrusive_list<_Ty, _PTy>; friend class intrusive_list<_Ty, _PTy>;
}; };
@ -39,23 +38,24 @@ template <typename _Ty, typename _PTy>
class intrusive_list class intrusive_list
{ {
public: public:
using pointer_type = _PTy; using value_type = typename std::pointer_traits<_PTy>::element_type;
using const_pointer_type = const _PTy; using pointer = _PTy;
using reference = value_type&;
intrusive_list() : first_(), last_() {} intrusive_list() : first_(), last_() {}
~intrusive_list() { clear(); } ~intrusive_list() { clear(); }
const_pointer_type first_item() const { return first_; } const pointer first_item() const { return first_; }
pointer_type first_item() { return first_; } pointer first_item() { return first_; }
const_pointer_type last_item() const { return last_; } const pointer last_item() const { return last_; }
pointer_type last_item() { return last_; } pointer last_item() { return last_; }
inline bool empty() const inline bool empty() const
{ {
return first_ == nullptr; return first_ == nullptr;
} }
void push_back(pointer_type child) void push_back(pointer child)
{ {
if (child->prev_) if (child->prev_)
child->prev_->next_ = child->next_; child->prev_->next_ = child->next_;
@ -77,7 +77,7 @@ public:
last_ = child; last_ = child;
} }
void push_front(pointer_type child) void push_front(pointer child)
{ {
if (child->prev_) if (child->prev_)
child->prev_->next_ = child->next_; child->prev_->next_ = child->next_;
@ -99,7 +99,7 @@ public:
first_ = child; first_ = child;
} }
void insert_before(pointer_type child, pointer_type before) void insert_before(pointer child, pointer before)
{ {
if (child->prev_) if (child->prev_)
child->prev_->next_ = child->next_; child->prev_->next_ = child->next_;
@ -116,7 +116,7 @@ public:
before->prev_ = child; before->prev_ = child;
} }
void insert_after(pointer_type child, pointer_type after) void insert_after(pointer child, pointer after)
{ {
if (child->prev_) if (child->prev_)
child->prev_->next_ = child->next_; child->prev_->next_ = child->next_;
@ -133,7 +133,7 @@ public:
after->next_ = child; after->next_ = child;
} }
void remove(pointer_type child) void remove(pointer child)
{ {
if (child->next_) if (child->next_)
{ {
@ -159,10 +159,10 @@ public:
void clear() void clear()
{ {
pointer_type p = first_; pointer p = first_;
while (p) while (p)
{ {
pointer_type tmp = p; pointer tmp = p;
p = p->next_; p = p->next_;
if (tmp) if (tmp)
{ {
@ -180,8 +180,8 @@ public:
return; return;
int pos = 0; int pos = 0;
pointer_type p = first_; pointer p = first_;
pointer_type tmp = p; pointer tmp = p;
do do
{ {
tmp = p; tmp = p;
@ -205,15 +205,19 @@ public:
struct iterator_impl struct iterator_impl
{ {
using iterator_category = std::bidirectional_iterator_tag; using iterator_category = std::bidirectional_iterator_tag;
using pointer_type = _PTy; using value_type = typename std::pointer_traits<_PTy>::element_type;
using const_pointer_type = const _PTy; using difference_type = ptrdiff_t;
using pointer = _PTy;
using reference = value_type&;
inline iterator_impl(pointer_type ptr = nullptr, bool is_end = false) : base_(ptr), is_end_(is_end) {} inline iterator_impl(pointer ptr = nullptr, bool is_end = false) : base_(ptr), is_end_(is_end) {}
inline pointer_type operator*() const { OC_ASSERT(base_ && !is_end_); return base_; } inline pointer base() const { OC_ASSERT(!is_end_); return const_cast<pointer&>(base_); }
inline iterator_impl& operator++() { OC_ASSERT(base_ && !is_end_); pointer_type next = base_->next_item(); if (next) base_ = next; else is_end_ = true; return (*this); } inline reference operator*() const { OC_ASSERT(base_ && !is_end_); return const_cast<reference>(*base_); }
inline pointer operator->() const { OC_ASSERT(base_ && !is_end_); return const_cast<pointer&>(base_); }
inline iterator_impl& operator++() { OC_ASSERT(base_ && !is_end_); pointer next = base_->next_item(); if (next) base_ = next; else is_end_ = true; return (*this); }
inline iterator_impl operator++(int) { iterator_impl old = (*this); ++(*this); return old; } inline iterator_impl operator++(int) { iterator_impl old = (*this); ++(*this); return old; }
inline iterator_impl& operator--() { OC_ASSERT(base_); if (is_end_) is_end_ = false; else base_ = pointer_type(base_->prev_item()); return (*this); } inline iterator_impl& operator--() { OC_ASSERT(base_); if (is_end_) is_end_ = false; else base_ = pointer(base_->prev_item()); return (*this); }
inline iterator_impl operator--(int) { iterator_impl old = (*this); --(*this); return old; } inline iterator_impl operator--(int) { iterator_impl old = (*this); --(*this); return old; }
inline bool operator==(iterator_impl const& other) const { return base_ == other.base_ && is_end_ == other.is_end_; } inline bool operator==(iterator_impl const& other) const { return base_ == other.base_ && is_end_ == other.is_end_; }
inline bool operator!=(iterator_impl const& other) const { return !(*this == other); } inline bool operator!=(iterator_impl const& other) const { return !(*this == other); }
@ -221,11 +225,11 @@ public:
private: private:
bool is_end_; bool is_end_;
pointer_type base_; pointer base_;
}; };
using iterator = iterator_impl<pointer_type>; using iterator = iterator_impl<pointer>;
using const_iterator = iterator_impl<const pointer_type>; using const_iterator = iterator_impl<const pointer>;
using reverse_iterator = std::reverse_iterator<iterator>; using reverse_iterator = std::reverse_iterator<iterator>;
using const_reverse_iterator = std::reverse_iterator<const_iterator>; using const_reverse_iterator = std::reverse_iterator<const_iterator>;
@ -241,14 +245,14 @@ public:
inline reverse_iterator rend() { return reverse_iterator(begin()); } inline reverse_iterator rend() { return reverse_iterator(begin()); }
inline const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } inline const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
inline const_reverse_iterator crend() const { return rend(); } inline const_reverse_iterator crend() const { return rend(); }
inline pointer_type front() { if (empty()) throw std::out_of_range("front() called on empty intrusive_list"); return first_item(); } inline pointer front() { if (empty()) throw std::out_of_range("front() called on empty intrusive_list"); return first_item(); }
inline const_pointer_type front() const { if (empty()) throw std::out_of_range("front() called on empty intrusive_list"); return first_item(); } inline const pointer front() const { if (empty()) throw std::out_of_range("front() called on empty intrusive_list"); return first_item(); }
inline pointer_type back() { if (empty()) throw std::out_of_range("back() called on empty intrusive_list"); return last_item(); } inline pointer back() { if (empty()) throw std::out_of_range("back() called on empty intrusive_list"); return last_item(); }
inline const_pointer_type back() const { if (empty()) throw std::out_of_range("back() called on empty intrusive_list"); return last_item(); } inline const pointer back() const { if (empty()) throw std::out_of_range("back() called on empty intrusive_list"); return last_item(); }
private: private:
pointer_type first_; pointer first_;
pointer_type last_; pointer last_;
}; };
} // namespace oc } // namespace oc

View File

@ -33,9 +33,9 @@ namespace kiwano
{ {
} }
void ImGuiLayer::OnRender(RenderTarget* rt) void ImGuiLayer::OnRender(RenderContext& ctx)
{ {
PrepareToRender(rt); PrepareToRender(ctx);
for (const auto& pipeline : pipelines_) for (const auto& pipeline : pipelines_)
{ {
pipeline.second(); pipeline.second();

View File

@ -60,7 +60,7 @@ namespace kiwano
void RemoveAllItems(); void RemoveAllItems();
public: public:
void OnRender(RenderTarget* rt) override; void OnRender(RenderContext& ctx) override;
private: private:
Map<String, ImGuiPipeline> pipelines_; Map<String, ImGuiPipeline> pipelines_;

View File

@ -88,7 +88,7 @@ namespace kiwano
} }
} }
void Actor::Render(RenderTarget* rt) void Actor::Render(RenderContext& ctx)
{ {
if (!visible_) if (!visible_)
return; return;
@ -97,10 +97,10 @@ namespace kiwano
if (children_.empty()) if (children_.empty())
{ {
if (CheckVisibilty(rt)) if (CheckVisibilty(ctx))
{ {
PrepareToRender(rt); PrepareToRender(ctx);
OnRender(rt); OnRender(ctx);
} }
} }
else else
@ -112,52 +112,52 @@ namespace kiwano
if (child->GetZOrder() >= 0) if (child->GetZOrder() >= 0)
break; break;
child->Render(rt); child->Render(ctx);
child = child->next_item().get(); child = child->next_item().get();
} }
if (CheckVisibilty(rt)) if (CheckVisibilty(ctx))
{ {
PrepareToRender(rt); PrepareToRender(ctx);
OnRender(rt); OnRender(ctx);
} }
while (child) while (child)
{ {
child->Render(rt); child->Render(ctx);
child = child->next_item().get(); child = child->next_item().get();
} }
} }
} }
void Actor::PrepareToRender(RenderTarget* rt) void Actor::PrepareToRender(RenderContext& ctx)
{ {
rt->SetTransform(transform_matrix_); ctx.SetTransform(transform_matrix_);
rt->SetBrushOpacity(GetDisplayedOpacity()); ctx.SetBrushOpacity(GetDisplayedOpacity());
} }
void Actor::RenderBorder(RenderTarget* rt) void Actor::RenderBorder(RenderContext& ctx)
{ {
if (show_border_ && !size_.IsOrigin()) if (show_border_ && !size_.IsOrigin())
{ {
Rect bounds = GetBounds(); Rect bounds = GetBounds();
rt->SetTransform(transform_matrix_); ctx.SetTransform(transform_matrix_);
rt->SetCurrentBrush(GetStage()->GetBorderFillBrush()); ctx.SetCurrentBrush(GetStage()->GetBorderFillBrush());
rt->FillRectangle(bounds); ctx.FillRectangle(bounds);
rt->SetCurrentBrush(GetStage()->GetBorderStrokeBrush()); ctx.SetCurrentBrush(GetStage()->GetBorderStrokeBrush());
rt->DrawRectangle(bounds, 2.f); ctx.DrawRectangle(bounds, 2.f);
} }
for (auto child = children_.first_item(); child; child = child->next_item()) for (auto child = children_.first_item(); child; child = child->next_item())
{ {
child->RenderBorder(rt); child->RenderBorder(ctx);
} }
} }
bool Actor::CheckVisibilty(RenderTarget* rt) const bool Actor::CheckVisibilty(RenderContext& ctx) const
{ {
if (dirty_visibility_) if (dirty_visibility_)
{ {
@ -169,7 +169,7 @@ namespace kiwano
} }
else else
{ {
visible_in_rt_ = rt->CheckVisibility(GetBounds(), GetTransformMatrix()); visible_in_rt_ = ctx.CheckVisibility(GetBounds(), GetTransformMatrix());
} }
} }
return visible_in_rt_; return visible_in_rt_;

View File

@ -31,7 +31,7 @@ namespace kiwano
{ {
class Stage; class Stage;
class Director; class Director;
class RenderTarget; class RenderContext;
KGE_DECLARE_SMART_PTR(Actor); KGE_DECLARE_SMART_PTR(Actor);
@ -83,8 +83,8 @@ namespace kiwano
/// \~chinese /// \~chinese
/// @brief 渲染角色 /// @brief 渲染角色
/// @details 每帧画面刷新时调用该函数,默认不进行渲染,重载该函数以实现具体渲染过程 /// @details 每帧画面刷新时调用该函数,默认不进行渲染,重载该函数以实现具体渲染过程
/// @param rt 渲染目标 /// @param ctx 渲染上下文
virtual void OnRender(RenderTarget* rt); virtual void OnRender(RenderContext& ctx);
/// \~chinese /// \~chinese
/// @brief 获取显示状态 /// @brief 获取显示状态
@ -406,19 +406,19 @@ namespace kiwano
/// \~chinese /// \~chinese
/// @brief 渲染自身和所有子角色 /// @brief 渲染自身和所有子角色
virtual void Render(RenderTarget* rt); virtual void Render(RenderContext& ctx);
/// \~chinese /// \~chinese
/// @brief 绘制自身和所有子角色的边界 /// @brief 绘制自身和所有子角色的边界
virtual void RenderBorder(RenderTarget* rt); virtual void RenderBorder(RenderContext& ctx);
/// \~chinese /// \~chinese
/// @brief 检查是否在渲染目标的视区内 /// @brief 检查是否在渲染上下文的视区内
virtual bool CheckVisibilty(RenderTarget* rt) const; virtual bool CheckVisibilty(RenderContext& ctx) const;
/// \~chinese /// \~chinese
/// @brief 渲染前初始化渲染目标状态,仅当 CheckVisibilty 返回真时调用该函数 /// @brief 渲染前初始化渲染上下文状态,仅当 CheckVisibilty 返回真时调用该函数
virtual void PrepareToRender(RenderTarget* rt); virtual void PrepareToRender(RenderContext& ctx);
/// \~chinese /// \~chinese
/// @brief 更新自己的二维变换,并通知所有子角色 /// @brief 更新自己的二维变换,并通知所有子角色
@ -477,9 +477,9 @@ namespace kiwano
KGE_NOT_USED(dt); KGE_NOT_USED(dt);
} }
inline void Actor::OnRender(RenderTarget* rt) inline void Actor::OnRender(RenderContext& ctx)
{ {
KGE_NOT_USED(rt); KGE_NOT_USED(ctx);
} }
inline bool Actor::IsVisible() const inline bool Actor::IsVisible() const

View File

@ -38,33 +38,33 @@ namespace kiwano
void Canvas::BeginDraw() void Canvas::BeginDraw()
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->BeginDraw(); ctx_->BeginDraw();
} }
void Canvas::EndDraw() void Canvas::EndDraw()
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->EndDraw(); ctx_->EndDraw();
cache_expired_ = true; cache_expired_ = true;
} }
void Canvas::OnRender(RenderTarget* rt) void Canvas::OnRender(RenderContext& ctx)
{ {
UpdateCache(); UpdateCache();
if (texture_cached_ && texture_cached_->IsValid()) if (texture_cached_ && texture_cached_->IsValid())
{ {
PrepareToRender(rt); PrepareToRender(ctx);
Rect bitmap_rect(0.f, 0.f, texture_cached_->GetWidth(), texture_cached_->GetHeight()); Rect bitmap_rect(0.f, 0.f, texture_cached_->GetWidth(), texture_cached_->GetHeight());
rt->DrawTexture(*texture_cached_, bitmap_rect, bitmap_rect); ctx.DrawTexture(*texture_cached_, bitmap_rect, bitmap_rect);
} }
} }
void Canvas::SetBrush(BrushPtr brush) void Canvas::SetBrush(BrushPtr brush)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetCurrentBrush(brush); ctx_->SetCurrentBrush(brush);
} }
float Canvas::GetStrokeWidth() const float Canvas::GetStrokeWidth() const
@ -75,44 +75,44 @@ namespace kiwano
void Canvas::SetBrushTransform(Transform const& transform) void Canvas::SetBrushTransform(Transform const& transform)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetTransform(transform.ToMatrix()); ctx_->SetTransform(transform.ToMatrix());
} }
void Canvas::SetBrushTransform(Matrix3x2 const & transform) void Canvas::SetBrushTransform(Matrix3x2 const & transform)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetTransform(transform); ctx_->SetTransform(transform);
} }
void Canvas::PushLayerArea(LayerArea& area) void Canvas::PushLayerArea(LayerArea& area)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->PushLayer(area); ctx_->PushLayer(area);
} }
void Canvas::PopLayerArea() void Canvas::PopLayerArea()
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->PopLayer(); ctx_->PopLayer();
} }
void Canvas::PushClipRect(Rect const& clip_rect) void Canvas::PushClipRect(Rect const& clip_rect)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->PushClipRect(clip_rect); ctx_->PushClipRect(clip_rect);
} }
void Canvas::PopClipRect() void Canvas::PopClipRect()
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->PopClipRect(); ctx_->PopClipRect();
} }
void Canvas::DrawLine(Point const& begin, Point const& end) void Canvas::DrawLine(Point const& begin, Point const& end)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetCurrentBrush(stroke_brush_); ctx_->SetCurrentBrush(stroke_brush_);
rt_->DrawLine( ctx_->DrawLine(
begin, begin,
end, end,
stroke_width_, stroke_width_,
@ -124,8 +124,8 @@ namespace kiwano
void Canvas::DrawCircle(Point const& center, float radius) void Canvas::DrawCircle(Point const& center, float radius)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetCurrentBrush(stroke_brush_); ctx_->SetCurrentBrush(stroke_brush_);
rt_->DrawEllipse( ctx_->DrawEllipse(
center, center,
Vec2(radius, radius), Vec2(radius, radius),
stroke_width_, stroke_width_,
@ -137,8 +137,8 @@ namespace kiwano
void Canvas::DrawEllipse(Point const& center, Vec2 const& radius) void Canvas::DrawEllipse(Point const& center, Vec2 const& radius)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetCurrentBrush(stroke_brush_); ctx_->SetCurrentBrush(stroke_brush_);
rt_->DrawEllipse( ctx_->DrawEllipse(
center, center,
radius, radius,
stroke_width_, stroke_width_,
@ -150,8 +150,8 @@ namespace kiwano
void Canvas::DrawRect(Rect const& rect) void Canvas::DrawRect(Rect const& rect)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetCurrentBrush(stroke_brush_); ctx_->SetCurrentBrush(stroke_brush_);
rt_->DrawRectangle( ctx_->DrawRectangle(
rect, rect,
stroke_width_, stroke_width_,
stroke_style_ stroke_style_
@ -162,8 +162,8 @@ namespace kiwano
void Canvas::DrawRoundedRect(Rect const& rect, Vec2 const& radius) void Canvas::DrawRoundedRect(Rect const& rect, Vec2 const& radius)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetCurrentBrush(stroke_brush_); ctx_->SetCurrentBrush(stroke_brush_);
rt_->DrawRoundedRectangle( ctx_->DrawRoundedRectangle(
rect, rect,
radius, radius,
stroke_width_, stroke_width_,
@ -175,8 +175,8 @@ namespace kiwano
void Canvas::FillCircle(Point const& center, float radius) void Canvas::FillCircle(Point const& center, float radius)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetCurrentBrush(fill_brush_); ctx_->SetCurrentBrush(fill_brush_);
rt_->FillEllipse( ctx_->FillEllipse(
center, center,
Vec2(radius, radius) Vec2(radius, radius)
); );
@ -186,8 +186,8 @@ namespace kiwano
void Canvas::FillEllipse(Point const& center, Vec2 const& radius) void Canvas::FillEllipse(Point const& center, Vec2 const& radius)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetCurrentBrush(fill_brush_); ctx_->SetCurrentBrush(fill_brush_);
rt_->FillEllipse( ctx_->FillEllipse(
center, center,
radius radius
); );
@ -197,8 +197,8 @@ namespace kiwano
void Canvas::FillRect(Rect const& rect) void Canvas::FillRect(Rect const& rect)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetCurrentBrush(fill_brush_); ctx_->SetCurrentBrush(fill_brush_);
rt_->FillRectangle( ctx_->FillRectangle(
rect rect
); );
cache_expired_ = true; cache_expired_ = true;
@ -207,8 +207,8 @@ namespace kiwano
void Canvas::FillRoundedRect(Rect const& rect, Vec2 const& radius) void Canvas::FillRoundedRect(Rect const& rect, Vec2 const& radius)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetCurrentBrush(fill_brush_); ctx_->SetCurrentBrush(fill_brush_);
rt_->FillRoundedRectangle( ctx_->FillRoundedRectangle(
rect, rect,
radius radius
); );
@ -220,7 +220,7 @@ namespace kiwano
if (texture) if (texture)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->DrawTexture(*texture, src_rect, dest_rect); ctx_->DrawTexture(*texture, src_rect, dest_rect);
cache_expired_ = true; cache_expired_ = true;
} }
} }
@ -239,7 +239,7 @@ namespace kiwano
void Canvas::DrawTextLayout(TextLayout const& layout, Point const& point) void Canvas::DrawTextLayout(TextLayout const& layout, Point const& point)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->DrawTextLayout(layout, point); ctx_->DrawTextLayout(layout, point);
} }
void Canvas::BeginPath(Point const& begin_pos) void Canvas::BeginPath(Point const& begin_pos)
@ -275,8 +275,8 @@ namespace kiwano
void Canvas::StrokePath() void Canvas::StrokePath()
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetCurrentBrush(stroke_brush_); ctx_->SetCurrentBrush(stroke_brush_);
rt_->DrawGeometry( ctx_->DrawGeometry(
geo_sink_.GetGeometry(), geo_sink_.GetGeometry(),
stroke_width_, stroke_width_,
stroke_style_ stroke_style_
@ -287,8 +287,8 @@ namespace kiwano
void Canvas::FillPath() void Canvas::FillPath()
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->SetCurrentBrush(fill_brush_); ctx_->SetCurrentBrush(fill_brush_);
rt_->FillGeometry( ctx_->FillGeometry(
geo_sink_.GetGeometry() geo_sink_.GetGeometry()
); );
cache_expired_ = true; cache_expired_ = true;
@ -297,14 +297,14 @@ namespace kiwano
void Canvas::Clear() void Canvas::Clear()
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->Clear(); ctx_->Clear();
cache_expired_ = true; cache_expired_ = true;
} }
void Canvas::Clear(Color const& clear_color) void Canvas::Clear(Color const& clear_color)
{ {
InitRenderTargetAndBrushs(); InitRenderTargetAndBrushs();
rt_->Clear(clear_color); ctx_->Clear(clear_color);
cache_expired_ = true; cache_expired_ = true;
} }
@ -316,9 +316,9 @@ namespace kiwano
void Canvas::InitRenderTargetAndBrushs() void Canvas::InitRenderTargetAndBrushs()
{ {
if (!rt_) if (!ctx_)
{ {
Renderer::instance().CreateTextureRenderTarget(rt_); Renderer::instance().CreateTextureRenderTarget(ctx_);
} }
if (!stroke_brush_) if (!stroke_brush_)
@ -336,14 +336,14 @@ namespace kiwano
void Canvas::UpdateCache() const void Canvas::UpdateCache() const
{ {
if (cache_expired_ && rt_) if (cache_expired_ && ctx_)
{ {
if (!texture_cached_) if (!texture_cached_)
{ {
texture_cached_ = new Texture; texture_cached_ = new Texture;
} }
if (rt_->GetOutput(*texture_cached_)) if (ctx_->GetOutput(*texture_cached_))
{ {
cache_expired_ = false; cache_expired_ = false;
} }

View File

@ -20,7 +20,7 @@
#pragma once #pragma once
#include <kiwano/2d/Actor.h> #include <kiwano/2d/Actor.h>
#include <kiwano/renderer/RenderTarget.h> #include <kiwano/renderer/RenderContext.h>
#include <kiwano/renderer/GeometrySink.h> #include <kiwano/renderer/GeometrySink.h>
namespace kiwano namespace kiwano
@ -262,7 +262,7 @@ namespace kiwano
/// @brief 导出纹理 /// @brief 导出纹理
TexturePtr ExportToTexture() const; TexturePtr ExportToTexture() const;
void OnRender(RenderTarget* rt) override; void OnRender(RenderContext& ctx) override;
private: private:
void InitRenderTargetAndBrushs(); void InitRenderTargetAndBrushs();
@ -279,7 +279,7 @@ namespace kiwano
mutable bool cache_expired_; mutable bool cache_expired_;
mutable TexturePtr texture_cached_; mutable TexturePtr texture_cached_;
mutable TextureRenderTargetPtr rt_; mutable TextureRenderContextPtr ctx_;
}; };
/** @} */ /** @} */

View File

@ -75,12 +75,11 @@ namespace kiwano
{ {
} }
void DebugActor::OnRender(RenderTarget* rt) void DebugActor::OnRender(RenderContext& ctx)
{ {
rt->SetCurrentBrush(background_brush_); ctx.SetCurrentBrush(background_brush_);
rt->FillRoundedRectangle(GetBounds(), Vec2{ 5.f, 5.f }); ctx.FillRoundedRectangle(GetBounds(), Vec2{ 5.f, 5.f });
ctx.DrawTextLayout(debug_text_, Point(10, 10));
rt->DrawTextLayout(debug_text_, Point(10, 10));
} }
void DebugActor::OnUpdate(Duration dt) void DebugActor::OnUpdate(Duration dt)
@ -140,7 +139,7 @@ namespace kiwano
} }
} }
bool DebugActor::CheckVisibilty(RenderTarget* rt) const bool DebugActor::CheckVisibilty(RenderContext& ctx) const
{ {
return true; return true;
} }

View File

@ -41,12 +41,12 @@ namespace kiwano
virtual ~DebugActor(); virtual ~DebugActor();
void OnRender(RenderTarget* rt) override; void OnRender(RenderContext& ctx) override;
void OnUpdate(Duration dt) override; void OnUpdate(Duration dt) override;
protected: protected:
bool CheckVisibilty(RenderTarget* rt) const override; bool CheckVisibilty(RenderContext& ctx) const override;
private: private:
std::locale comma_locale_; std::locale comma_locale_;

View File

@ -70,13 +70,13 @@ namespace kiwano
return false; return false;
} }
void GifSprite::OnRender(RenderTarget* rt) void GifSprite::OnRender(RenderContext& ctx)
{ {
if (frame_to_render_ && CheckVisibilty(rt)) if (frame_to_render_ && CheckVisibilty(ctx))
{ {
PrepareToRender(rt); PrepareToRender(ctx);
rt->DrawTexture(*frame_to_render_, &frame_.rect, nullptr); ctx.DrawTexture(*frame_to_render_, &frame_.rect, nullptr);
} }
} }

View File

@ -21,7 +21,7 @@
#pragma once #pragma once
#include <kiwano/2d/Actor.h> #include <kiwano/2d/Actor.h>
#include <kiwano/core/Resource.h> #include <kiwano/core/Resource.h>
#include <kiwano/renderer/RenderTarget.h> #include <kiwano/renderer/RenderContext.h>
#include <kiwano/renderer/GifImage.h> #include <kiwano/renderer/GifImage.h>
namespace kiwano namespace kiwano
@ -98,7 +98,7 @@ namespace kiwano
/// @brief »ñÈ¡ GIF ͼƬ /// @brief »ñÈ¡ GIF ͼƬ
GifImagePtr GetGifImage() const; GifImagePtr GetGifImage() const;
void OnRender(RenderTarget* rt) override; void OnRender(RenderContext& ctx) override;
private: private:
void Update(Duration dt) override; void Update(Duration dt) override;
@ -147,7 +147,7 @@ namespace kiwano
GifImage::Frame frame_; GifImage::Frame frame_;
TexturePtr saved_frame_; TexturePtr saved_frame_;
TexturePtr frame_to_render_; TexturePtr frame_to_render_;
TextureRenderTargetPtr frame_rt_; TextureRenderContextPtr frame_rt_;
}; };
/** @} */ /** @} */

View File

@ -61,10 +61,8 @@ namespace kiwano
if (!swallow_) if (!swallow_)
{ {
ActorPtr prev; for (auto child = GetAllChildren().rbegin(); child != GetAllChildren().rend(); ++child)
for (auto child = GetAllChildren().last_item(); child; child = prev)
{ {
prev = child->prev_item();
child->Dispatch(evt); child->Dispatch(evt);
} }
} }
@ -72,16 +70,16 @@ namespace kiwano
EventDispatcher::Dispatch(evt); EventDispatcher::Dispatch(evt);
} }
void Layer::Render(RenderTarget* rt) void Layer::Render(RenderContext& ctx)
{ {
rt->PushLayer(area_); ctx.PushLayer(area_);
Actor::Render(rt); Actor::Render(ctx);
rt->PopLayer(); ctx.PopLayer();
} }
bool Layer::CheckVisibilty(RenderTarget* rt) const bool Layer::CheckVisibilty(RenderContext& ctx) const
{ {
// Do not need to render Layer // Do not need to render Layer
return false; return false;

View File

@ -21,7 +21,7 @@
#pragma once #pragma once
#include <kiwano/2d/Actor.h> #include <kiwano/2d/Actor.h>
#include <kiwano/renderer/LayerArea.h> #include <kiwano/renderer/LayerArea.h>
#include <kiwano/renderer/RenderTarget.h> #include <kiwano/renderer/RenderContext.h>
namespace kiwano namespace kiwano
{ {
@ -85,9 +85,9 @@ namespace kiwano
void Dispatch(Event& evt) override; void Dispatch(Event& evt) override;
protected: protected:
void Render(RenderTarget* rt) override; void Render(RenderContext& ctx) override;
bool CheckVisibilty(RenderTarget* rt) const override; bool CheckVisibilty(RenderContext& ctx) const override;
private: private:
bool swallow_; bool swallow_;

View File

@ -77,7 +77,7 @@ namespace kiwano
} }
} }
void ShapeActor::OnRender(RenderTarget* rt) void ShapeActor::OnRender(RenderContext& ctx)
{ {
// Create default brush // Create default brush
if (!fill_brush_) if (!fill_brush_)
@ -92,16 +92,16 @@ namespace kiwano
stroke_brush_->SetColor(Color::Transparent); stroke_brush_->SetColor(Color::Transparent);
} }
rt->SetCurrentBrush(stroke_brush_); ctx.SetCurrentBrush(stroke_brush_);
rt->DrawGeometry(geo_, stroke_width_ * 2 /* twice width for widening */, stroke_style_); ctx.DrawGeometry(geo_, stroke_width_ * 2 /* twice width for widening */, stroke_style_);
rt->SetCurrentBrush(fill_brush_); ctx.SetCurrentBrush(fill_brush_);
rt->FillGeometry(geo_); ctx.FillGeometry(geo_);
} }
bool ShapeActor::CheckVisibilty(RenderTarget* rt) const bool ShapeActor::CheckVisibilty(RenderContext& ctx) const
{ {
return geo_.IsValid() && Actor::CheckVisibilty(rt); return geo_.IsValid() && Actor::CheckVisibilty(ctx);
} }
//------------------------------------------------------- //-------------------------------------------------------

View File

@ -119,10 +119,10 @@ namespace kiwano
/// @brief <20>零섯부近榴 /// @brief <20>零섯부近榴
void SetGeometry(Geometry const& geometry); void SetGeometry(Geometry const& geometry);
void OnRender(RenderTarget* rt) override; void OnRender(RenderContext& ctx) override;
protected: protected:
bool CheckVisibilty(RenderTarget* rt) const override; bool CheckVisibilty(RenderContext& ctx) const override;
private: private:
BrushPtr fill_brush_; BrushPtr fill_brush_;

View File

@ -74,13 +74,13 @@ namespace kiwano
} }
} }
void Sprite::OnRender(RenderTarget* rt) void Sprite::OnRender(RenderContext& ctx)
{ {
rt->DrawTexture(*frame_->GetTexture(), &frame_->GetCropRect(), &GetBounds()); ctx.DrawTexture(*frame_->GetTexture(), &frame_->GetCropRect(), &GetBounds());
} }
bool Sprite::CheckVisibilty(RenderTarget* rt) const bool Sprite::CheckVisibilty(RenderContext& ctx) const
{ {
return frame_ && frame_->IsValid() && Actor::CheckVisibilty(rt); return frame_ && frame_->IsValid() && Actor::CheckVisibilty(ctx);
} }
} }

View File

@ -67,10 +67,10 @@ namespace kiwano
/// @param[in] frame ÍźĎńÖĄ /// @param[in] frame ÍźĎńÖĄ
void SetFrame(FramePtr frame); void SetFrame(FramePtr frame);
void OnRender(RenderTarget* rt) override; void OnRender(RenderContext& ctx) override;
protected: protected:
bool CheckVisibilty(RenderTarget* rt) const override; bool CheckVisibilty(RenderContext& ctx) const override;
private: private:
FramePtr frame_; FramePtr frame_;

View File

@ -46,9 +46,9 @@ namespace kiwano
KGE_SYS_LOG(L"Stage exited"); KGE_SYS_LOG(L"Stage exited");
} }
void Stage::RenderBorder(RenderTarget* rt) void Stage::RenderBorder(RenderContext& ctx)
{ {
rt->SetBrushOpacity(1.0f); ctx.SetBrushOpacity(1.0f);
if (!border_fill_brush_) if (!border_fill_brush_)
{ {
@ -62,7 +62,7 @@ namespace kiwano
border_stroke_brush_->SetColor(Color(Color::Red, .8f)); border_stroke_brush_->SetColor(Color(Color::Red, .8f));
} }
Actor::RenderBorder(rt); Actor::RenderBorder(ctx);
} }
} }

View File

@ -77,7 +77,7 @@ namespace kiwano
protected: protected:
/// \~chinese /// \~chinese
/// @brief 绘制所有子角色的边界 /// @brief 绘制所有子角色的边界
void RenderBorder(RenderTarget* rt) override; void RenderBorder(RenderContext& ctx) override;
private: private:
BrushPtr border_fill_brush_; BrushPtr border_fill_brush_;

View File

@ -75,9 +75,9 @@ namespace kiwano
{ {
} }
void TextActor::OnRender(RenderTarget* rt) void TextActor::OnRender(RenderContext& ctx)
{ {
rt->DrawTextLayout(text_layout_); ctx.DrawTextLayout(text_layout_);
} }
void TextActor::OnUpdate(Duration dt) void TextActor::OnUpdate(Duration dt)
@ -106,9 +106,9 @@ namespace kiwano
} }
} }
bool TextActor::CheckVisibilty(RenderTarget* rt) const bool TextActor::CheckVisibilty(RenderContext& ctx) const
{ {
return text_layout_.IsValid() && Actor::CheckVisibilty(rt); return text_layout_.IsValid() && Actor::CheckVisibilty(ctx);
} }
void TextActor::SetFillColor(Color const& color) void TextActor::SetFillColor(Color const& color)

View File

@ -170,12 +170,12 @@ namespace kiwano
/// @brief 获取默认文字样式 /// @brief 获取默认文字样式
static const TextStyle& GetDefaultStyle(); static const TextStyle& GetDefaultStyle();
void OnRender(RenderTarget* rt) override; void OnRender(RenderContext& ctx) override;
void OnUpdate(Duration dt) override; void OnUpdate(Duration dt) override;
protected: protected:
bool CheckVisibilty(RenderTarget* rt) const override; bool CheckVisibilty(RenderContext& ctx) const override;
private: private:
bool show_underline_; bool show_underline_;

View File

@ -91,30 +91,30 @@ namespace kiwano
} }
} }
void Transition::Render(RenderTarget* rt) void Transition::Render(RenderContext& ctx)
{ {
if (out_stage_) if (out_stage_)
{ {
out_stage_->PrepareToRender(rt); out_stage_->PrepareToRender(ctx);
rt->PushClipRect(Rect{ Point{}, window_size_ }); ctx.PushClipRect(Rect{ Point{}, window_size_ });
rt->PushLayer(out_layer_); ctx.PushLayer(out_layer_);
out_stage_->Render(rt); out_stage_->Render(ctx);
rt->PopLayer(); ctx.PopLayer();
rt->PopClipRect(); ctx.PopClipRect();
} }
if (in_stage_) if (in_stage_)
{ {
in_stage_->PrepareToRender(rt); in_stage_->PrepareToRender(ctx);
rt->PushClipRect(Rect{ Point{}, window_size_ }); ctx.PushClipRect(Rect{ Point{}, window_size_ });
rt->PushLayer(in_layer_); ctx.PushLayer(in_layer_);
in_stage_->Render(rt); in_stage_->Render(ctx);
rt->PopLayer(); ctx.PopLayer();
rt->PopClipRect(); ctx.PopClipRect();
} }
} }

View File

@ -25,7 +25,7 @@
namespace kiwano namespace kiwano
{ {
class Director; class Director;
class RenderTarget; class RenderContext;
KGE_DECLARE_SMART_PTR(Transition); KGE_DECLARE_SMART_PTR(Transition);
KGE_DECLARE_SMART_PTR(FadeTransition); KGE_DECLARE_SMART_PTR(FadeTransition);
@ -83,9 +83,9 @@ namespace kiwano
/** /**
* \~chinese * \~chinese
* @brief * @brief
* @param[in] rt äÖȾĿ±ê * @param[in] ctx
*/ */
virtual void Render(RenderTarget* rt); virtual void Render(RenderContext& ctx);
/** /**
* \~chinese * \~chinese

View File

@ -58,18 +58,6 @@ namespace kiwano
return action; return action;
} }
ActionPtr ActionManager::GetAction(String const & name)
{
if (actions_.empty())
return nullptr;
for (auto& action : actions_)
if (action->IsName(name))
return action;
return nullptr;
}
void ActionManager::ResumeAllActions() void ActionManager::ResumeAllActions()
{ {
if (actions_.empty()) if (actions_.empty())
@ -77,7 +65,7 @@ namespace kiwano
for (auto& action : actions_) for (auto& action : actions_)
{ {
action->Resume(); action.Resume();
} }
} }
@ -88,7 +76,7 @@ namespace kiwano
for (auto& action : actions_) for (auto& action : actions_)
{ {
action->Pause(); action.Pause();
} }
} }
@ -99,10 +87,22 @@ namespace kiwano
for (auto& action : actions_) for (auto& action : actions_)
{ {
action->Stop(); action.Stop();
} }
} }
ActionPtr ActionManager::GetAction(String const& name)
{
if (actions_.empty())
return nullptr;
for (auto& action : actions_)
if (action.IsName(name))
return &action;
return nullptr;
}
const ActionManager::Actions& ActionManager::GetAllActions() const const ActionManager::Actions& ActionManager::GetAllActions() const
{ {
return actions_; return actions_;

View File

@ -47,11 +47,6 @@ namespace kiwano
/// @brief 添加动画 /// @brief 添加动画
Action* AddAction(Action* action); Action* AddAction(Action* action);
/// \~chinese
/// @brief 获取指定名称的动画
/// @param name 动画名称
ActionPtr GetAction(String const& name);
/// \~chinese /// \~chinese
/// @brief 继续所有暂停动画 /// @brief 继续所有暂停动画
void ResumeAllActions(); void ResumeAllActions();
@ -64,6 +59,11 @@ namespace kiwano
/// @brief 停止所有动画 /// @brief 停止所有动画
void StopAllActions(); void StopAllActions();
/// \~chinese
/// @brief 获取指定名称的动画
/// @param name 动画名称
ActionPtr GetAction(String const& name);
/// \~chinese /// \~chinese
/// @brief 获取所有动画 /// @brief 获取所有动画
Actions const& GetAllActions() const; Actions const& GetAllActions() const;

View File

@ -24,7 +24,7 @@
namespace kiwano namespace kiwano
{ {
class RenderTarget; class RenderContext;
class Event; class Event;
/** /**
@ -66,8 +66,8 @@ namespace kiwano
/// \~chinese /// \~chinese
/// @brief 渲染时 /// @brief 渲染时
/// @param rt äÖȾĿ±ê /// @param ctx 渲染上下文
virtual void OnRender(RenderTarget* rt) {} virtual void OnRender(RenderContext& ctx) {}
/// \~chinese /// \~chinese
/// @brief 渲染后 /// @brief 渲染后

View File

@ -77,9 +77,9 @@ namespace kiwano
{ {
for (auto& listener : listeners_) for (auto& listener : listeners_)
{ {
if (listener->IsName(listener_name)) if (listener.IsName(listener_name))
{ {
listener->Start(); listener.Start();
} }
} }
} }
@ -88,9 +88,9 @@ namespace kiwano
{ {
for (auto& listener : listeners_) for (auto& listener : listeners_)
{ {
if (listener->IsName(listener_name)) if (listener.IsName(listener_name))
{ {
listener->Stop(); listener.Stop();
} }
} }
} }
@ -99,9 +99,9 @@ namespace kiwano
{ {
for (auto& listener : listeners_) for (auto& listener : listeners_)
{ {
if (listener->IsName(listener_name)) if (listener.IsName(listener_name))
{ {
listener->Remove(); listener.Remove();
} }
} }
} }
@ -110,9 +110,9 @@ namespace kiwano
{ {
for (auto& listener : listeners_) for (auto& listener : listeners_)
{ {
if (listener->type_ == type) if (listener.GetEventType() == type)
{ {
listener->Start(); listener.Start();
} }
} }
} }
@ -121,9 +121,9 @@ namespace kiwano
{ {
for (auto& listener : listeners_) for (auto& listener : listeners_)
{ {
if (listener->type_ == type) if (listener.GetEventType() == type)
{ {
listener->Stop(); listener.Stop();
} }
} }
} }
@ -132,9 +132,9 @@ namespace kiwano
{ {
for (auto& listener : listeners_) for (auto& listener : listeners_)
{ {
if (listener->type_ == type) if (listener.GetEventType() == type)
{ {
listener->Remove(); listener.Remove();
} }
} }
} }
@ -143,7 +143,7 @@ namespace kiwano
{ {
for (auto& listener : listeners_) for (auto& listener : listeners_)
{ {
listener->Start(); listener.Start();
} }
} }
@ -151,7 +151,7 @@ namespace kiwano
{ {
for (auto& listener : listeners_) for (auto& listener : listeners_)
{ {
listener->Stop(); listener.Stop();
} }
} }
@ -159,7 +159,7 @@ namespace kiwano
{ {
for (auto& listener : listeners_) for (auto& listener : listeners_)
{ {
listener->Remove(); listener.Remove();
} }
} }

View File

@ -71,9 +71,9 @@ namespace kiwano
for (auto& timer : timers_) for (auto& timer : timers_)
{ {
if (timer->IsName(name)) if (timer.IsName(name))
{ {
timer->Stop(); timer.Stop();
} }
} }
} }
@ -85,9 +85,9 @@ namespace kiwano
for (auto& timer : timers_) for (auto& timer : timers_)
{ {
if (timer->IsName(name)) if (timer.IsName(name))
{ {
timer->Start(); timer.Start();
} }
} }
} }
@ -99,9 +99,9 @@ namespace kiwano
for (auto& timer : timers_) for (auto& timer : timers_)
{ {
if (timer->IsName(name)) if (timer.IsName(name))
{ {
timer->Remove(); timer.Remove();
} }
} }
} }
@ -113,7 +113,7 @@ namespace kiwano
for (auto& timer : timers_) for (auto& timer : timers_)
{ {
timer->Stop(); timer.Stop();
} }
} }
@ -124,7 +124,7 @@ namespace kiwano
for (auto& timer : timers_) for (auto& timer : timers_)
{ {
timer->Start(); timer.Start();
} }
} }

View File

@ -238,7 +238,7 @@ namespace kiwano
} }
// Rendering // Rendering
Renderer* renderer = &Renderer::instance(); Renderer& renderer = Renderer::instance();
for (auto c : render_comps_) for (auto c : render_comps_)
{ {
c->OnRender(renderer); c->OnRender(renderer);

View File

@ -23,7 +23,7 @@
#include <kiwano/2d/Stage.h> #include <kiwano/2d/Stage.h>
#include <kiwano/2d/Transition.h> #include <kiwano/2d/Transition.h>
#include <kiwano/2d/DebugActor.h> #include <kiwano/2d/DebugActor.h>
#include <kiwano/renderer/RenderTarget.h> #include <kiwano/renderer/RenderContext.h>
namespace kiwano namespace kiwano
{ {
@ -154,28 +154,28 @@ namespace kiwano
debug_actor_->Update(dt); debug_actor_->Update(dt);
} }
void Director::OnRender(RenderTarget* rt) void Director::OnRender(RenderContext& ctx)
{ {
if (transition_) if (transition_)
{ {
transition_->Render(rt); transition_->Render(ctx);
} }
else if (current_stage_) else if (current_stage_)
{ {
current_stage_->Render(rt); current_stage_->Render(ctx);
} }
if (render_border_enabled_) if (render_border_enabled_)
{ {
if (current_stage_) if (current_stage_)
{ {
current_stage_->RenderBorder(rt); current_stage_->RenderBorder(ctx);
} }
} }
if (debug_actor_) if (debug_actor_)
{ {
debug_actor_->Render(rt); debug_actor_->Render(ctx);
} }
} }

View File

@ -106,7 +106,7 @@ namespace kiwano
void OnUpdate(Duration dt) override; void OnUpdate(Duration dt) override;
void OnRender(RenderTarget* rt) override; void OnRender(RenderContext& ctx) override;
void HandleEvent(Event& evt) override; void HandleEvent(Event& evt) override;

View File

@ -24,7 +24,7 @@
namespace kiwano namespace kiwano
{ {
class RenderTarget; class RenderContext;
class Renderer; class Renderer;
KGE_DECLARE_SMART_PTR(Brush); KGE_DECLARE_SMART_PTR(Brush);
@ -88,7 +88,7 @@ namespace kiwano
class KGE_API Brush class KGE_API Brush
: public virtual ObjectBase : public virtual ObjectBase
{ {
friend class RenderTarget; friend class RenderContext;
friend class Renderer; friend class Renderer;
public: public:

View File

@ -23,7 +23,7 @@
namespace kiwano namespace kiwano
{ {
class RenderTarget; class RenderContext;
class Renderer; class Renderer;
class GeometrySink; class GeometrySink;
@ -38,7 +38,7 @@ namespace kiwano
*/ */
class KGE_API Geometry class KGE_API Geometry
{ {
friend class RenderTarget; friend class RenderContext;
friend class Renderer; friend class Renderer;
friend class GeometrySink; friend class GeometrySink;

View File

@ -23,7 +23,7 @@
namespace kiwano namespace kiwano
{ {
class RenderTarget; class RenderContext;
class Renderer; class Renderer;
/** /**

View File

@ -23,7 +23,7 @@
namespace kiwano namespace kiwano
{ {
class RenderTarget; class RenderContext;
/** /**
* \addtogroup Render * \addtogroup Render
@ -36,7 +36,7 @@ namespace kiwano
*/ */
class KGE_API LayerArea class KGE_API LayerArea
{ {
friend class RenderTarget; friend class RenderContext;
public: public:
LayerArea(); LayerArea();

View File

@ -18,16 +18,16 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE. // THE SOFTWARE.
#include <kiwano/renderer/RenderTarget.h> #include <kiwano/renderer/RenderContext.h>
#include <kiwano/core/Logger.h> #include <kiwano/core/Logger.h>
namespace kiwano namespace kiwano
{ {
// //
// RenderTarget // RenderContext
// //
RenderTarget::RenderTarget() RenderContext::RenderContext()
: collecting_status_(false) : collecting_status_(false)
, fast_global_transform_(true) , fast_global_transform_(true)
, brush_opacity_(1.0f) , brush_opacity_(1.0f)
@ -37,18 +37,18 @@ namespace kiwano
status_.primitives = 0; status_.primitives = 0;
} }
HRESULT RenderTarget::CreateDeviceResources(ComPtr<ID2D1Factory> factory, ComPtr<ID2D1RenderTarget> rt) HRESULT RenderContext::CreateDeviceResources(ComPtr<ID2D1Factory> factory, ComPtr<ID2D1RenderTarget> ctx)
{ {
if (!factory || !rt) if (!factory || !ctx)
return E_INVALIDARG; return E_INVALIDARG;
render_target_ = rt; render_ctx_ = ctx;
text_renderer_.reset(); text_renderer_.reset();
current_brush_.reset(); current_brush_.reset();
HRESULT hr = ITextRenderer::Create( HRESULT hr = ITextRenderer::Create(
&text_renderer_, &text_renderer_,
render_target_.get() render_ctx_.get()
); );
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
@ -62,19 +62,19 @@ namespace kiwano
return hr; return hr;
} }
void RenderTarget::DiscardDeviceResources() void RenderContext::DiscardDeviceResources()
{ {
text_renderer_.reset(); text_renderer_.reset();
render_target_.reset(); render_ctx_.reset();
current_brush_.reset(); current_brush_.reset();
} }
bool RenderTarget::IsValid() const bool RenderContext::IsValid() const
{ {
return render_target_ != nullptr; return render_ctx_ != nullptr;
} }
void RenderTarget::BeginDraw() void RenderContext::BeginDraw()
{ {
if (collecting_status_) if (collecting_status_)
{ {
@ -82,15 +82,15 @@ namespace kiwano
status_.primitives = 0; status_.primitives = 0;
} }
if (render_target_) if (render_ctx_)
{ {
render_target_->BeginDraw(); render_ctx_->BeginDraw();
} }
} }
void RenderTarget::EndDraw() void RenderContext::EndDraw()
{ {
win32::ThrowIfFailed( render_target_->EndDraw() ); win32::ThrowIfFailed( render_ctx_->EndDraw() );
if (collecting_status_) if (collecting_status_)
{ {
@ -98,14 +98,14 @@ namespace kiwano
} }
} }
void RenderTarget::DrawGeometry(Geometry const& geometry, float stroke_width, const StrokeStyle& stroke) void RenderContext::DrawGeometry(Geometry const& geometry, float stroke_width, const StrokeStyle& stroke)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!"); KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!");
if (geometry.IsValid()) if (geometry.IsValid())
{ {
render_target_->DrawGeometry( render_ctx_->DrawGeometry(
geometry.GetGeometry().get(), geometry.GetGeometry().get(),
current_brush_->GetBrush().get(), current_brush_->GetBrush().get(),
stroke_width, stroke_width,
@ -116,14 +116,14 @@ namespace kiwano
} }
} }
void RenderTarget::FillGeometry(Geometry const& geometry) void RenderContext::FillGeometry(Geometry const& geometry)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!"); KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!");
if (geometry.IsValid()) if (geometry.IsValid())
{ {
render_target_->FillGeometry( render_ctx_->FillGeometry(
geometry.GetGeometry().get(), geometry.GetGeometry().get(),
current_brush_->GetBrush().get() current_brush_->GetBrush().get()
); );
@ -132,12 +132,12 @@ namespace kiwano
} }
} }
void RenderTarget::DrawLine(Point const& point1, Point const& point2, float stroke_width, const StrokeStyle& stroke) void RenderContext::DrawLine(Point const& point1, Point const& point2, float stroke_width, const StrokeStyle& stroke)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!"); KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!");
render_target_->DrawLine( render_ctx_->DrawLine(
DX::ConvertToPoint2F(point1), DX::ConvertToPoint2F(point1),
DX::ConvertToPoint2F(point2), DX::ConvertToPoint2F(point2),
current_brush_->GetBrush().get(), current_brush_->GetBrush().get(),
@ -148,12 +148,12 @@ namespace kiwano
IncreasePrimitivesCount(); IncreasePrimitivesCount();
} }
void RenderTarget::DrawRectangle(Rect const& rect, float stroke_width, const StrokeStyle& stroke) void RenderContext::DrawRectangle(Rect const& rect, float stroke_width, const StrokeStyle& stroke)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!"); KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!");
render_target_->DrawRectangle( render_ctx_->DrawRectangle(
DX::ConvertToRectF(rect), DX::ConvertToRectF(rect),
current_brush_->GetBrush().get(), current_brush_->GetBrush().get(),
stroke_width, stroke_width,
@ -163,12 +163,12 @@ namespace kiwano
IncreasePrimitivesCount(); IncreasePrimitivesCount();
} }
void RenderTarget::FillRectangle(Rect const& rect) void RenderContext::FillRectangle(Rect const& rect)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!"); KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!");
render_target_->FillRectangle( render_ctx_->FillRectangle(
DX::ConvertToRectF(rect), DX::ConvertToRectF(rect),
current_brush_->GetBrush().get() current_brush_->GetBrush().get()
); );
@ -176,12 +176,12 @@ namespace kiwano
IncreasePrimitivesCount(); IncreasePrimitivesCount();
} }
void RenderTarget::DrawRoundedRectangle(Rect const& rect, Vec2 const& radius, float stroke_width, const StrokeStyle& stroke) void RenderContext::DrawRoundedRectangle(Rect const& rect, Vec2 const& radius, float stroke_width, const StrokeStyle& stroke)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!"); KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!");
render_target_->DrawRoundedRectangle( render_ctx_->DrawRoundedRectangle(
D2D1::RoundedRect( D2D1::RoundedRect(
DX::ConvertToRectF(rect), DX::ConvertToRectF(rect),
radius.x, radius.x,
@ -195,12 +195,12 @@ namespace kiwano
IncreasePrimitivesCount(); IncreasePrimitivesCount();
} }
void RenderTarget::FillRoundedRectangle(Rect const& rect, Vec2 const& radius) void RenderContext::FillRoundedRectangle(Rect const& rect, Vec2 const& radius)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!"); KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!");
render_target_->FillRoundedRectangle( render_ctx_->FillRoundedRectangle(
D2D1::RoundedRect( D2D1::RoundedRect(
DX::ConvertToRectF(rect), DX::ConvertToRectF(rect),
radius.x, radius.x,
@ -212,12 +212,12 @@ namespace kiwano
IncreasePrimitivesCount(); IncreasePrimitivesCount();
} }
void RenderTarget::DrawEllipse(Point const& center, Vec2 const& radius, float stroke_width, const StrokeStyle& stroke) void RenderContext::DrawEllipse(Point const& center, Vec2 const& radius, float stroke_width, const StrokeStyle& stroke)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!"); KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!");
render_target_->DrawEllipse( render_ctx_->DrawEllipse(
D2D1::Ellipse( D2D1::Ellipse(
DX::ConvertToPoint2F(center), DX::ConvertToPoint2F(center),
radius.x, radius.x,
@ -231,12 +231,12 @@ namespace kiwano
IncreasePrimitivesCount(); IncreasePrimitivesCount();
} }
void RenderTarget::FillEllipse(Point const& center, Vec2 const& radius) void RenderContext::FillEllipse(Point const& center, Vec2 const& radius)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!"); KGE_ASSERT(current_brush_ && "The brush used for rendering has not been set!");
render_target_->FillEllipse( render_ctx_->FillEllipse(
D2D1::Ellipse( D2D1::Ellipse(
DX::ConvertToPoint2F(center), DX::ConvertToPoint2F(center),
radius.x, radius.x,
@ -248,14 +248,14 @@ namespace kiwano
IncreasePrimitivesCount(); IncreasePrimitivesCount();
} }
void RenderTarget::DrawTexture(Texture const& texture, Rect const& src_rect, Rect const& dest_rect) void RenderContext::DrawTexture(Texture const& texture, Rect const& src_rect, Rect const& dest_rect)
{ {
DrawTexture(texture, &src_rect, &dest_rect); DrawTexture(texture, &src_rect, &dest_rect);
} }
void RenderTarget::DrawTexture(Texture const& texture, const Rect* src_rect, const Rect* dest_rect) void RenderContext::DrawTexture(Texture const& texture, const Rect* src_rect, const Rect* dest_rect)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
if (texture.IsValid()) if (texture.IsValid())
{ {
@ -263,7 +263,7 @@ namespace kiwano
? D2D1_BITMAP_INTERPOLATION_MODE_LINEAR ? D2D1_BITMAP_INTERPOLATION_MODE_LINEAR
: D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR; : D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR;
render_target_->DrawBitmap( render_ctx_->DrawBitmap(
texture.GetBitmap().get(), texture.GetBitmap().get(),
dest_rect ? &DX::ConvertToRectF(*dest_rect) : nullptr, dest_rect ? &DX::ConvertToRectF(*dest_rect) : nullptr,
brush_opacity_, brush_opacity_,
@ -275,7 +275,7 @@ namespace kiwano
} }
} }
void RenderTarget::DrawTextLayout(TextLayout const& layout, Point const& offset) void RenderContext::DrawTextLayout(TextLayout const& layout, Point const& offset)
{ {
KGE_ASSERT(text_renderer_ && "Text renderer has not been initialized!"); KGE_ASSERT(text_renderer_ && "Text renderer has not been initialized!");
@ -318,12 +318,12 @@ namespace kiwano
} }
} }
void RenderTarget::CreateTexture(Texture& texture, math::Vec2T<uint32_t> size, D2D1_PIXEL_FORMAT format) void RenderContext::CreateTexture(Texture& texture, math::Vec2T<uint32_t> size, D2D1_PIXEL_FORMAT format)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
ComPtr<ID2D1Bitmap> saved_bitmap; ComPtr<ID2D1Bitmap> saved_bitmap;
HRESULT hr = render_target_->CreateBitmap( HRESULT hr = render_ctx_->CreateBitmap(
D2D1::SizeU(size.x, size.y), D2D1::SizeU(size.x, size.y),
D2D1::BitmapProperties(format), D2D1::BitmapProperties(format),
&saved_bitmap &saved_bitmap
@ -339,28 +339,28 @@ namespace kiwano
} }
} }
void RenderTarget::PushClipRect(Rect const& clip_rect) void RenderContext::PushClipRect(Rect const& clip_rect)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
render_target_->PushAxisAlignedClip( render_ctx_->PushAxisAlignedClip(
DX::ConvertToRectF(clip_rect), DX::ConvertToRectF(clip_rect),
antialias_ ? D2D1_ANTIALIAS_MODE_PER_PRIMITIVE : D2D1_ANTIALIAS_MODE_ALIASED antialias_ ? D2D1_ANTIALIAS_MODE_PER_PRIMITIVE : D2D1_ANTIALIAS_MODE_ALIASED
); );
} }
void RenderTarget::PopClipRect() void RenderContext::PopClipRect()
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
render_target_->PopAxisAlignedClip(); render_ctx_->PopAxisAlignedClip();
} }
void RenderTarget::PushLayer(LayerArea& layer) void RenderContext::PushLayer(LayerArea& layer)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
if (!layer.IsValid()) if (!layer.IsValid())
{ {
ComPtr<ID2D1Layer> output; ComPtr<ID2D1Layer> output;
HRESULT hr = render_target_->CreateLayer(&output); HRESULT hr = render_ctx_->CreateLayer(&output);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
@ -374,7 +374,7 @@ namespace kiwano
if (layer.IsValid()) if (layer.IsValid())
{ {
render_target_->PushLayer( render_ctx_->PushLayer(
D2D1::LayerParameters( D2D1::LayerParameters(
DX::ConvertToRectF(layer.GetAreaRect()), DX::ConvertToRectF(layer.GetAreaRect()),
layer.GetMaskGeometry().GetGeometry().get(), layer.GetMaskGeometry().GetGeometry().get(),
@ -389,40 +389,40 @@ namespace kiwano
} }
} }
void RenderTarget::PopLayer() void RenderContext::PopLayer()
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
render_target_->PopLayer(); render_ctx_->PopLayer();
} }
void RenderTarget::Clear() void RenderContext::Clear()
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
render_target_->Clear(); render_ctx_->Clear();
} }
void RenderTarget::Clear(Color const& clear_color) void RenderContext::Clear(Color const& clear_color)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
render_target_->Clear(DX::ConvertToColorF(clear_color)); render_ctx_->Clear(DX::ConvertToColorF(clear_color));
} }
void RenderTarget::SetTransform(const Matrix3x2& matrix) void RenderContext::SetTransform(const Matrix3x2& matrix)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
if (fast_global_transform_) if (fast_global_transform_)
{ {
render_target_->SetTransform(DX::ConvertToMatrix3x2F(&matrix)); render_ctx_->SetTransform(DX::ConvertToMatrix3x2F(&matrix));
} }
else else
{ {
Matrix3x2 result = matrix * global_transform_; Matrix3x2 result = matrix * global_transform_;
render_target_->SetTransform(DX::ConvertToMatrix3x2F(&result)); render_ctx_->SetTransform(DX::ConvertToMatrix3x2F(&result));
} }
} }
void RenderTarget::SetGlobalTransform(const Matrix3x2* matrix) void RenderContext::SetGlobalTransform(const Matrix3x2* matrix)
{ {
if (matrix) if (matrix)
{ {
@ -435,17 +435,17 @@ namespace kiwano
} }
} }
void RenderTarget::SetAntialiasMode(bool enabled) void RenderContext::SetAntialiasMode(bool enabled)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
render_target_->SetAntialiasMode(enabled ? D2D1_ANTIALIAS_MODE_PER_PRIMITIVE : D2D1_ANTIALIAS_MODE_ALIASED); render_ctx_->SetAntialiasMode(enabled ? D2D1_ANTIALIAS_MODE_PER_PRIMITIVE : D2D1_ANTIALIAS_MODE_ALIASED);
antialias_ = enabled; antialias_ = enabled;
} }
void RenderTarget::SetTextAntialiasMode(TextAntialiasMode mode) void RenderContext::SetTextAntialiasMode(TextAntialiasMode mode)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
D2D1_TEXT_ANTIALIAS_MODE antialias_mode = D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE; D2D1_TEXT_ANTIALIAS_MODE antialias_mode = D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE;
switch (mode) switch (mode)
@ -467,12 +467,12 @@ namespace kiwano
} }
text_antialias_ = mode; text_antialias_ = mode;
render_target_->SetTextAntialiasMode(antialias_mode); render_ctx_->SetTextAntialiasMode(antialias_mode);
} }
bool RenderTarget::CheckVisibility(Rect const& bounds, Matrix3x2 const& transform) bool RenderContext::CheckVisibility(Rect const& bounds, Matrix3x2 const& transform)
{ {
KGE_ASSERT(render_target_ && "Render target has not been initialized!"); KGE_ASSERT(render_ctx_ && "Render target has not been initialized!");
if (fast_global_transform_) if (fast_global_transform_)
{ {
@ -481,17 +481,17 @@ namespace kiwano
return visible_size_.Intersects(Matrix3x2(transform * global_transform_).Transform(bounds)); return visible_size_.Intersects(Matrix3x2(transform * global_transform_).Transform(bounds));
} }
void RenderTarget::Resize(Size const& size) void RenderContext::Resize(Size const& size)
{ {
visible_size_ = Rect(Point(), size); visible_size_ = Rect(Point(), size);
} }
void RenderTarget::SetCollectingStatus(bool enable) void RenderContext::SetCollectingStatus(bool enable)
{ {
collecting_status_ = enable; collecting_status_ = enable;
} }
void RenderTarget::IncreasePrimitivesCount(uint32_t increase) const void RenderContext::IncreasePrimitivesCount(uint32_t increase) const
{ {
if (collecting_status_) if (collecting_status_)
{ {
@ -501,14 +501,14 @@ namespace kiwano
// //
// TextureRenderTarget // TextureRenderContext
// //
TextureRenderTarget::TextureRenderTarget() TextureRenderContext::TextureRenderContext()
{ {
} }
bool TextureRenderTarget::GetOutput(Texture& texture) bool TextureRenderContext::GetOutput(Texture& texture)
{ {
HRESULT hr = E_FAIL; HRESULT hr = E_FAIL;

View File

@ -32,8 +32,8 @@ namespace kiwano
{ {
class Renderer; class Renderer;
KGE_DECLARE_SMART_PTR(RenderTarget); KGE_DECLARE_SMART_PTR(RenderContext);
KGE_DECLARE_SMART_PTR(TextureRenderTarget); KGE_DECLARE_SMART_PTR(TextureRenderContext);
/** /**
* \addtogroup Render * \addtogroup Render
@ -52,9 +52,9 @@ namespace kiwano
/// \~chinese /// \~chinese
/// @brief 渲染目标 /// @brief 渲染上下文
/// @details 渲染目标将完成基础图元的绘制,并将绘制结果输出到特定的目标中(如窗口或纹理) /// @details 渲染上下文将完成基础图元的绘制,并将绘制结果输出到特定的目标中(如窗口或纹理)
class KGE_API RenderTarget class KGE_API RenderContext
: public virtual ObjectBase : public virtual ObjectBase
{ {
friend class Renderer; friend class Renderer;
@ -258,12 +258,12 @@ namespace kiwano
); );
/// \~chinese /// \~chinese
/// @brief 重设渲染目标大小 /// @brief 重设渲染上下文大小
void Resize(Size const& size); void Resize(Size const& size);
public: public:
/// \~chinese /// \~chinese
/// @brief 渲染目标状态 /// @brief 渲染上下文状态
struct Status struct Status
{ {
uint32_t primitives; ///< 渲染图元数量 uint32_t primitives; ///< 渲染图元数量
@ -278,11 +278,11 @@ namespace kiwano
void SetCollectingStatus(bool enable); void SetCollectingStatus(bool enable);
/// \~chinese /// \~chinese
/// @brief 获取渲染目标状态 /// @brief 获取渲染上下文状态
Status const& GetStatus() const; Status const& GetStatus() const;
protected: protected:
RenderTarget(); RenderContext();
ComPtr<ID2D1RenderTarget> GetRenderTarget() const; ComPtr<ID2D1RenderTarget> GetRenderTarget() const;
@ -291,7 +291,7 @@ namespace kiwano
private: private:
/// \~chinese /// \~chinese
/// @brief 创建设备依赖资源 /// @brief 创建设备依赖资源
HRESULT CreateDeviceResources(ComPtr<ID2D1Factory> factory, ComPtr<ID2D1RenderTarget> rt); HRESULT CreateDeviceResources(ComPtr<ID2D1Factory> factory, ComPtr<ID2D1RenderTarget> ctx);
/// \~chinese /// \~chinese
/// @brief 销毁设备依赖资源 /// @brief 销毁设备依赖资源
@ -307,7 +307,7 @@ namespace kiwano
float brush_opacity_; float brush_opacity_;
TextAntialiasMode text_antialias_; TextAntialiasMode text_antialias_;
ComPtr<ITextRenderer> text_renderer_; ComPtr<ITextRenderer> text_renderer_;
ComPtr<ID2D1RenderTarget> render_target_; ComPtr<ID2D1RenderTarget> render_ctx_;
BrushPtr current_brush_; BrushPtr current_brush_;
Rect visible_size_; Rect visible_size_;
Matrix3x2 global_transform_; Matrix3x2 global_transform_;
@ -318,10 +318,10 @@ namespace kiwano
/// \~chinese /// \~chinese
/// @brief 纹理渲染目标 /// @brief 纹理渲染上下文
/// @details 纹理渲染目标将渲染输出到一个纹理对象中 /// @details 纹理渲染上下文将渲染输出到一个纹理对象中
class KGE_API TextureRenderTarget class KGE_API TextureRenderContext
: public RenderTarget : public RenderContext
{ {
friend class Renderer; friend class Renderer;
@ -337,11 +337,11 @@ namespace kiwano
bool GetOutput(Texture& texture); bool GetOutput(Texture& texture);
private: private:
TextureRenderTarget(); TextureRenderContext();
ComPtr<ID2D1BitmapRenderTarget> GetBitmapRenderTarget() const; ComPtr<ID2D1BitmapRenderTarget> GetBitmapRenderTarget() const;
void SetBitmapRenderTarget(ComPtr<ID2D1BitmapRenderTarget> rt); void SetBitmapRenderTarget(ComPtr<ID2D1BitmapRenderTarget> ctx);
private: private:
ComPtr<ID2D1BitmapRenderTarget> bitmap_rt_; ComPtr<ID2D1BitmapRenderTarget> bitmap_rt_;
@ -350,54 +350,54 @@ namespace kiwano
/** @} */ /** @} */
inline RenderTarget::Status::Status() inline RenderContext::Status::Status()
: primitives(0) : primitives(0)
{ {
} }
inline RenderTarget::Status const& RenderTarget::GetStatus() const inline RenderContext::Status const& RenderContext::GetStatus() const
{ {
return status_; return status_;
} }
inline ComPtr<ID2D1RenderTarget> RenderTarget::GetRenderTarget() const inline ComPtr<ID2D1RenderTarget> RenderContext::GetRenderTarget() const
{ {
KGE_ASSERT(render_target_); KGE_ASSERT(render_ctx_);
return render_target_; return render_ctx_;
} }
inline ComPtr<ITextRenderer> RenderTarget::GetTextRenderer() const inline ComPtr<ITextRenderer> RenderContext::GetTextRenderer() const
{ {
KGE_ASSERT(text_renderer_); KGE_ASSERT(text_renderer_);
return text_renderer_; return text_renderer_;
} }
inline float RenderTarget::GetBrushOpacity() const inline float RenderContext::GetBrushOpacity() const
{ {
return brush_opacity_; return brush_opacity_;
} }
inline BrushPtr RenderTarget::GetCurrentBrush() const inline BrushPtr RenderContext::GetCurrentBrush() const
{ {
return current_brush_; return current_brush_;
} }
inline Matrix3x2 RenderTarget::GetGlobalTransform() const inline Matrix3x2 RenderContext::GetGlobalTransform() const
{ {
return global_transform_; return global_transform_;
} }
inline void RenderTarget::SetBrushOpacity(float opacity) inline void RenderContext::SetBrushOpacity(float opacity)
{ {
brush_opacity_ = opacity; brush_opacity_ = opacity;
} }
inline void RenderTarget::SetGlobalTransform(const Matrix3x2& matrix) inline void RenderContext::SetGlobalTransform(const Matrix3x2& matrix)
{ {
SetGlobalTransform(&matrix); SetGlobalTransform(&matrix);
} }
inline void RenderTarget::SetCurrentBrush(BrushPtr brush) inline void RenderContext::SetCurrentBrush(BrushPtr brush)
{ {
current_brush_ = brush; current_brush_ = brush;
if (current_brush_) if (current_brush_)
@ -406,18 +406,18 @@ namespace kiwano
} }
} }
inline bool TextureRenderTarget::IsValid() const inline bool TextureRenderContext::IsValid() const
{ {
return bitmap_rt_ != nullptr; return bitmap_rt_ != nullptr;
} }
inline ComPtr<ID2D1BitmapRenderTarget> TextureRenderTarget::GetBitmapRenderTarget() const inline ComPtr<ID2D1BitmapRenderTarget> TextureRenderContext::GetBitmapRenderTarget() const
{ {
return bitmap_rt_; return bitmap_rt_;
} }
inline void TextureRenderTarget::SetBitmapRenderTarget(ComPtr<ID2D1BitmapRenderTarget> rt) inline void TextureRenderContext::SetBitmapRenderTarget(ComPtr<ID2D1BitmapRenderTarget> ctx)
{ {
bitmap_rt_ = rt; bitmap_rt_ = ctx;
} }
} }

View File

@ -188,7 +188,7 @@ namespace kiwano
HRESULT Renderer::HandleDeviceLost() HRESULT Renderer::HandleDeviceLost()
{ {
KGE_ASSERT(d3d_res_ && d2d_res_ && render_target_); KGE_ASSERT(d3d_res_ && d2d_res_ && render_ctx_);
HRESULT hr = d3d_res_->HandleDeviceLost(); HRESULT hr = d3d_res_->HandleDeviceLost();
@ -828,7 +828,7 @@ namespace kiwano
win32::ThrowIfFailed(hr); win32::ThrowIfFailed(hr);
} }
void Renderer::CreateTextureRenderTarget(TextureRenderTargetPtr& render_target) void Renderer::CreateTextureRenderTarget(TextureRenderContextPtr& render_context)
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
if (!d2d_res_) if (!d2d_res_)
@ -836,7 +836,7 @@ namespace kiwano
hr = E_UNEXPECTED; hr = E_UNEXPECTED;
} }
TextureRenderTargetPtr output; TextureRenderContextPtr output;
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
ComPtr<ID2D1BitmapRenderTarget> bitmap_rt; ComPtr<ID2D1BitmapRenderTarget> bitmap_rt;
@ -844,7 +844,7 @@ namespace kiwano
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
output = new TextureRenderTarget; output = new TextureRenderContext;
hr = output->CreateDeviceResources(d2d_res_->GetFactory(), bitmap_rt); hr = output->CreateDeviceResources(d2d_res_->GetFactory(), bitmap_rt);
} }
@ -856,7 +856,7 @@ namespace kiwano
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
render_target = output; render_context = output;
} }
win32::ThrowIfFailed(hr); win32::ThrowIfFailed(hr);

View File

@ -21,7 +21,7 @@
#pragma once #pragma once
#include <kiwano/core/Component.h> #include <kiwano/core/Component.h>
#include <kiwano/renderer/win32/FontCollectionLoader.h> #include <kiwano/renderer/win32/FontCollectionLoader.h>
#include <kiwano/renderer/RenderTarget.h> #include <kiwano/renderer/RenderContext.h>
#include <kiwano/renderer/GifImage.h> #include <kiwano/renderer/GifImage.h>
#include <kiwano/renderer/Font.h> #include <kiwano/renderer/Font.h>
#include <kiwano/renderer/TextStyle.hpp> #include <kiwano/renderer/TextStyle.hpp>
@ -75,7 +75,7 @@ namespace kiwano
: public Singleton<Renderer> : public Singleton<Renderer>
, public RenderComponent , public RenderComponent
, public EventComponent , public EventComponent
, public RenderTarget , public RenderContext
{ {
friend Singleton<Renderer>; friend Singleton<Renderer>;
@ -225,10 +225,10 @@ namespace kiwano
); );
/// \~chinese /// \~chinese
/// @brief 创建纹理渲染目标 /// @brief 创建纹理渲染上下文
/// @param[out] render_target 渲染目标 /// @param[out] render_context 渲染上下文
void CreateTextureRenderTarget( void CreateTextureRenderTarget(
TextureRenderTargetPtr& render_target TextureRenderContextPtr& render_context
); );
/// \~chinese /// \~chinese

View File

@ -23,7 +23,7 @@
namespace kiwano namespace kiwano
{ {
class RenderTarget; class RenderContext;
class Renderer; class Renderer;
/** /**
@ -68,7 +68,7 @@ namespace kiwano
/// @brief ÏßÌõÑùʽ /// @brief ÏßÌõÑùʽ
class StrokeStyle class StrokeStyle
{ {
friend class RenderTarget; friend class RenderContext;
friend class Renderer; friend class Renderer;
public: public:

View File

@ -24,7 +24,7 @@
namespace kiwano namespace kiwano
{ {
class RenderTarget; class RenderContext;
class Renderer; class Renderer;
/** /**
@ -36,7 +36,7 @@ namespace kiwano
/// @brief 文本布局 /// @brief 文本布局
class KGE_API TextLayout class KGE_API TextLayout
{ {
friend class RenderTarget; friend class RenderContext;
friend class Renderer; friend class Renderer;
public: public:

View File

@ -24,8 +24,8 @@
namespace kiwano namespace kiwano
{ {
class RenderTarget; class RenderContext;
class TextureRenderTarget; class TextureRenderContext;
class Renderer; class Renderer;
KGE_DECLARE_SMART_PTR(Texture); KGE_DECLARE_SMART_PTR(Texture);
@ -53,8 +53,8 @@ namespace kiwano
class KGE_API Texture class KGE_API Texture
: public virtual ObjectBase : public virtual ObjectBase
{ {
friend class RenderTarget; friend class RenderContext;
friend class TextureRenderTarget; friend class TextureRenderContext;
friend class Renderer; friend class Renderer;
public: public: