1d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Copyright 2016 The SwiftShader Authors. All Rights Reserved. 2d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// 3d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Licensed under the Apache License, Version 2.0 (the "License"); 4d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// you may not use this file except in compliance with the License. 5d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// You may obtain a copy of the License at 6d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// 7d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// http://www.apache.org/licenses/LICENSE-2.0 8d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// 9d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Unless required by applicable law or agreed to in writing, software 10d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// distributed under the License is distributed on an "AS IS" BASIS, 11d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// See the License for the specific language governing permissions and 13d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// limitations under the License. 14d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 15d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Framebuffer.h: Defines the Framebuffer class. Implements GL framebuffer 16d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// objects and related functionality. [OpenGL ES 2.0.24] section 4.4 page 105. 17d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 18d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#ifndef LIBGLES_CM_FRAMEBUFFER_H_ 19d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#define LIBGLES_CM_FRAMEBUFFER_H_ 20d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 21d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#include "common/Object.hpp" 22d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#include "common/Image.hpp" 23d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 24d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#include <GLES/gl.h> 25d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 26d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensnamespace es1 27d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens{ 28d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Renderbuffer; 29d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Colorbuffer; 30d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Depthbuffer; 31d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Stencilbuffer; 32d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass DepthStencilbuffer; 33d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 34d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Framebuffer 35d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens{ 36d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capenspublic: 37d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens Framebuffer(); 38d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 39d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens virtual ~Framebuffer(); 40d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 41d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens void setColorbuffer(GLenum type, GLuint colorbuffer); 42d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens void setDepthbuffer(GLenum type, GLuint depthbuffer); 43d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens void setStencilbuffer(GLenum type, GLuint stencilbuffer); 44d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 45d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens void detachTexture(GLuint texture); 46d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens void detachRenderbuffer(GLuint renderbuffer); 47d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 48d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens egl::Image *getRenderTarget(); 49d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens egl::Image *getDepthBuffer(); 50d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens egl::Image *getStencilBuffer(); 51d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 52d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens Renderbuffer *getColorbuffer(); 53d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens Renderbuffer *getDepthbuffer(); 54d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens Renderbuffer *getStencilbuffer(); 55d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 56d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLenum getColorbufferType(); 57d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLenum getDepthbufferType(); 58d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLenum getStencilbufferType(); 59d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 60d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLuint getColorbufferName(); 61d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLuint getDepthbufferName(); 62d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLuint getStencilbufferName(); 63d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 64d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens bool hasStencil(); 65d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 66d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens virtual GLenum completeness(); 67d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLenum completeness(int &width, int &height, int &samples); 68d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 69d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLenum getImplementationColorReadFormat(); 70d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLenum getImplementationColorReadType(); 71d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 72d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensprotected: 73d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLenum mColorbufferType; 74d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens gl::BindingPointer<Renderbuffer> mColorbufferPointer; 75d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 76d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLenum mDepthbufferType; 77d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens gl::BindingPointer<Renderbuffer> mDepthbufferPointer; 78d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 79d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLenum mStencilbufferType; 80d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens gl::BindingPointer<Renderbuffer> mStencilbufferPointer; 81d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 82d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensprivate: 83d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens Renderbuffer *lookupRenderbuffer(GLenum type, GLuint handle) const; 84d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens}; 85d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 86d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass DefaultFramebuffer : public Framebuffer 87d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens{ 88d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capenspublic: 89d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil); 90d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens}; 91d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 92d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens} 93d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 94d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#endif // LIBGLES_CM_FRAMEBUFFER_H_ 95