blob: bbc01bcfc742163f8200105f00b8b3d06f2c593c [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;
44 GLenum getFormat() const;
daniel@transgaming.com092bd482010-05-12 03:39:36 +000045 unsigned int getSerial() const;
46
47 static unsigned int issueSerial();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000048
49 protected:
daniel@transgaming.com866f3182010-05-20 19:28:22 +000050 void setSize(int width, int height);
daniel@transgaming.com4901fca2010-04-20 18:52:41 +000051 GLenum mFormat;
daniel@transgaming.com092bd482010-05-12 03:39:36 +000052 unsigned int mSerial;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000053
54 private:
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000055 DISALLOW_COPY_AND_ASSIGN(RenderbufferStorage);
daniel@transgaming.com092bd482010-05-12 03:39:36 +000056
57 static unsigned int mCurrentSerial;
daniel@transgaming.com866f3182010-05-20 19:28:22 +000058
59 int mWidth;
60 int mHeight;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000061};
62
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +000063// Renderbuffer implements the GL renderbuffer object.
64// It's only a wrapper for a RenderbufferStorage, but the internal object
65// can change whenever glRenderbufferStorage is called.
66class Renderbuffer : public RefCountObject
67{
68 public:
69 Renderbuffer(GLuint id, RenderbufferStorage *storage);
70
71 ~Renderbuffer();
72
73 bool isColorbuffer() const;
74 bool isDepthbuffer() const;
75 bool isStencilbuffer() const;
76
77 IDirect3DSurface9 *getRenderTarget();
78 IDirect3DSurface9 *getDepthStencil();
79
80 int getWidth() const;
81 int getHeight() const;
82 GLenum getFormat() const;
83 unsigned int getSerial() const;
84
85 void setStorage(RenderbufferStorage *newStorage);
86 RenderbufferStorage *getStorage() { return mStorage; }
87
88 private:
89 DISALLOW_COPY_AND_ASSIGN(Renderbuffer);
90
91 RenderbufferStorage *mStorage;
92};
93
94class Colorbuffer : public RenderbufferStorage
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000095{
96 public:
daniel@transgaming.com70d312a2010-04-20 18:52:38 +000097 explicit Colorbuffer(IDirect3DSurface9 *renderTarget);
98 Colorbuffer(int width, int height, GLenum format);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000099
100 ~Colorbuffer();
101
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000102 bool isColorbuffer() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000103
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000104 GLuint getRedSize() const;
105 GLuint getGreenSize() const;
106 GLuint getBlueSize() const;
107 GLuint getAlphaSize() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000108
109 IDirect3DSurface9 *getRenderTarget();
110
111 protected:
112 IDirect3DSurface9 *mRenderTarget;
113
114 private:
115 DISALLOW_COPY_AND_ASSIGN(Colorbuffer);
116};
117
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000118class DepthStencilbuffer : public RenderbufferStorage
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000119{
120 public:
121 explicit DepthStencilbuffer(IDirect3DSurface9 *depthStencil);
122 DepthStencilbuffer(int width, int height);
123
124 ~DepthStencilbuffer();
125
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000126 virtual bool isDepthbuffer() const;
127 virtual bool isStencilbuffer() const;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000128
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000129 GLuint getDepthSize() const;
130 GLuint getStencilSize() const;
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000131
132 IDirect3DSurface9 *getDepthStencil();
133
134 private:
135 DISALLOW_COPY_AND_ASSIGN(DepthStencilbuffer);
136 IDirect3DSurface9 *mDepthStencil;
137};
138
139class Depthbuffer : public DepthStencilbuffer
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000140{
141 public:
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000142 explicit Depthbuffer(IDirect3DSurface9 *depthStencil);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000143 Depthbuffer(int width, int height);
144
145 ~Depthbuffer();
146
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000147 bool isDepthbuffer() const;
148 bool isStencilbuffer() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000149
150 private:
151 DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000152};
153
daniel@transgaming.comcdacc8e2010-07-28 19:20:50 +0000154class Stencilbuffer : public DepthStencilbuffer
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000155{
156 public:
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000157 explicit Stencilbuffer(IDirect3DSurface9 *depthStencil);
daniel@transgaming.com4a9d65c2010-03-08 21:30:56 +0000158 Stencilbuffer(int width, int height);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000159
160 ~Stencilbuffer();
161
daniel@transgaming.com9ecb9f92010-07-28 19:21:12 +0000162 bool isDepthbuffer() const;
163 bool isStencilbuffer() const;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000164
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000165 private:
166 DISALLOW_COPY_AND_ASSIGN(Stencilbuffer);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000167};
168}
169
170#endif // LIBGLESV2_RENDERBUFFER_H_