Skip to content

Commit 2e8998b

Browse files
committed
RTT tested & working, cleaning
1 parent 834f275 commit 2e8998b

File tree

4 files changed

+125
-128
lines changed

4 files changed

+125
-128
lines changed

Qor/BasicState.cpp

Lines changed: 34 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -16,58 +16,17 @@ BasicState :: BasicState(Qor* engine):
1616
m_pQor(engine),
1717
m_pInput(engine->input()),
1818
m_pRoot(make_shared<Node>()),
19+
m_pRTTRoot(make_shared<Node>()),
1920
m_pPipeline(engine->pipeline()),
20-
m_pResources(engine->resources()),
21-
//m_pCanvas(make_shared<Canvas>(
22-
// engine->window()->size().x, engine->window()->size().y
23-
//)),
24-
m_pMenuGUI(make_shared<MenuGUI>(
25-
engine->session()->profile(0)->controller().get(),
26-
&m_MenuContext,
27-
&m_MainMenu,
28-
m_pPipeline->partitioner(),
29-
engine->window(),
30-
//m_pCanvas.get(),
31-
m_pResources,
32-
"PressStart2P-Regular.ttf",
33-
engine->window()->size().y / 24.0f,
34-
nullptr,
35-
5
36-
))
37-
//m_pMenuGUI(make_shared<MenuGUI>(
38-
// engine->session()->active_profile(0)->controller().get(),
39-
// &m_MenuContext,
40-
// &m_MainMenu,
41-
// m_pPipeline->partitioner(),
42-
// m_pCanvas.get(),
43-
// m_pResources,
44-
// "PRESS START 2P",
45-
// engine->window()->size().y / 30.0f,
46-
// nullptr,
47-
// 7,
48-
// 1.5f,
49-
// Canvas::LEFT,
50-
// 32.0f,
51-
// MenuGUI::F_BOX,
52-
// engine->window()
53-
//))
21+
m_pResources(engine->resources())
5422
{}
5523

5624
void BasicState :: preload()
5725
{
5826
m_pCamera = make_shared<Camera>(m_pQor->resources(), m_pQor->window());
5927
m_pRoot->add(m_pCamera->as_node());
60-
m_pRoot->add(m_pMenuGUI);
61-
//m_pRoot->add(m_pCanvas);
62-
63-
//m_pFont = m_pQor->resources()->cache_as<Font>("PressStart2P-Regular.ttf:30");
64-
//m_pText = make_shared<Text>(m_pFont);
65-
//m_pText->set("Hello World!\nAgain down here!\nHELLO?\nOK\nOK2\nReally long text here ok?");
66-
//auto text2 = make_shared<Text>(m_pFont);
67-
//text2->set("Testing");
68-
//m_pRoot->add(text2);
69-
//m_pText->position(glm::vec3(10.0f, 0.0f, 0.0f));
70-
//m_pRoot->add(m_pText);
28+
m_pRTTCamera = make_shared<Camera>(m_pQor->resources(), m_pQor->window());
29+
m_pRTTRoot->add(m_pRTTCamera->as_node());
7130
}
7231

7332
BasicState :: ~BasicState()
@@ -77,49 +36,51 @@ BasicState :: ~BasicState()
7736

