blob: 9c44129acb2eec97f114dc827da169883ed1bafe [file] [log] [blame]
Nicolas Capens0bac2852016-05-07 06:09:58 -04001// 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
26namespace es1
27{
28class Renderbuffer;
29class Colorbuffer;
30class Depthbuffer;
31class Stencilbuffer;
32class DepthStencilbuffer;
33
34class Framebuffer
35{
36public:
37 Framebuffer();
38
39 virtual ~Framebuffer();
40
Nicolas Capens0ccc71d2018-03-23 10:13:06 -040041 void setColorbuffer(GLenum type, GLuint colorbuffer, GLint level = 0);
42 void setDepthbuffer(GLenum type, GLuint depthbuffer, GLint level = 0);
43 void setStencilbuffer(GLenum type, GLuint stencilbuffer, GLint level = 0);
Nicolas Capens0bac2852016-05-07 06:09:58 -040044
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
72protected:
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
82private:
Nicolas Capens0ccc71d2018-03-23 10:13:06 -040083 Renderbuffer *lookupRenderbuffer(GLenum type, GLuint handle, GLint level) const;
Nicolas Capens0bac2852016-05-07 06:09:58 -040084};
85
86class DefaultFramebuffer : public Framebuffer
87{
88public:
89 DefaultFramebuffer(Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil);
90};
91
92}
93
94#endif // LIBGLES_CM_FRAMEBUFFER_H_