예제 #1
0
// @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);
}
예제 #2
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);
}
예제 #3
0
파일: mesh.cpp 프로젝트: valche5/ValEngine
void ModelMesh::draw() const {
	bindVAO();
	glDrawElements(GL_TRIANGLES, indiceCount, GL_UNSIGNED_INT, 0);
	unbindVAO();
}