blob: 15e661b4196d38d8019e28a0a6903d0ad5aeae73 [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
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +00007// Renderbuffer.h: Defines the wrapper class gl::Renderbuffer, as well as the
8// class hierarchy used to store its contents: RenderbufferStorage, Colorbuffer,
9// DepthStencilbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000010// objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.
11
12#ifndef LIBGLESV2_RENDERBUFFER_H_
13#define LIBGLESV2_RENDERBUFFER_H_
14
15#define GL_APICALL
16#include <GLES2/gl2.h>
17#include <d3d9.h>
18
alokp@chromium.orgea0e1af2010-03-22 19:33:14 +000019#include "common/angleutils.h"
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000020#include "libGLESv2/RefCountObject.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000021
22namespace gl
23{
enne@chromium.org0fa74632010-09-21 16:18:52 +000024 class Texture;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000025
26// A class derived from RenderbufferStorage is created whenever glRenderbufferStorage
27// is called. The specific concrete type depends on whether the internal format is
28// colour depth, stencil or packed depth/stencil.
29class RenderbufferStorage
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000030{
31 public:
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000032 RenderbufferStorage();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000033
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000034 virtual ~RenderbufferStorage() = 0;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000035
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000036 virtual bool isColorbuffer() const;
37 virtual bool isDepthbuffer() const;
38 virtual bool isStencilbuffer() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000039
40 virtual IDirect3DSurface9 *getRenderTarget();
41 virtual IDirect3DSurface9 *getDepthStencil();
42
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000043 virtual int getWidth() const;
44 virtual int getHeight() const;
daniel@transgaming.com01868132010-08-24 19:21:17 +000045 virtual GLenum getFormat() const;
daniel@transgaming.com1297d922010-09-01 15:47:47 +000046 virtual bool isFloatingPoint() const;
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +000047 D3DFORMAT getD3DFormat() const;
daniel@transgaming.com1f135d82010-08-24 19:20:36 +000048 GLsizei getSamples() const;
daniel@transgaming.com092bd482010-05-12 03:39:36 +000049 unsigned int getSerial() const;
50
51 static unsigned int issueSerial();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000052
53 protected:
daniel@transgaming.com866f3182010-05-20 19:28:22 +000054 void setSize(int width, int height);
daniel@transgaming.com4901fca2010-04-20 18:52:41 +000055 GLenum mFormat;
daniel@transgaming.comca7c0082010-08-24 19:20:20 +000056 D3DFORMAT mD3DFormat;
daniel@transgaming.com1f135d82010-08-24 19:20:36 +000057 GLsizei mSamples;
daniel@transgaming.com092bd482010-05-12 03:39:36 +000058 unsigned int mSerial;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000059
60 private:
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000061 DISALLOW_COPY_AND_ASSIGN(RenderbufferStorage);
daniel@transgaming.com092bd482010-05-12 03:39:36 +000062
63 static unsigned int mCurrentSerial;
daniel@transgaming.com866f3182010-05-20 19:28:22 +000064
65 int mWidth;
66 int mHeight;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000067};
68
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000069// Renderbuffer implements the GL renderbuffer object.
70// It's only a wrapper for a RenderbufferStorage, but the internal object
71// can change whenever glRenderbufferStorage is called.
72class Renderbuffer : public RefCountObject
73{
74 public:
75 Renderbuffer(GLuint id, RenderbufferStorage *storage);
76
77 ~Renderbuffer();
78
79 bool isColorbuffer() const;
80 bool isDepthbuffer() const;
81 bool isStencilbuffer() const;
82
83 IDirect3DSurface9 *getRenderTarget();
84 IDirect3DSurface9 *getDepthStencil();
85
86 int getWidth() const;
87 int getHeight() const;
88 GLenum getFormat() const;
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +000089 D3DFORMAT getD3DFormat() const;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000090 unsigned int getSerial() const;
91
92 void setStorage(RenderbufferStorage *newStorage);
93 RenderbufferStorage *getStorage() { return mStorage; }
94
95 private:
96 DISALLOW_COPY_AND_ASSIGN(Renderbuffer);
97
98 RenderbufferStorage *mStorage;
99};
100
101class Colorbuffer : public RenderbufferStorage
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000102{
103 public:
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000104 explicit Colorbuffer(IDirect3DSurface9 *renderTarget);
enne@chromium.org0fa74632010-09-21 16:18:52 +0000105 explicit Colorbuffer(const Texture* texture);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000106 Colorbuffer(int width, int height, GLenum format, GLsizei samples);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000107
108 ~Colorbuffer();
109
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000110 bool isColorbuffer() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000111
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000112 GLuint getRedSize() const;
113 GLuint getGreenSize() const;
114 GLuint getBlueSize() const;
115 GLuint getAlphaSize() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000116
117 IDirect3DSurface9 *getRenderTarget();
118
119 protected:
120 IDirect3DSurface9 *mRenderTarget;
121
122 private:
123 DISALLOW_COPY_AND_ASSIGN(Colorbuffer);
124};
125
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000126class DepthStencilbuffer : public RenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000127{
128 public:
129 explicit DepthStencilbuffer(IDirect3DSurface9 *depthStencil);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000130 DepthStencilbuffer(int width, int height, GLsizei samples);
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000131
132 ~DepthStencilbuffer();
133
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000134 virtual bool isDepthbuffer() const;
135 virtual bool isStencilbuffer() const;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000136
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000137 GLuint getDepthSize() const;
138 GLuint getStencilSize() const;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000139
140 IDirect3DSurface9 *getDepthStencil();
141
142 private:
143 DISALLOW_COPY_AND_ASSIGN(DepthStencilbuffer);
144 IDirect3DSurface9 *mDepthStencil;
145};
146
147class Depthbuffer : public DepthStencilbuffer
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000148{
149 public:
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000150 explicit Depthbuffer(IDirect3DSurface9 *depthStencil);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000151 Depthbuffer(int width, int height, GLsizei samples);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000152
153 ~Depthbuffer();
154
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000155 bool isDepthbuffer() const;
156 bool isStencilbuffer() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000157
158 private:
159 DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000160};
161
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000162class Stencilbuffer : public DepthStencilbuffer
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000163{
164 public:
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000165 explicit Stencilbuffer(IDirect3DSurface9 *depthStencil);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000166 Stencilbuffer(int width, int height, GLsizei samples);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000167
168 ~Stencilbuffer();
169
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000170 bool isDepthbuffer() const;
171 bool isStencilbuffer() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000172
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000173 private:
174 DISALLOW_COPY_AND_ASSIGN(Stencilbuffer);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000175};
176}
177
178#endif // LIBGLESV2_RENDERBUFFER_H_