Home | History | Annotate | Download | only in libGLESv2
      1 // Copyright 2016 The SwiftShader Authors. All Rights Reserved.
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //    http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 // Framebuffer.h: Defines the Framebuffer class. Implements GL framebuffer
     16 // objects and related functionality. [OpenGL ES 2.0.24] section 4.4 page 105.
     17 
     18 #ifndef LIBGLESV2_FRAMEBUFFER_H_
     19 #define LIBGLESV2_FRAMEBUFFER_H_
     20 
     21 #include "Context.h"
     22 #include "common/Object.hpp"
     23 #include "common/Image.hpp"
     24 
     25 #include <GLES2/gl2.h>
     26 
     27 namespace es2
     28 {
     29 class Renderbuffer;
     30 class Colorbuffer;
     31 class Depthbuffer;
     32 class Stencilbuffer;
     33 class DepthStencilbuffer;
     34 
     35 class Framebuffer
     36 {
     37 public:
     38 	Framebuffer();
     39 
     40 	virtual ~Framebuffer();
     41 
     42 	void setColorbuffer(GLenum type, GLuint colorbuffer, GLuint index, GLint level = 0, GLint layer = 0);
     43 	void setDepthbuffer(GLenum type, GLuint depthbuffer, GLint level = 0, GLint layer = 0);
     44 	void setStencilbuffer(GLenum type, GLuint stencilbuffer, GLint level = 0, GLint layer = 0);
     45 
     46 	void setReadBuffer(GLenum buf);
     47 	void setDrawBuffer(GLuint index, GLenum buf);
     48 	GLenum getReadBuffer() const;
     49 	GLenum getDrawBuffer(GLuint index) const;
     50 
     51 	void detachTexture(GLuint texture);
     52 	void detachRenderbuffer(GLuint renderbuffer);
     53 
     54 	egl::Image *getRenderTarget(GLuint index);
     55 	egl::Image *getReadRenderTarget();
     56 	egl::Image *getDepthBuffer();
     57 	egl::Image *getStencilBuffer();
     58 
     59 	Renderbuffer *getColorbuffer(GLuint index) const;
     60 	Renderbuffer *getReadColorbuffer() const;
     61 	Renderbuffer *getDepthbuffer() const;
     62 	Renderbuffer *getStencilbuffer() const;
     63 
     64 	GLenum getReadBufferType();
     65 	GLenum getColorbufferType(GLuint index);
     66 	GLenum getDepthbufferType();
     67 	GLenum getStencilbufferType();
     68 
     69 	GLuint getColorbufferName(GLuint index);
     70 	GLuint getDepthbufferName();
     71 	GLuint getStencilbufferName();
     72 
     73 	GLint getColorbufferLayer(GLuint index);
     74 	GLint getDepthbufferLayer();
     75 	GLint getStencilbufferLayer();
     76 
     77 	bool hasStencil();
     78 
     79 	GLenum completeness();
     80 	GLenum completeness(int &width, int &height, int &samples);
     81 
     82 	GLenum getImplementationColorReadFormat() const;
     83 	GLenum getImplementationColorReadType() const;
     84 	GLenum getDepthReadFormat() const;
     85 	GLenum getDepthReadType() const;
     86 
     87 	virtual bool isDefaultFramebuffer() const { return false; }
     88 
     89 	static bool IsRenderbuffer(GLenum type);
     90 
     91 protected:
     92 	GLuint getReadBufferIndex() const;
     93 
     94 	GLenum readBuffer;
     95 	GLenum drawBuffer[MAX_COLOR_ATTACHMENTS];
     96 
     97 	GLenum mColorbufferType[MAX_COLOR_ATTACHMENTS];
     98 	gl::BindingPointer<Renderbuffer> mColorbufferPointer[MAX_COLOR_ATTACHMENTS];
     99 	GLint mColorbufferLayer[MAX_COLOR_ATTACHMENTS];
    100 
    101 	GLenum mDepthbufferType;
    102 	gl::BindingPointer<Renderbuffer> mDepthbufferPointer;
    103 	GLint mDepthbufferLayer;
    104 
    105 	GLenum mStencilbufferType;
    106 	gl::BindingPointer<Renderbuffer> mStencilbufferPointer;
    107 	GLint mStencilbufferLayer;
    108 
    109 private:
    110 	Renderbuffer *lookupRenderbuffer(GLenum type, GLuint handle, GLint level) const;
    111 };
    112 
    113 class DefaultFramebuffer : public Framebuffer
    114 {
    115 public:
    116 	DefaultFramebuffer();
    117 	DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil);
    118 
    119 	bool isDefaultFramebuffer() const override { return true; }
    120 };
    121 
    122 }
    123 
    124 #endif   // LIBGLESV2_FRAMEBUFFER_H_
    125