blob: 3db0104643f01444143047b2e1854d2a15bfae7c [file] [log] [blame]
Nicolas Capensdbf6fc82014-10-23 13:33:20 -04001// SwiftShader Software Renderer
2//
3// Copyright(c) 2005-2013 TransGaming Inc.
4//
5// All rights reserved. No part of this software may be copied, distributed, transmitted,
6// transcribed, stored in a retrieval system, translated into any human or computer
7// language by any means, or disclosed to third parties without the explicit written
8// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
9// or implied, including but not limited to any patent rights, are granted to you.
10//
11
12// Framebuffer.h: Defines the Framebuffer class. Implements GL framebuffer
13// objects and related functionality. [OpenGL ES 2.0.24] section 4.4 page 105.
14
Nicolas Capens11157822014-10-23 23:00:29 -040015#ifndef LIBGLES_CM_FRAMEBUFFER_H_
16#define LIBGLES_CM_FRAMEBUFFER_H_
Nicolas Capensdbf6fc82014-10-23 13:33:20 -040017
Nicolas Capensfa0cc042014-12-10 10:17:07 -050018#include "common/Object.hpp"
Nicolas Capensdeda34b2015-04-28 15:21:53 -070019#include "common/Image.hpp"
Nicolas Capensdbf6fc82014-10-23 13:33:20 -040020
Nicolas Capens11157822014-10-23 23:00:29 -040021#include <GLES/gl.h>
Nicolas Capensdbf6fc82014-10-23 13:33:20 -040022
Nicolas Capens14ee7622014-10-28 23:48:41 -040023namespace es1
Nicolas Capensdbf6fc82014-10-23 13:33:20 -040024{
25class Renderbuffer;
26class Colorbuffer;
27class Depthbuffer;
28class Stencilbuffer;
29class DepthStencilbuffer;
30
31class Framebuffer
32{
33public:
34 Framebuffer();
35
36 virtual ~Framebuffer();
37
38 void setColorbuffer(GLenum type, GLuint colorbuffer);
39 void setDepthbuffer(GLenum type, GLuint depthbuffer);
40 void setStencilbuffer(GLenum type, GLuint stencilbuffer);
41
42 void detachTexture(GLuint texture);
43 void detachRenderbuffer(GLuint renderbuffer);
44
Nicolas Capensead7ac52014-10-27 23:56:02 -040045 egl::Image *getRenderTarget();
46 egl::Image *getDepthStencil();
Nicolas Capensdbf6fc82014-10-23 13:33:20 -040047
48 Renderbuffer *getColorbuffer();
49 Renderbuffer *getDepthbuffer();
50 Renderbuffer *getStencilbuffer();
51
52 GLenum getColorbufferType();
53 GLenum getDepthbufferType();
54 GLenum getStencilbufferType();
55
Nicolas Capens7cc75e12015-01-29 14:44:24 -050056 GLuint getColorbufferName();
57 GLuint getDepthbufferName();
58 GLuint getStencilbufferName();
Nicolas Capensdbf6fc82014-10-23 13:33:20 -040059
60 bool hasStencil();
61
62 virtual GLenum completeness();
63 GLenum completeness(int &width, int &height, int &samples);
64
Nicolas Capensdddc4ab2015-01-13 15:49:15 -050065 GLenum getImplementationColorReadFormat();
66 GLenum getImplementationColorReadType();
67
Nicolas Capensdbf6fc82014-10-23 13:33:20 -040068protected:
69 GLenum mColorbufferType;
Nicolas Capensfa0cc042014-12-10 10:17:07 -050070 gl::BindingPointer<Renderbuffer> mColorbufferPointer;
Nicolas Capensdbf6fc82014-10-23 13:33:20 -040071
72 GLenum mDepthbufferType;
Nicolas Capensfa0cc042014-12-10 10:17:07 -050073 gl::BindingPointer<Renderbuffer> mDepthbufferPointer;
Nicolas Capensdbf6fc82014-10-23 13:33:20 -040074
75 GLenum mStencilbufferType;
Nicolas Capensfa0cc042014-12-10 10:17:07 -050076 gl::BindingPointer<Renderbuffer> mStencilbufferPointer;
Nicolas Capensdbf6fc82014-10-23 13:33:20 -040077
78private:
79 Renderbuffer *lookupRenderbuffer(GLenum type, GLuint handle) const;
80};
81
82class DefaultFramebuffer : public Framebuffer
83{
84public:
85 DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil);
Nicolas Capensdbf6fc82014-10-23 13:33:20 -040086};
87
88}
89
Nicolas Capens11157822014-10-23 23:00:29 -040090#endif // LIBGLES_CM_FRAMEBUFFER_H_