WOWCube Docs logo
WOWCube Docs
Mission Control
Section Shortcuts
APIExamplesSourceWOWConnectChangelog
Filters
SDK and language defaults persist in cookies.
SDK version
Navigation Tree
Collapsed by default, focused on the active path.
Made byMcKay Seamons
GitHub
  1. Home
  2. Docs
  3. Source
  4. OffscreenRenderTarget.cpp
Mission NodeSDK 6.2C++gfx

OffscreenRenderTarget.cpp

SDK Source File: OffscreenRenderTarget.cpp

Source / SDK 6.2 / C++ / gfx

OffscreenRenderTarget.cpp

OffscreenRenderTarget.cpp
CPP
1/* Copyright Statement:
2 *
3 * (C) 2021-2024 Cubios Inc. All rights reserved.
4 */
5
6#include "OffscreenRenderTarget.h"
7#include "SceneObject.h"
8
9namespace Cubios
10{
11namespace Gfx
12{
13int16_t OffscreenRenderTarget::rtc = 0;
14
15OffscreenRenderTarget::OffscreenRenderTarget(u32_t w, u32_t h, Cubios::GFX_PixelFormat_t f):inBegin(false),width(w),height(h),format(f)
16{
17 this->rtID = this->getNextID();
18 this->Color.Set(255,0,255);
19 this->nullScreen = new Cubios::Screen(0);
20}
21
22OffscreenRenderTarget::~OffscreenRenderTarget()
23{
24 if(this->nullScreen)
25 {
26 delete this->nullScreen;
27 Cubios::GFX_removeBakedImage(this->rtID);
28 }
29}
30
31Cubios::SceneObject* OffscreenRenderTarget::Add(Cubios::SceneObject* obj)
32{
33 if(!this->inBegin)
34 {
35 LOG_w("OffscreenRenderTarget:Scene objects can only be added within Begin/End block!\n");
36 obj->Parent = nullptr;
37 return obj;
38 }
39 if(!obj->Visible) return obj;
40
41 obj->Parent = this->nullScreen;
42 obj->InBegin = this->inBegin;
43
44 obj->ScreenAngle = 0;
45
46 this->objects.push_back(obj);
47
48 return obj;
49}
50
51SceneObject* OffscreenRenderTarget::AddCopy(SceneObject* obj)
52{
53 SceneObject* object = this->Add(obj);
54
55 if(object!=nullptr)
56 {
57 this->copies.push_back(object);
58 }
59
60 return object;
61}
62
63void OffscreenRenderTarget::Begin(bool overwrite)
64{
65 this->inBegin = true;
66 this->objects.clear();
67
68 Cubios::GFX_bakeImage(this->rtID, this->width, this->height, this->format, (u32_t)overwrite);
69}
70
71void OffscreenRenderTarget::End()
72{
73 this->inBegin = false;
74 this->present();
75
76 for(size_t i=0;i<this->copies.size();i++)
77 {
78 delete this->copies[i];
79 }
80 this->copies.clear();
81}
82
83void OffscreenRenderTarget::present()
84{
85 this->RenderLayer(renderLayerOrder_t::BeforeQueue);
86
87 for(auto obj: objects)
88 {
89 obj->Render();
90 obj->InBegin = this->inBegin;
91 }
92
93 this->RenderLayer(renderLayerOrder_t::AfterQueue);
94
95 Cubios::GFX_render();
96}
97
98void OffscreenRenderTarget::Render()
99{
100 Math::Vec2 pos = this->ScreenPosition();
101 Cubios::GFX_drawBakedImage(pos.X, pos.Y, Color.A(), Color.Value(), Transform.ScaleX, Transform.ScaleY, Transform.SafeRotation()+ScreenAngle, Transform.Mirroring, this->rtID);
102}
103}
104}
105
Wrapped for easier reading. Turn wrap off to inspect exact line lengths.
Context Rail

Related nodes

AnimatedSprite.cpp
Source / SDK 6.2 / C++ / gfx
AnimatedSprite.h
Source / SDK 6.2 / C++ / gfx
Background.cpp
Source / SDK 6.2 / C++ / gfx
Background.h
Source / SDK 6.2 / C++ / gfx
Previous Node
Colors.h
Source / SDK 6.2 / C++ / gfx
Next Node
OffscreenRenderTarget.h
Source / SDK 6.2 / C++ / gfx