6 , m_shaderFocusId(m_app->getShaders().get(
"pp_focusid"))
7 , m_shaderVBlur(m_app->getShaders().get(
"pp_vblur"))
8 , m_shaderHBlur(m_app->getShaders().get(
"pp_hblur"))
9 , m_shaderFSQuad(m_app->getShaders().get(
"fsquad"))
18 glBindTexture(GL_TEXTURE_2D, texFull);
20 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
21 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
23 glBindTexture(GL_TEXTURE_2D, 0);
27 glBindTexture(GL_TEXTURE_2D, texHalf);
29 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
30 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
32 glBindTexture(GL_TEXTURE_2D, 0);
37 for (
size_t i = 0; i <
m_fboFull.size(); i++)
41 glBindFramebuffer(GL_FRAMEBUFFER, fbo);
43 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_texFull[i], 0);
45 GLuint buffers[] = { GL_COLOR_ATTACHMENT0 };
46 glDrawBuffers(1, buffers);
48 GLenum e = glCheckFramebufferStatus(GL_FRAMEBUFFER);
49 if (e != GL_FRAMEBUFFER_COMPLETE)
50 cerr <<
"ERROR: fbo not complete" << endl;
52 glBindFramebuffer(GL_FRAMEBUFFER, 0);
55 for (
size_t i = 0; i <
m_fboHalf.size(); i++)
59 glBindFramebuffer(GL_FRAMEBUFFER, fbo);
61 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_texHalf[i], 0);
63 GLuint buffers[] = { GL_COLOR_ATTACHMENT0 };
64 glDrawBuffers(1, buffers);
66 GLenum e = glCheckFramebufferStatus(GL_FRAMEBUFFER);
67 if (e != GL_FRAMEBUFFER_COMPLETE)
68 cerr <<
"ERROR: fbo not complete" << endl;
70 glBindFramebuffer(GL_FRAMEBUFFER, 0);
89 glBufferData(GL_ARRAY_BUFFER,
sizeof(data), data, GL_STATIC_DRAW);
90 glBindBuffer(GL_ARRAY_BUFFER, 0);
92 glGenVertexArrays(1, &
m_vao);
93 glBindVertexArray(
m_vao);
97 glEnableVertexAttribArray(positionIndex);
98 glVertexAttribPointer(positionIndex, 4, GL_FLOAT, GL_FALSE, 0, 0);
100 glBindVertexArray(0);
101 glBindBuffer(GL_ARRAY_BUFFER, 0);
120 glDeleteVertexArrays(1, &
m_vao);
125 m_size = uvec2((uint)size.x, (uint)size.y);
129 glBindTexture(GL_TEXTURE_2D, texFull);
131 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, (GLsizei)size.x, (GLsizei)size.y, 0, GL_RGBA, GL_HALF_FLOAT,
nullptr);
133 glBindTexture(GL_TEXTURE_2D, 0);
137 glBindTexture(GL_TEXTURE_2D, texHalf);
139 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, (GLsizei)(size.x/2), (GLsizei)(size.y/2), 0, GL_RGBA, GL_HALF_FLOAT,
nullptr);
141 glBindTexture(GL_TEXTURE_2D, 0);
145 glBindFramebuffer(GL_FRAMEBUFFER, fboFull);
147 glFramebufferParameteri(GL_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_WIDTH, (GLint)size.x);
148 glFramebufferParameteri(GL_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_HEIGHT, (GLint)size.y);
150 GLenum e = glCheckFramebufferStatus(GL_FRAMEBUFFER);
151 if (e != GL_FRAMEBUFFER_COMPLETE)
152 cerr <<
"ERROR: fbo not complete" << endl;
154 glBindFramebuffer(GL_FRAMEBUFFER, 0);
158 glBindFramebuffer(GL_FRAMEBUFFER, fboHalf);
160 glFramebufferParameteri(GL_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_WIDTH, (GLint)(size.x/2));
161 glFramebufferParameteri(GL_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_HEIGHT, (GLint)(size.y/2));
163 GLenum e = glCheckFramebufferStatus(GL_FRAMEBUFFER);
164 if (e != GL_FRAMEBUFFER_COMPLETE)
165 cerr <<
"ERROR: fbo not complete" << endl;
167 glBindFramebuffer(GL_FRAMEBUFFER, 0);
175 if (!picker.hasFocusId())
177 glBindFramebuffer(GL_FRAMEBUFFER,
m_fboHalf[0]);
179 glClearColor(0, 0, 0, 0);
180 glClear(GL_COLOR_BUFFER_BIT);
182 glBindFramebuffer(GL_FRAMEBUFFER, 0);
186 glDisable(GL_DEPTH_TEST);
187 glBindVertexArray(
m_vao);
191 glBindFramebuffer(GL_FRAMEBUFFER,
m_fboFull[0]);
196 glDrawArrays(GL_TRIANGLES, 0, 6);
199 glViewport(0, 0, (GLsizei)(
m_size.x/2), (GLsizei)(
m_size.y/2));
203 glBindFramebuffer(GL_FRAMEBUFFER,
m_fboHalf[0]);
206 glBindTexture(GL_TEXTURE_2D,
m_texFull[0]);
207 glDrawArrays(GL_TRIANGLES, 0, 6);
212 glBindFramebuffer(GL_FRAMEBUFFER,
m_fboHalf[1]);
215 glBindTexture(GL_TEXTURE_2D,
m_texHalf[0]);
216 glDrawArrays(GL_TRIANGLES, 0, 6);
221 glBindFramebuffer(GL_FRAMEBUFFER,
m_fboHalf[0]);
224 glBindTexture(GL_TEXTURE_2D,
m_texHalf[1]);
225 glDrawArrays(GL_TRIANGLES, 0, 6);
228 glViewport(0, 0, (GLsizei)(
m_size.x), (GLsizei)(
m_size.y));
229 glBindFramebuffer(GL_FRAMEBUFFER, 0);
231 glBindVertexArray(0);
232 glEnable(GL_DEPTH_TEST);
237 glActiveTexture(GL_TEXTURE0 + target);
238 glBindTexture(GL_TEXTURE_2D,
m_texHalf[0]);
array< GLuint, 1 > m_texFull
void draw(double time, double timeDelta)
array< GLuint, 2 > m_fboHalf
HighlightTargetEffect(Application *app)
static const uint position
void bindIdTexture(GLuint target=0)
void resize(vec2 const &size)
vec2 const & getSize() const
array< GLuint, 2 > m_texHalf
void bindResultTexutre(GLuint target=0)
array< GLuint, 1 > m_fboFull
GLint uniform(string const &name)