blob: 3673a6eefb8de6158f6f6732e19132c47bd48096 [file] [log] [blame]
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +00001//
2// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7// Framebuffer.h: Defines the gl::Framebuffer class. Implements GL framebuffer
8// objects and related functionality. [OpenGL ES 2.0.24] section 4.4 page 105.
9
10#ifndef LIBGLESV2_FRAMEBUFFER_H_
11#define LIBGLESV2_FRAMEBUFFER_H_
12
alokp@chromium.orgea0e1af2010-03-22 19:33:14 +000013#include "common/angleutils.h"
apatrick@chromium.orgb66a7012012-01-23 20:04:48 +000014#include "common/RefCountObject.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000015
daniel@transgaming.com16418b12012-11-28 19:32:22 +000016namespace rx
17{
18class Renderer;
19}
20
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000021namespace gl
22{
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000023class Renderbuffer;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000024class Colorbuffer;
25class Depthbuffer;
26class Stencilbuffer;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +000027class DepthStencilbuffer;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000028
apatrick@chromium.orgff8bdfb2010-09-15 17:27:49 +000029class Framebuffer
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000030{
31 public:
daniel@transgaming.com16418b12012-11-28 19:32:22 +000032 explicit Framebuffer(rx::Renderer *renderer);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000033
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000034 virtual ~Framebuffer();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000035
36 void setColorbuffer(GLenum type, GLuint colorbuffer);
37 void setDepthbuffer(GLenum type, GLuint depthbuffer);
38 void setStencilbuffer(GLenum type, GLuint stencilbuffer);
39
40 void detachTexture(GLuint texture);
41 void detachRenderbuffer(GLuint renderbuffer);
42
daniel@transgaming.com092bd482010-05-12 03:39:36 +000043 unsigned int getRenderTargetSerial();
daniel@transgaming.com339ae702010-05-12 03:40:20 +000044 unsigned int getDepthbufferSerial();
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +000045 unsigned int getStencilbufferSerial();
daniel@transgaming.com092bd482010-05-12 03:39:36 +000046
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000047 Renderbuffer *getColorbuffer();
48 Renderbuffer *getDepthbuffer();
49 Renderbuffer *getStencilbuffer();
daniel@transgaming.comd2b47022012-11-28 19:40:10 +000050 Renderbuffer *getDepthOrStencilbuffer();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000051
daniel@transgaming.comc46c9c02010-04-23 18:34:55 +000052 GLenum getColorbufferType();
53 GLenum getDepthbufferType();
54 GLenum getStencilbufferType();
55
56 GLuint getColorbufferHandle();
57 GLuint getDepthbufferHandle();
58 GLuint getStencilbufferHandle();
59
daniel@transgaming.coma27ff1e2010-08-24 19:20:11 +000060 bool hasStencil();
daniel@transgaming.com1f135d82010-08-24 19:20:36 +000061 int getSamples();
daniel@transgaming.coma27ff1e2010-08-24 19:20:11 +000062
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000063 virtual GLenum completeness();
64
65 protected:
66 GLenum mColorbufferType;
67 BindingPointer<Renderbuffer> mColorbufferPointer;
68
69 GLenum mDepthbufferType;
70 BindingPointer<Renderbuffer> mDepthbufferPointer;
71
72 GLenum mStencilbufferType;
73 BindingPointer<Renderbuffer> mStencilbufferPointer;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000074
daniel@transgaming.com16418b12012-11-28 19:32:22 +000075 rx::Renderer *mRenderer;
76
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000077 private:
78 DISALLOW_COPY_AND_ASSIGN(Framebuffer);
79
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000080 Renderbuffer *lookupRenderbuffer(GLenum type, GLuint handle) const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000081};
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000082
83class DefaultFramebuffer : public Framebuffer
84{
85 public:
daniel@transgaming.com16418b12012-11-28 19:32:22 +000086 DefaultFramebuffer(rx::Renderer *Renderer, Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil);
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000087
88 virtual GLenum completeness();
89
90 private:
91 DISALLOW_COPY_AND_ASSIGN(DefaultFramebuffer);
92};
93
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000094}
95
96#endif // LIBGLESV2_FRAMEBUFFER_H_