blob: 35931e9ebfa03ac1bfea2157ca3a297ecd323f4b [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{
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000024
25// A class derived from RenderbufferStorage is created whenever glRenderbufferStorage
26// is called. The specific concrete type depends on whether the internal format is
27// colour depth, stencil or packed depth/stencil.
28class RenderbufferStorage
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000029{
30 public:
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000031 RenderbufferStorage();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000032
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000033 virtual ~RenderbufferStorage() = 0;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000034
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000035 virtual bool isColorbuffer() const;
36 virtual bool isDepthbuffer() const;
37 virtual bool isStencilbuffer() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000038
39 virtual IDirect3DSurface9 *getRenderTarget();
40 virtual IDirect3DSurface9 *getDepthStencil();
41
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000042 virtual int getWidth() const;
43 virtual int getHeight() const;
daniel@transgaming.com01868132010-08-24 19:21:17 +000044 virtual GLenum getFormat() const;
daniel@transgaming.com1297d922010-09-01 15:47:47 +000045 virtual bool isFloatingPoint() const;
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +000046 D3DFORMAT getD3DFormat() const;
daniel@transgaming.com1f135d82010-08-24 19:20:36 +000047 GLsizei getSamples() const;
daniel@transgaming.com092bd482010-05-12 03:39:36 +000048 unsigned int getSerial() const;
49
50 static unsigned int issueSerial();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000051
52 protected:
daniel@transgaming.com866f3182010-05-20 19:28:22 +000053 void setSize(int width, int height);
daniel@transgaming.com4901fca2010-04-20 18:52:41 +000054 GLenum mFormat;
daniel@transgaming.comca7c0082010-08-24 19:20:20 +000055 D3DFORMAT mD3DFormat;
daniel@transgaming.com1f135d82010-08-24 19:20:36 +000056 GLsizei mSamples;
daniel@transgaming.com092bd482010-05-12 03:39:36 +000057 unsigned int mSerial;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000058
59 private:
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000060 DISALLOW_COPY_AND_ASSIGN(RenderbufferStorage);
daniel@transgaming.com092bd482010-05-12 03:39:36 +000061
62 static unsigned int mCurrentSerial;
daniel@transgaming.com866f3182010-05-20 19:28:22 +000063
64 int mWidth;
65 int mHeight;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000066};
67
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000068// Renderbuffer implements the GL renderbuffer object.
69// It's only a wrapper for a RenderbufferStorage, but the internal object
70// can change whenever glRenderbufferStorage is called.
71class Renderbuffer : public RefCountObject
72{
73 public:
74 Renderbuffer(GLuint id, RenderbufferStorage *storage);
75
76 ~Renderbuffer();
77
78 bool isColorbuffer() const;
79 bool isDepthbuffer() const;
80 bool isStencilbuffer() const;
81
82 IDirect3DSurface9 *getRenderTarget();
83 IDirect3DSurface9 *getDepthStencil();
84
85 int getWidth() const;
86 int getHeight() const;
87 GLenum getFormat() const;
daniel@transgaming.com4cbc5902010-08-24 19:20:26 +000088 D3DFORMAT getD3DFormat() const;
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000089 unsigned int getSerial() const;
90
91 void setStorage(RenderbufferStorage *newStorage);
92 RenderbufferStorage *getStorage() { return mStorage; }
93
94 private:
95 DISALLOW_COPY_AND_ASSIGN(Renderbuffer);
96
97 RenderbufferStorage *mStorage;
98};
99
100class Colorbuffer : public RenderbufferStorage
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000101{
102 public:
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000103 explicit Colorbuffer(IDirect3DSurface9 *renderTarget);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000104 Colorbuffer(int width, int height, GLenum format, GLsizei samples);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000105
106 ~Colorbuffer();
107
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000108 bool isColorbuffer() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000109
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000110 GLuint getRedSize() const;
111 GLuint getGreenSize() const;
112 GLuint getBlueSize() const;
113 GLuint getAlphaSize() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000114
115 IDirect3DSurface9 *getRenderTarget();
116
117 protected:
118 IDirect3DSurface9 *mRenderTarget;
119
120 private:
121 DISALLOW_COPY_AND_ASSIGN(Colorbuffer);
122};
123
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000124class DepthStencilbuffer : public RenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000125{
126 public:
127 explicit DepthStencilbuffer(IDirect3DSurface9 *depthStencil);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000128 DepthStencilbuffer(int width, int height, GLsizei samples);
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000129
130 ~DepthStencilbuffer();
131
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000132 virtual bool isDepthbuffer() const;
133 virtual bool isStencilbuffer() const;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000134
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000135 GLuint getDepthSize() const;
136 GLuint getStencilSize() const;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000137
138 IDirect3DSurface9 *getDepthStencil();
139
140 private:
141 DISALLOW_COPY_AND_ASSIGN(DepthStencilbuffer);
142 IDirect3DSurface9 *mDepthStencil;
143};
144
145class Depthbuffer : public DepthStencilbuffer
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000146{
147 public:
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000148 explicit Depthbuffer(IDirect3DSurface9 *depthStencil);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000149 Depthbuffer(int width, int height, GLsizei samples);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000150
151 ~Depthbuffer();
152
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000153 bool isDepthbuffer() const;
154 bool isStencilbuffer() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000155
156 private:
157 DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000158};
159
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000160class Stencilbuffer : public DepthStencilbuffer
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000161{
162 public:
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000163 explicit Stencilbuffer(IDirect3DSurface9 *depthStencil);
daniel@transgaming.com1f135d82010-08-24 19:20:36 +0000164 Stencilbuffer(int width, int height, GLsizei samples);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000165
166 ~Stencilbuffer();
167
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000168 bool isDepthbuffer() const;
169 bool isStencilbuffer() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000170
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000171 private:
172 DISALLOW_COPY_AND_ASSIGN(Stencilbuffer);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000173};
174}
175
176#endif // LIBGLESV2_RENDERBUFFER_H_