Home | History | Annotate | Download | only in libGLESv2
      1 //
      2 // Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 // Framebuffer.h: Defines the gl::Framebuffer class. Implements GL framebuffer
      8 // objects and related functionality. [OpenGL ES 2.0.24] section 4.4 page 105.
      9 
     10 #ifndef LIBGLESV2_FRAMEBUFFER_H_
     11 #define LIBGLESV2_FRAMEBUFFER_H_
     12 
     13 #include "common/angleutils.h"
     14 #include "common/RefCountObject.h"
     15 #include "constants.h"
     16 
     17 namespace rx
     18 {
     19 class Renderer;
     20 }
     21 
     22 namespace gl
     23 {
     24 class Renderbuffer;
     25 class Colorbuffer;
     26 class Depthbuffer;
     27 class Stencilbuffer;
     28 class DepthStencilbuffer;
     29 
     30 class Framebuffer
     31 {
     32   public:
     33     explicit Framebuffer(rx::Renderer *renderer);
     34 
     35     virtual ~Framebuffer();
     36 
     37     void setColorbuffer(unsigned int colorAttachment, GLenum type, GLuint colorbuffer);
     38     void setDepthbuffer(GLenum type, GLuint depthbuffer);
     39     void setStencilbuffer(GLenum type, GLuint stencilbuffer);
     40 
     41     void detachTexture(GLuint texture);
     42     void detachRenderbuffer(GLuint renderbuffer);
     43 
     44     unsigned int getRenderTargetSerial(unsigned int colorAttachment) const;
     45     unsigned int getDepthbufferSerial() const;
     46     unsigned int getStencilbufferSerial() const;
     47 
     48     Renderbuffer *getColorbuffer(unsigned int colorAttachment) const;
     49     Renderbuffer *getDepthbuffer() const;
     50     Renderbuffer *getStencilbuffer() const;
     51     Renderbuffer *getDepthOrStencilbuffer() const;
     52     Renderbuffer *getReadColorbuffer() const;
     53     GLenum getReadColorbufferType() const;
     54     Renderbuffer *getFirstColorbuffer() const;
     55 
     56     GLenum getColorbufferType(unsigned int colorAttachment) const;
     57     GLenum getDepthbufferType() const;
     58     GLenum getStencilbufferType() const;
     59 
     60     GLuint getColorbufferHandle(unsigned int colorAttachment) const;
     61     GLuint getDepthbufferHandle() const;
     62     GLuint getStencilbufferHandle() const;
     63 
     64     GLenum getDrawBufferState(unsigned int colorAttachment) const;
     65     void setDrawBufferState(unsigned int colorAttachment, GLenum drawBuffer);
     66 
     67     bool isEnabledColorAttachment(unsigned int colorAttachment) const;
     68     bool hasEnabledColorAttachment() const;
     69     bool hasStencil() const;
     70     int getSamples() const;
     71     bool usingExtendedDrawBuffers() const;
     72 
     73     virtual GLenum completeness() const;
     74 
     75   protected:
     76     GLenum mColorbufferTypes[IMPLEMENTATION_MAX_DRAW_BUFFERS];
     77     BindingPointer<Renderbuffer> mColorbufferPointers[IMPLEMENTATION_MAX_DRAW_BUFFERS];
     78     GLenum mDrawBufferStates[IMPLEMENTATION_MAX_DRAW_BUFFERS];
     79     GLenum mReadBufferState;
     80 
     81     GLenum mDepthbufferType;
     82     BindingPointer<Renderbuffer> mDepthbufferPointer;
     83 
     84     GLenum mStencilbufferType;
     85     BindingPointer<Renderbuffer> mStencilbufferPointer;
     86 
     87     rx::Renderer *mRenderer;
     88 
     89   private:
     90     DISALLOW_COPY_AND_ASSIGN(Framebuffer);
     91 
     92     Renderbuffer *lookupRenderbuffer(GLenum type, GLuint handle) const;
     93 };
     94 
     95 class DefaultFramebuffer : public Framebuffer
     96 {
     97   public:
     98     DefaultFramebuffer(rx::Renderer *Renderer, Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil);
     99 
    100     virtual GLenum completeness() const;
    101 
    102   private:
    103     DISALLOW_COPY_AND_ASSIGN(DefaultFramebuffer);
    104 };
    105 
    106 }
    107 
    108 #endif   // LIBGLESV2_FRAMEBUFFER_H_
    109