7837
void BasicState :: enter()
7938
{
80-
m_pPipeline->bg_color(Color::green());
39+
float sw = m_pQor->window()->size().x;
40+
float sh = m_pQor->window()->size().y;
41+
42+
//m_pPipeline->bg_color(Color::green());
8143
m_pCamera->ortho();
44+
m_pRTTCamera->ortho();
8245
m_pPipeline->winding(true);
46+
m_pRenderBuffer = std::make_shared<RenderBuffer>(100,100);
47+
48+
auto mat = make_shared<MeshMaterial>("logo.png", m_pQor->resources());
49+
auto mesh = make_shared<Mesh>(
50+
make_shared<MeshGeometry>(Prefab::quad(vec2(0.0f, 0.0f), vec2(sw, sh))),
51+
vector<shared_ptr<IMeshModifier>>{
52+
make_shared<Wrap>(Prefab::quad_wrap(vec2(0.0f,1.0f), vec2(1.0f,0.0f)))
53+
}, mat
54+
);
55+
m_pRTTRoot->add(mesh);
8356

84-
m_MainMenu.options().emplace_back("OPTION 1", []{
85-
});
86-
m_MainMenu.options().emplace_back("OPTION 2", []{
87-
});
88-
m_MainMenu.options().emplace_back("OPTION 3", []{
89-
});
90-
m_MenuContext.clear(&m_MainMenu);
91-
m_pRoot->add(m_pMenuGUI);
92-
93-
//LOG("enter");
94-
//m_pRoot->add(Mesh::line(
95-
// vec3(100.0f, 100.0f, 0.0f), vec3(200.0f, 200.0f, 0.0f),
96-
// m_pResources->cache_as<Texture>("particle.png")
97-
//));
57+
mesh = make_shared<Mesh>(
58+
make_shared<MeshGeometry>(Prefab::quad(vec2(0.0f, 0.0f), vec2(sw, sh))),
59+
vector<shared_ptr<IMeshModifier>>{
60+
make_shared<Wrap>(Prefab::quad_wrap(vec2(0.0f,1.0f), vec2(1.0f,0.0f)))
61+
}, std::make_shared<MeshMaterial>(m_pRenderBuffer->texture())
62+
);
63+
m_pRoot->add(mesh);
9864
}
9965

10066
void BasicState :: logic(Freq::Time t)
10167
{
10268
if(m_pInput->key(SDLK_ESCAPE))
10369
m_pQor->quit();
10470

105-
//float speed = 1000.0f * t.s();
106-
107-
//if(m_pInput->key(SDLK_UP))
108-
// m_pCamera->move(glm::vec3(0.0f, -speed, 0.0f));
109-
//if(m_pInput->key(SDLK_DOWN))
110-
// m_pCamera->move(glm::vec3(0.0f, speed, 0.0f));
111-
112-
//if(m_pInput->key(SDLK_LEFT))
113-
// m_pCamera->move(glm::vec3(-speed, 0.0f, 0.0f));
114-
//if(m_pInput->key(SDLK_RIGHT))
115-
// m_pCamera->move(glm::vec3(speed, 0.0f, 0.0f));
116-
11771
m_pRoot->logic(t);
11872
}
11973

12074
void BasicState :: render() const
12175
{
122-
//m_pPipeline->override_shader(PassType::NORMAL, m_Shader);
76+
float sw = m_pQor->window()->size().x;
77+
float sh = m_pQor->window()->size().y;
78+
79+
m_pRenderBuffer->push();
80+
m_pPipeline->render(m_pRTTRoot.get(), m_pRTTCamera.get());
81+
RenderBuffer::pop();
82+
83+
glViewport(0,0,sw,sh);
12384
m_pPipeline->render(m_pRoot.get(), m_pCamera.get());
12485
}
12586

Qor/BasicState.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "Light.h"
1313
#include "Text.h"
1414
#include "Menu.h"
15+
#include "RenderBuffer.h"
1516

1617
class Qor;
1718

@@ -37,23 +38,18 @@ class BasicState:
3738
Cache<Resource, std::string>* m_pResources = nullptr;
3839

3940
std::shared_ptr<Node> m_pRoot;
41+
std::shared_ptr<Node> m_pRTTRoot;
4042
//std::shared_ptr<Node> m_pTemp;
4143
std::shared_ptr<Sprite> m_pSprite;
4244
std::shared_ptr<PlayerInterface2D> m_pPlayer;
4345
std::shared_ptr<TileMap> m_pMap;
4446
std::shared_ptr<Camera> m_pCamera;
47+
std::shared_ptr<Camera> m_pRTTCamera;
4548
std::shared_ptr<Light> m_pLight;
49+
std::shared_ptr<RenderBuffer> m_pRenderBuffer;
4650
//unsigned m_DetailShader = ~0u;
4751

