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 LIBGLES_CM_FRAMEBUFFER_H_ 19 #define LIBGLES_CM_FRAMEBUFFER_H_ 20 21 #include "common/Object.hpp" 22 #include "common/Image.hpp" 23 24 #include <GLES/gl.h> 25 26 namespace es1 27 { 28 class Renderbuffer; 29 class Colorbuffer; 30 class Depthbuffer; 31 class Stencilbuffer; 32 class DepthStencilbuffer; 33 34 class Framebuffer 35 { 36 public: 37 Framebuffer(); 38 39 virtual ~Framebuffer(); 40 41 void setColorbuffer(GLenum type, GLuint colorbuffer); 42 void setDepthbuffer(GLenum type, GLuint depthbuffer); 43 void setStencilbuffer(GLenum type, GLuint stencilbuffer); 44 45 void detachTexture(GLuint texture); 46 void detachRenderbuffer(GLuint renderbuffer); 47 48 egl::Image *getRenderTarget(); 49 egl::Image *getDepthBuffer(); 50 egl::Image *getStencilBuffer(); 51 52 Renderbuffer *getColorbuffer(); 53 Renderbuffer *getDepthbuffer(); 54 Renderbuffer *getStencilbuffer(); 55 56 GLenum getColorbufferType(); 57 GLenum getDepthbufferType(); 58 GLenum getStencilbufferType(); 59 60 GLuint getColorbufferName(); 61 GLuint getDepthbufferName(); 62 GLuint getStencilbufferName(); 63 64 bool hasStencil(); 65 66 virtual GLenum completeness(); 67 GLenum completeness(int &width, int &height, int &samples); 68 69 GLenum getImplementationColorReadFormat(); 70 GLenum getImplementationColorReadType(); 71 72 protected: 73 GLenum mColorbufferType; 74 gl::BindingPointer<Renderbuffer> mColorbufferPointer; 75 76 GLenum mDepthbufferType; 77 gl::BindingPointer<Renderbuffer> mDepthbufferPointer; 78 79 GLenum mStencilbufferType; 80 gl::BindingPointer<Renderbuffer> mStencilbufferPointer; 81 82 private: 83 Renderbuffer *lookupRenderbuffer(GLenum type, GLuint handle) const; 84 }; 85 86 class DefaultFramebuffer : public Framebuffer 87 { 88 public: 89 DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil); 90 }; 91 92 } 93 94 #endif // LIBGLES_CM_FRAMEBUFFER_H_ 95