blob: 15cb2639ab82b85e50ee6af5e67b47d9ceeebb3e [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
13#define GL_APICALL
14#include <GLES2/gl2.h>
15#include <d3d9.h>
16
alokp@chromium.orgea0e1af2010-03-22 19:33:14 +000017#include "common/angleutils.h"
apatrick@chromium.orgb66a7012012-01-23 20:04:48 +000018#include "common/RefCountObject.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000019
daniel@transgaming.com16418b12012-11-28 19:32:22 +000020namespace rx
21{
22class Renderer;
23}
24
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000025namespace gl
26{
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000027class Renderbuffer;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000028class Colorbuffer;
29class Depthbuffer;
30class Stencilbuffer;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +000031class DepthStencilbuffer;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000032
apatrick@chromium.orgff8bdfb2010-09-15 17:27:49 +000033class Framebuffer
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000034{
35 public:
daniel@transgaming.com16418b12012-11-28 19:32:22 +000036 explicit Framebuffer(rx::Renderer *renderer);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000037
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000038 virtual ~Framebuffer();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000039
40 void setColorbuffer(GLenum type, GLuint colorbuffer);
41 void setDepthbuffer(GLenum type, GLuint depthbuffer);
42 void setStencilbuffer(GLenum type, GLuint stencilbuffer);
43
44 void detachTexture(GLuint texture);
45 void detachRenderbuffer(GLuint renderbuffer);
46
47 IDirect3DSurface9 *getRenderTarget();
48 IDirect3DSurface9 *getDepthStencil();
49
daniel@transgaming.com092bd482010-05-12 03:39:36 +000050 unsigned int getRenderTargetSerial();
daniel@transgaming.com339ae702010-05-12 03:40:20 +000051 unsigned int getDepthbufferSerial();
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +000052 unsigned int getStencilbufferSerial();
daniel@transgaming.com092bd482010-05-12 03:39:36 +000053
daniel@transgaming.comd14558a2011-11-09 17:46:18 +000054 Renderbuffer *getColorbuffer();
55 Renderbuffer *getDepthbuffer();
56 Renderbuffer *getStencilbuffer();
daniel@transgaming.comd2b47022012-11-28 19:40:10 +000057 Renderbuffer *getDepthOrStencilbuffer();
daniel@transgaming.com68145c62012-05-31 01:14:46 +000058 Renderbuffer *getNullColorbuffer();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000059
daniel@transgaming.comc46c9c02010-04-23 18:34:55 +000060 GLenum getColorbufferType();
61 GLenum getDepthbufferType();
62 GLenum getStencilbufferType();
63
64 GLuint getColorbufferHandle();
65 GLuint getDepthbufferHandle();
66 GLuint getStencilbufferHandle();
67
daniel@transgaming.coma27ff1e2010-08-24 19:20:11 +000068 bool hasStencil();
daniel@transgaming.com1f135d82010-08-24 19:20:36 +000069 int getSamples();
daniel@transgaming.coma27ff1e2010-08-24 19:20:11 +000070
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000071 virtual GLenum completeness();
72
73 protected:
74 GLenum mColorbufferType;
75 BindingPointer<Renderbuffer> mColorbufferPointer;
76
77 GLenum mDepthbufferType;
78 BindingPointer<Renderbuffer> mDepthbufferPointer;
79
80 GLenum mStencilbufferType;
81 BindingPointer<Renderbuffer> mStencilbufferPointer;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000082
daniel@transgaming.com68145c62012-05-31 01:14:46 +000083 BindingPointer<Renderbuffer> mNullColorbufferPointer;
84
daniel@transgaming.com16418b12012-11-28 19:32:22 +000085 rx::Renderer *mRenderer;
86
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000087 private:
88 DISALLOW_COPY_AND_ASSIGN(Framebuffer);
89
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000090 Renderbuffer *lookupRenderbuffer(GLenum type, GLuint handle) const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000091};
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000092
93class DefaultFramebuffer : public Framebuffer
94{
95 public:
daniel@transgaming.com16418b12012-11-28 19:32:22 +000096 DefaultFramebuffer(rx::Renderer *Renderer, Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil);
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000097
98 virtual GLenum completeness();
99
100 private:
101 DISALLOW_COPY_AND_ASSIGN(DefaultFramebuffer);
102};
103
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000104}
105
106#endif // LIBGLESV2_FRAMEBUFFER_H_