4852
//unsigned m_Shader = ~0u;
49-
50-
//std::shared_ptr<Font> m_pFont;
51-
//std::shared_ptr<Text> m_pText;
52-
53-
//std::shared_ptr<Canvas> m_pCanvas;
54-
MenuContext m_MenuContext;
55-
Menu m_MainMenu;
56-
std::shared_ptr<MenuGUI> m_pMenuGUI;
5753
};
5854

5955
#endif

Qor/RenderBuffer.h

Lines changed: 83 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,70 +12,110 @@ class RenderBuffer
1212
m_Width(width),
1313
m_Height(height)
1414
{
15-
glGenFramebuffers(1, &m_FrameBufferID);
16-
glBindFramebuffer(GL_FRAMEBUFFER, m_FrameBufferID);
17-
glGenRenderbuffers(1, &m_DepthBufferID);
18-
glBindRenderbuffer(GL_RENDERBUFFER, m_DepthBufferID);
19-
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, m_Width, m_Height);
20-
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_DepthBufferID);
21-
glGenTextures(1, &m_Texture.id_ref());
22-
glBindTexture(GL_TEXTURE_2D, m_Texture.id_ref());
23-
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_Width, m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
24-
// glTexParameters, glGenerateMipmap
25-
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_Texture.id_ref(), 0);
26-
27-
status();
15+
GLuint id;
16+
17+
//SDL_Surface* tmp = SDL_CreateRGBSurface(0, width, height,
18+
// 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
19+
20+
//GL_TASK_START()
21+
// glGenTextures(1, &id);
22+
// glBindTexture(GL_TEXTURE_2D, id);
23+
// int mode = GL_RGBA;
24+
25+
// glTexImage2D(GL_TEXTURE_2D, 0, mode, width, height,
26+
// 0, mode, GL_UNSIGNED_BYTE, 0);
27+
28+
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
29+
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
30+
//GL_TASK_END()
31+
32+
//SDL_FreeSurface(tmp);
2833

