| // 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_ |