@@ -16,22 +16,27 @@ namespace jGL::GL
1616
1717 class OpenGLInstance : public jGLInstance
1818 {
19-
19+
2020 public:
2121
2222 OpenGLInstance (glm::ivec2 res, uint8_t msaa = 0 )
23- : jGLInstance(res),
23+ : jGLInstance(res),
2424 framebuffer (glDrawFramebuffer()),
25- textRenderer(res )
25+ textRenderer()
2626 {
2727 framebuffer.setResolution
2828 (
2929 res
3030 );
3131 framebuffer.setMSAA (msaa);
32+ setTextProjection (glm::ortho (0.0 ,double (resolution.x ),0.0 ,double (resolution.y )));
3233 }
3334
34- ~OpenGLInstance (){framebuffer.destroy ();}
35+ ~OpenGLInstance ()
36+ {
37+ if (glIsBuffer (rbo)) { glDeleteRenderbuffers (1 , &rbo); }
38+ framebuffer.destroy ();
39+ }
3540
3641 void beginFrame (){framebuffer.bind ();}
3742 void endFrame (){framebuffer.blit ();}
@@ -40,7 +45,7 @@ namespace jGL::GL
4045
4146 void text
4247 (
43- std::string characters,
48+ std::string characters,
4449 glm::vec2 position,
4550 float scale,
4651 glm::vec4 colour,
@@ -57,26 +62,45 @@ namespace jGL::GL
5762
5863 void setMSAA (uint8_t samples)
5964 {
65+ if (samples == 0 ) { msaaSamples = 0 ; return ; }
6066 GLint maxSamples;
6167 glGetIntegerv (GL_MAX_SAMPLES , &maxSamples);
6268
6369 if (samples > maxSamples){samples = maxSamples;}
6470
71+ msaaSamples = samples;
72+
6573 framebuffer.setMSAA (samples);
74+
75+ if (glIsBuffer (rbo)) { glDeleteRenderbuffers (1 , &rbo); }
76+ glGenRenderbuffers (1 , &rbo);
77+ glBindRenderbuffer (GL_RENDERBUFFER , rbo);
78+ glRenderbufferStorageMultisample (GL_RENDERBUFFER , msaaSamples, GL_DEPTH24_STENCIL8 , resolution.x , resolution.y );
79+ glBindRenderbuffer (GL_RENDERBUFFER , 0 );
80+ glFramebufferRenderbuffer (GL_FRAMEBUFFER , GL_DEPTH_STENCIL_ATTACHMENT , GL_RENDERBUFFER , rbo);
81+ }
82+
83+ void setResolution (glm::ivec2 wh)
84+ {
85+ resolution = wh;
86+ framebuffer.setResolution (resolution);
87+ setMSAA (msaaSamples);
88+ setTextProjection (glm::ortho (0.0 ,double (resolution.x ),0.0 ,double (resolution.y )));
89+ glViewport (0 .0f , 0 .0f , resolution.x , resolution.y );
6690 }
6791
6892 void setClear (glm::vec4 colour) { clearColour = colour; }
6993 void setProjection (glm::mat4 proj) {/* TODO*/ }
7094 void setTextProjection (glm::mat4 proj) { textRenderer.setProjection (proj); }
7195 void setViewport (glm::vec4 view) { glViewport (view.x , view.y , view.z , view.w ); }
72-
73- std::shared_ptr<Particles> createParticles (size_t sizeHint)
96+
97+ std::shared_ptr<Particles> createParticles (size_t sizeHint)
7498 {
75- return std::static_pointer_cast<Particles>(std::make_shared<glParticles>(sizeHint));
99+ return std::static_pointer_cast<Particles>(std::make_shared<glParticles>(sizeHint));
76100 }
77101
78- std::shared_ptr<Texture> createTexture (std::filesystem::path imageFile, Texture::Type type)
79- {
102+ std::shared_ptr<Texture> createTexture (std::filesystem::path imageFile, Texture::Type type)
103+ {
80104 switch (type)
81105 {
82106 case Texture::Type::RGB :
@@ -85,11 +109,11 @@ namespace jGL::GL
85109 return std::static_pointer_cast<Texture>(std::make_shared<glTexture2DRGBA>(imageFile));
86110 default :
87111 return std::static_pointer_cast<Texture>(std::make_shared<glTexture2DRGB>(imageFile));
88- }
112+ }
89113 }
90114
91115 std::shared_ptr<Texture> createTexture (std::vector<std::byte> data, Texture::Type type)
92- {
116+ {
93117 switch (type)
94118 {
95119 case Texture::Type::RGB :
@@ -98,7 +122,7 @@ namespace jGL::GL
98122 return std::static_pointer_cast<Texture>(std::make_shared<glTexture2DRGBA>(data));
99123 default :
100124 return std::static_pointer_cast<Texture>(std::make_shared<glTexture2DRGB>(data));
101- }
125+ }
102126 }
103127
104128 std::shared_ptr<SpriteRenderer> createSpriteRenderer (size_t sizeHint)
@@ -132,6 +156,8 @@ namespace jGL::GL
132156 TextRenderer textRenderer;
133157
134158 glm::vec4 clearColour = glm::vec4(1 .0f , 1 .0f , 1 .0f , 1 .0f );
159+
160+ GLuint rbo;
135161 };
136162}
137163
0 commit comments