29-
// throwing here will cause memory leak
30-
//if(m_Status!=GL_FRAMEBUFFER_COMPLETE)
31-
// K_ERROR(GENERAL, "Could not create framebuffer");
32-
//assert(m_Status == GL_FRAMEBUFFER_COMPLETE);
34+
m_pTexture = std::make_shared<Texture>();
35+
36+
GL_TASK_START()
37+
glGenFramebuffers(1, &m_FrameBufferID);
38+
glBindFramebuffer(GL_FRAMEBUFFER, m_FrameBufferID);
39+
glGenRenderbuffers(1, &m_DepthBufferID);
40+
glBindRenderbuffer(GL_RENDERBUFFER, m_DepthBufferID);
41+
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, m_Width, m_Height);
42+
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_DepthBufferID);
43+
44+
glGenTextures(1, &m_pTexture->id_ref());
45+
glBindTexture(GL_TEXTURE_2D, m_pTexture->id_ref());
46+
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_Width, m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
47+
48+
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
49+
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
50+
51+
// glTexParameters, glGenerateMipmap
52+
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_pTexture->id_ref(), 0);
53+
54+
GLenum bufs[1] = {GL_COLOR_ATTACHMENT0};
55+
glDrawBuffers(1, bufs);
56+
57+
unbind();
58+
GL_TASK_END()
59+
60+
if(not status()){
61+
destroy();
62+
K_ERROR(GENERAL, "framebuffer");
63+
}
3364
}
3465
virtual ~RenderBuffer() {
35-
if(m_FrameBufferID)
36-
glDeleteFramebuffers(1, &m_FrameBufferID);
37-
if(m_DepthBufferID)
38-
glDeleteRenderbuffers(1, &m_DepthBufferID);
66+
destroy();
67+
}
68+
void destroy() {
69+
GL_TASK_START()
70+
if(m_FrameBufferID)
71+
glDeleteFramebuffers(1, &m_FrameBufferID);
72+
if(m_DepthBufferID)
73+
glDeleteRenderbuffers(1, &m_DepthBufferID);
74+
GL_TASK_END()
3975
}
4076
void bind() {
41-
glBindFramebuffer(GL_FRAMEBUFFER, m_FrameBufferID);
77+
GL_TASK_START()
78+
glBindFramebuffer(GL_FRAMEBUFFER, m_FrameBufferID);
79+
GL_TASK_END()
4280
}
4381
static void unbind() {
44-
glBindFramebuffer(GL_FRAMEBUFFER, 0);
82+
GL_TASK_START()
83+
glBindFramebuffer(GL_FRAMEBUFFER, 0);
84+
GL_TASK_END()
4585
}
46-
void pushViewport(int x, int y, int w, int h){
86+
void push(int x=0, int y=0, int w=0, int h=0){
4787
bind();
48-
glPushAttrib(GL_VIEWPORT_BIT);
49-
glViewport(x,y,w,h);
50-
}
51-
void pushViewport(int x = 0, int y = 0) {
52-
pushViewport(x,y,m_Width,m_Height);
88+
GL_TASK_START()
89+
glPushAttrib(GL_VIEWPORT_BIT);
90+
glViewport(x, y, w==0?m_Width:w, h==0?m_Height:h);
91+
GL_TASK_END()
5392
}
54-
static void popViewport() {
55-
glPopAttrib();
93+
static void pop() {
94+
GL_TASK_START()
95+
glPopAttrib();
96+
GL_TASK_END()
5697
unbind();
5798
}
5899

59-
bool status() {
60-
m_Status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
61-
return m_Status == GL_FRAMEBUFFER_COMPLETE;
100+
bool status() const {
101+
unsigned status = 0;
102+
GL_TASK_START()
103+
status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
104+
GL_TASK_END()
105+
return status == GL_FRAMEBUFFER_COMPLETE;
62106
}
63-
bool good() {
64-
return m_FrameBufferID &&
65-
m_DepthBufferID &&
66-
m_Texture.good() &&
67-
m_Status==GL_FRAMEBUFFER_COMPLETE;
107+
bool good() const {
108+
return m_pTexture->good();
68109
}
69-
bool bad() { return !good(); }
70-
Texture* texture() { return &m_Texture; }
110+
bool bad() const { return !good(); }
111+
std::shared_ptr<Texture> texture() { return m_pTexture; }
71112

72113
private:
73114
unsigned int m_FrameBufferID = 0;
74115
unsigned int m_DepthBufferID = 0;
75-
Texture m_Texture;
76-
unsigned int m_Status = 0;
77116
unsigned int m_Width = 0;
78117
unsigned int m_Height = 0;
118+
std::shared_ptr<Texture> m_pTexture;
79119
};
80120

81121
#endif

Qor/Text.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,11 @@ void Text :: redraw()
128128

129129
m_pTexture = nullptr;
130130

131-
GLuint m_ID;
131+
GLuint id;
132132

133133
GL_TASK_START()
134-
glGenTextures(1, &m_ID);
135-
glBindTexture(GL_TEXTURE_2D, m_ID);
134+
glGenTextures(1, &id);
135+
glBindTexture(GL_TEXTURE_2D, id);
136136
int mode = GL_RGBA;
137137

138138
glTexImage2D(GL_TEXTURE_2D, 0, mode, tmp->w, tmp->h,
@@ -144,7 +144,7 @@ void Text :: redraw()
144144

145145
SDL_FreeSurface(tmp);
146146

147-
m_pTexture = make_shared<Texture>(m_ID);
147+
m_pTexture = make_shared<Texture>(id);
148148

149149
glm::vec2 vs,ve;
150150
if(m_Align == LEFT){

0 commit comments

Comments
 (0)