jGL
Loading...
Searching...
No Matches
openGLInstance.h
Go to the documentation of this file.
1#ifndef OPENGLINSTANCE_H
2#define OPENGLINSTANCE_H
3
4#include <jGL/jGL.h>
11
12namespace jGL::GL
13{
14
15 class glParticles;
16
18 {
19
20 public:
21
22 OpenGLInstance(glm::ivec2 res, uint8_t msaa = 0)
23 : jGLInstance(res),
24 framebuffer(glDrawFramebuffer()),
25 textRenderer()
26 {
27 framebuffer.setResolution
28 (
29 res
30 );
31 framebuffer.setMSAA(msaa);
32 setTextProjection(glm::ortho(0.0,double(resolution.x),0.0,double(resolution.y)));
33 }
34
36 {
37 if (glIsBuffer(rbo)) { glDeleteRenderbuffers(1, &rbo); }
38 framebuffer.destroy();
39 }
40
41 void beginFrame(){framebuffer.bind();}
42 void endFrame(){framebuffer.blit();}
43
44 void finish(){closing = true;}
45
46 void text
47 (
48 std::string characters,
49 glm::vec2 position,
50 float scale,
51 glm::vec4 colour,
52 glm::bvec2 centre = glm::bvec2(false,false)
53 );
54
55 void clear()
56 {
57 textRenderer.clear();
58 glClearColor(clearColour.r, clearColour.g, clearColour.b, clearColour.a);
59 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
60 framebuffer.setClear(clearColour);
61 }
62
63 void setMSAA(uint8_t samples)
64 {
65 if (samples == 0) { msaaSamples = 0; return; }
66 GLint maxSamples;
67 glGetIntegerv(GL_MAX_SAMPLES, &maxSamples);
68
69 if (samples > maxSamples){samples = maxSamples;}
70
71 msaaSamples = samples;
72
73 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);
88 setTextProjection(glm::ortho(0.0,double(resolution.x),0.0,double(resolution.y)));
89 glViewport(0.0f, 0.0f, resolution.x, resolution.y);
90 }
91
92 void setClear(glm::vec4 colour) { clearColour = colour; }
93 void setProjection(glm::mat4 proj) {/*TODO*/}
94 void setTextProjection(glm::mat4 proj) { textRenderer.setProjection(proj); }
95 void setViewport(glm::vec4 view) { glViewport(view.x, view.y, view.z, view.w); }
96
97 std::shared_ptr<Particles> createParticles(size_t sizeHint)
98 {
99 return std::static_pointer_cast<Particles>(std::make_shared<glParticles>(sizeHint));
100 }
101
102 std::shared_ptr<Texture> createTexture(std::filesystem::path imageFile, Texture::Type type)
103 {
104 switch (type)
105 {
107 return std::static_pointer_cast<Texture>(std::make_shared<glTexture2DRGB>(imageFile));
109 return std::static_pointer_cast<Texture>(std::make_shared<glTexture2DRGBA>(imageFile));
110 default:
111 return std::static_pointer_cast<Texture>(std::make_shared<glTexture2DRGB>(imageFile));
112 }
113 }
114
115 std::shared_ptr<Texture> createTexture(std::vector<std::byte> data, Texture::Type type)
116 {
117 switch (type)
118 {
120 return std::static_pointer_cast<Texture>(std::make_shared<glTexture2DRGB>(data));
122 return std::static_pointer_cast<Texture>(std::make_shared<glTexture2DRGBA>(data));
123 default:
124 return std::static_pointer_cast<Texture>(std::make_shared<glTexture2DRGB>(data));
125 }
126 }
127
128 std::shared_ptr<SpriteRenderer> createSpriteRenderer(size_t sizeHint)
129 {
130 return std::static_pointer_cast<SpriteRenderer>
131 (
132 std::make_shared<glSpriteRenderer>
133 (
134 sizeHint
135 )
136 );
137 }
138
139 std::shared_ptr<ShapeRenderer> createShapeRenderer(size_t sizeHint)
140 {
141 return std::static_pointer_cast<ShapeRenderer>
142 (
143 std::make_shared<glShapeRenderer>
144 (
145 sizeHint
146 )
147 );
148 }
149
150 private:
151
152 glDrawFramebuffer framebuffer;
153
154 glFont defaultFont = glFont(48);
155
156 TextRenderer textRenderer;
157
158 glm::vec4 clearColour = glm::vec4(1.0f, 1.0f, 1.0f, 1.0f);
159
160 GLuint rbo;
161 };
162}
163
164#endif /* OPENGLINSTANCE_H */
Definition openGLInstance.h:18
void clear()
Definition openGLInstance.h:55
~OpenGLInstance()
Definition openGLInstance.h:35
std::shared_ptr< SpriteRenderer > createSpriteRenderer(size_t sizeHint)
Definition openGLInstance.h:128
std::shared_ptr< ShapeRenderer > createShapeRenderer(size_t sizeHint)
Definition openGLInstance.h:139
std::shared_ptr< Texture > createTexture(std::filesystem::path imageFile, Texture::Type type)
Definition openGLInstance.h:102
void setClear(glm::vec4 colour)
Definition openGLInstance.h:92
void setTextProjection(glm::mat4 proj)
Definition openGLInstance.h:94
void finish()
Definition openGLInstance.h:44
void setMSAA(uint8_t samples)
Definition openGLInstance.h:63
std::shared_ptr< Particles > createParticles(size_t sizeHint)
Definition openGLInstance.h:97
void endFrame()
Definition openGLInstance.h:42
void setProjection(glm::mat4 proj)
Definition openGLInstance.h:93
void beginFrame()
Definition openGLInstance.h:41
void text(std::string characters, glm::vec2 position, float scale, glm::vec4 colour, glm::bvec2 centre=glm::bvec2(false, false))
Definition openGLInstance.cpp:7
OpenGLInstance(glm::ivec2 res, uint8_t msaa=0)
Definition openGLInstance.h:22
void setViewport(glm::vec4 view)
Definition openGLInstance.h:95
void setResolution(glm::ivec2 wh)
Definition openGLInstance.h:83
std::shared_ptr< Texture > createTexture(std::vector< std::byte > data, Texture::Type type)
Definition openGLInstance.h:115
Definition glTextRenderer.h:15
void setProjection(glm::mat4 p)
Definition glTextRenderer.h:38
void clear()
Definition glTextRenderer.h:48
Definition glDrawFramebuffer.h:13
void bind()
Definition glDrawFramebuffer.h:43
void setMSAA(uint8_t samples)
Definition glDrawFramebuffer.h:80
void destroy()
Definition glDrawFramebuffer.h:30
void setResolution(glm::vec2 res)
Definition glDrawFramebuffer.h:74
void blit()
Definition glDrawFramebuffer.h:53
void setClear(glm::vec4 c)
Definition glDrawFramebuffer.h:66
Definition glFont.h:13
Type
Definition texture.h:21
Definition jGL.h:21
bool closing
Definition jGL.h:66
glm::ivec2 resolution
Definition jGL.h:64
uint8_t msaaSamples
Definition jGL.h:65
Definition gl.h:41