// @todo - this makes the screen flicker! void YUV420PGrabber::draw() { assert(win_w); assert(win_h); glBindFramebuffer(GL_FRAMEBUFFER, 0); glDrawBuffer(GL_BACK); glDisable(GL_DEPTH_TEST); //glReadBuffer(GL_COLOR_ATTACHMENT0); //glBlitFramebuffer(0, 0, win_w, win_h, 0, 0, win_w, win_h, GL_COLOR_BUFFER_BIT, GL_LINEAR); glViewport(0, 0, win_w, win_h); // printf("win: %d x %d\n", win_w, win_h); bindVAO(); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, scene_tex); glUseProgram(prog_pt); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); unbindVAO(); glUseProgram(0); }
void YUV420PGrabber::endGrab() { glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, scene_tex); glDisable(GL_DEPTH_TEST); GLenum drawbufs[] = { GL_COLOR_ATTACHMENT1 }; glDrawBuffers(1, drawbufs); glClear(GL_COLOR_BUFFER_BIT); // we don't need this but it's just nice to have a clean slate ^.^ bindVAO(); { // render Y planes glUseProgram(prog_y); for(std::vector<YUV420PSize>::iterator it = sizes.begin(); it != sizes.end(); ++it) { YUV420PSize& s = *it; glViewport(s.y_viewport_x, s.y_viewport_y, s.yw, s.yh); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } // render U planes glUseProgram(prog_u); for(std::vector<YUV420PSize>::iterator it = sizes.begin(); it != sizes.end(); ++it) { YUV420PSize& s = *it; glViewport(s.u_viewport_x, s.u_viewport_y, s.uvw, s.uvh); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } // render V planes glUseProgram(prog_v); for(std::vector<YUV420PSize>::iterator it = sizes.begin(); it != sizes.end(); ++it) { YUV420PSize& s = *it; glViewport(s.v_viewport_x, s.v_viewport_y, s.uvw, s.uvh); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } } unbindVAO(); glUseProgram(0); glBindTexture(GL_TEXTURE_2D, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0); glDrawBuffer(GL_BACK); glViewport(0,0, win_w, win_h); }
void ModelMesh::draw() const { bindVAO(); glDrawElements(GL_TRIANGLES, indiceCount, GL_UNSIGNED_INT, 0); unbindVAO(); }