jGL
Loading...
Searching...
No Matches
glDrawFramebuffer.h
Go to the documentation of this file.
1#ifndef GLDRAWFRAMEBUFFER
2#define GLDRAWFRAMEBUFFER
3
4#include <cstdint>
5
6#include <glm/glm.hpp>
7
8#include <jGL/OpenGL/gl.h>
9
10namespace jGL::GL
11{
13 {
14
15 public:
16
18 {
19 if(!glIsFramebuffer(buffer))
20 {
21 glGenFramebuffers(1, &buffer);
22 }
23
24 if(!glIsTexture(texture))
25 {
26 glGenTextures(1, &texture);
27 }
28 }
29
30 void destroy()
31 {
32 if (glIsFramebuffer(buffer))
33 {
34 glDeleteFramebuffers(1, &buffer);
35 }
36
37 if (glIsTexture(texture))
38 {
39 glDeleteTextures(1, &texture);
40 }
41 }
42
43 void bind()
44 {
45 if (msaaSamples == 0)
46 {
47 return;
48 }
49 glBindFramebuffer(GL_FRAMEBUFFER, buffer);
50 glBufferStatus("bind framebuffer");
51 }
52
53 void blit()
54 {
55 if (msaaSamples == 0)
56 {
57 return;
58 }
59 glBindFramebuffer(GL_READ_FRAMEBUFFER, buffer);
60 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
61 glBlitFramebuffer(0, 0, resX, resY, 0, 0, resX, resY, GL_COLOR_BUFFER_BIT, GL_NEAREST);
62 glBindFramebuffer(GL_FRAMEBUFFER, 0);
63 glError("blit framebuffer");
64 }
65
66 void setClear(glm::vec4 c)
67 {
68 clearColour = c;
69 glClearColor(clearColour.r, clearColour.g, clearColour.b, clearColour.a);
70 }
71
72 void clear() { glClear(GL_COLOR_BUFFER_BIT); }
73
74 void setResolution(glm::vec2 res)
75 {
76 resX = res.x;
77 resY = res.y;
78 }
79
80 void setMSAA(uint8_t samples)
81 {
82 msaaSamples = samples;
83
84 if (msaaSamples == 0)
85 {
86 return;
87 }
88
89 glBindFramebuffer(GL_FRAMEBUFFER, buffer);
90 glActiveTexture(GL_TEXTURE0);
91
92 glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, texture);
93 // I fucking love cross platform development...
94 #ifdef ANDROID
95 glTexStorage2DMultisample
96 (
97 GL_TEXTURE_2D_MULTISAMPLE,
98 msaaSamples,
99 GL_RGB8,
100 resX,
101 resY,
102 GL_TRUE
103 );
104 #else
105 glTexImage2DMultisample
106 (
107 GL_TEXTURE_2D_MULTISAMPLE,
108 msaaSamples,
109 GL_RGB,
110 resX,
111 resY,
112 GL_TRUE
113 );
114 #endif
115 glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, 0);
116
117 glFramebufferTexture2D
118 (
119 GL_FRAMEBUFFER,
120 GL_COLOR_ATTACHMENT0,
121 GL_TEXTURE_2D_MULTISAMPLE,
122 texture,
123 0
124 );
125
126 setClear(clearColour);
127 }
128
129 static const bool isMSAA() {return msaaSamples > 0;}
130
131 private:
132
133 static bool initialised;
134
135 static uint8_t msaaSamples;
136
137 static GLuint buffer, texture;
138
139 static uint16_t resX, resY;
140
141 static glm::vec4 clearColour;
142
143 };
144}
145
146#endif /* GLDrawFRAMEBUFFER */
Definition glDrawFramebuffer.h:13
void bind()
Definition glDrawFramebuffer.h:43
glDrawFramebuffer()
Definition glDrawFramebuffer.h:17
static const bool isMSAA()
Definition glDrawFramebuffer.h:129
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 clear()
Definition glDrawFramebuffer.h:72
void blit()
Definition glDrawFramebuffer.h:53
void setClear(glm::vec4 c)
Definition glDrawFramebuffer.h:66
Definition gl.h:41
GLuint glError(const std::string msg="")
Definition gl.cpp:35
GLuint glBufferStatus(const std::string msg="")
Definition gl.cpp:7