Advertisement
bvdmitri

Untitled

Dec 16th, 2015
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.57 KB | None | 0 0
  1. void FrameBuffer::create() {
  2.     if (dynamicSize) {
  3.         width = WindowOpengl::getInstance()->getWidth();
  4.         height = WindowOpengl::getInstance()->getHeight();
  5.     }
  6.  
  7.     //Framebuffer generate
  8.     glGenFramebuffers(1, &frameBuffer);
  9.     glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
  10.  
  11.     //Texture generate
  12.     glGenTextures(1, &texture);
  13.     glBindTexture(GL_TEXTURE_2D, texture);
  14.     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
  15.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  16.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  17.  
  18.     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
  19.  
  20.     glGenRenderbuffers(1, &depthBuffer);
  21.     glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
  22.     glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
  23.     glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer);
  24.  
  25.     glGenTextures(1, &depthTexture);
  26.     glBindTexture(GL_TEXTURE_2D, depthTexture);
  27.  
  28.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  29.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  30.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
  31.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
  32.     glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
  33.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_NONE);
  34.  
  35.     glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8_EXT, width, height, 0, GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT, NULL);
  36.     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthTexture, 0);
  37.  
  38.     GLenum drawBuffers[2] = {GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT};
  39.     glDrawBuffers(2, drawBuffers);
  40.     checkStatus();
  41.     created = true;
  42. }
  43.  
  44.  
  45. void FrameBuffer::bind() {
  46.     if (!created) create();
  47.     if (!dynamicSize) {
  48.         glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
  49.         glViewport(0, 0, width, height);
  50.     } else {
  51.         glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
  52.         WindowOpengl *globalWindow = WindowOpengl::getInstance();
  53.         glViewport(0, 0, globalWindow->getWidth(), globalWindow->getHeight());
  54.     }
  55. }
  56.  
  57. void FrameBuffer::unbind(int width, int height) {
  58.     if (!main) {
  59.         FrameBuffer::getMainBuffer()->bind();
  60.     } else {
  61.         glBindFramebuffer(GL_FRAMEBUFFER, 0);
  62.         glViewport(0, 0, width, height);
  63.     }
  64. }
  65.  
  66. GLuint FrameBuffer::getTextureIndex() {
  67.     return texture;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement