|  | // Copyright 2016 The SwiftShader Authors. All Rights Reserved. | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //    http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | // Framebuffer.h: Defines the Framebuffer class. Implements GL framebuffer | 
|  | // objects and related functionality. [OpenGL ES 2.0.24] section 4.4 page 105. | 
|  |  | 
|  | #ifndef LIBGLES_CM_FRAMEBUFFER_H_ | 
|  | #define LIBGLES_CM_FRAMEBUFFER_H_ | 
|  |  | 
|  | #include "common/Object.hpp" | 
|  | #include "common/Image.hpp" | 
|  |  | 
|  | #include <GLES/gl.h> | 
|  |  | 
|  | namespace es1 | 
|  | { | 
|  | class Renderbuffer; | 
|  | class Colorbuffer; | 
|  | class Depthbuffer; | 
|  | class Stencilbuffer; | 
|  | class DepthStencilbuffer; | 
|  |  | 
|  | class Framebuffer | 
|  | { | 
|  | public: | 
|  | Framebuffer(); | 
|  |  | 
|  | virtual ~Framebuffer(); | 
|  |  | 
|  | void setColorbuffer(GLenum type, GLuint colorbuffer, GLint level = 0); | 
|  | void setDepthbuffer(GLenum type, GLuint depthbuffer, GLint level = 0); | 
|  | void setStencilbuffer(GLenum type, GLuint stencilbuffer, GLint level = 0); | 
|  |  | 
|  | void detachTexture(GLuint texture); | 
|  | void detachRenderbuffer(GLuint renderbuffer); | 
|  |  | 
|  | egl::Image *getRenderTarget(); | 
|  | egl::Image *getDepthBuffer(); | 
|  | egl::Image *getStencilBuffer(); | 
|  |  | 
|  | Renderbuffer *getColorbuffer(); | 
|  | Renderbuffer *getDepthbuffer(); | 
|  | Renderbuffer *getStencilbuffer(); | 
|  |  | 
|  | GLenum getColorbufferType(); | 
|  | GLenum getDepthbufferType(); | 
|  | GLenum getStencilbufferType(); | 
|  |  | 
|  | GLuint getColorbufferName(); | 
|  | GLuint getDepthbufferName(); | 
|  | GLuint getStencilbufferName(); | 
|  |  | 
|  | bool hasStencil(); | 
|  |  | 
|  | virtual GLenum completeness(); | 
|  | GLenum completeness(int &width, int &height, int &samples); | 
|  |  | 
|  | GLenum getImplementationColorReadFormat(); | 
|  | GLenum getImplementationColorReadType(); | 
|  |  | 
|  | protected: | 
|  | GLenum mColorbufferType; | 
|  | gl::BindingPointer<Renderbuffer> mColorbufferPointer; | 
|  |  | 
|  | GLenum mDepthbufferType; | 
|  | gl::BindingPointer<Renderbuffer> mDepthbufferPointer; | 
|  |  | 
|  | GLenum mStencilbufferType; | 
|  | gl::BindingPointer<Renderbuffer> mStencilbufferPointer; | 
|  |  | 
|  | private: | 
|  | Renderbuffer *lookupRenderbuffer(GLenum type, GLuint handle, GLint level) const; | 
|  | }; | 
|  |  | 
|  | class DefaultFramebuffer : public Framebuffer | 
|  | { | 
|  | public: | 
|  | DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil); | 
|  | }; | 
|  |  | 
|  | } | 
|  |  | 
|  | #endif   // LIBGLES_CM_FRAMEBUFFER_H_ |