blob: ee9133c4de42f6bbced7c845261f41dccc3ddeb0 [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// Renderbuffer.h: Defines the virtual gl::Renderbuffer class and its derived
8// classes Colorbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
9// objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.
10
11#ifndef LIBGLESV2_RENDERBUFFER_H_
12#define LIBGLESV2_RENDERBUFFER_H_
13
14#define GL_APICALL
15#include <GLES2/gl2.h>
16#include <d3d9.h>
17
alokp@chromium.orgea0e1af2010-03-22 19:33:14 +000018#include "common/angleutils.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000019
20namespace gl
21{
22class Renderbuffer
23{
24 public:
25 Renderbuffer();
26
27 virtual ~Renderbuffer();
28
29 virtual bool isColorbuffer();
30 virtual bool isDepthbuffer();
31 virtual bool isStencilbuffer();
32
33 virtual IDirect3DSurface9 *getRenderTarget();
34 virtual IDirect3DSurface9 *getDepthStencil();
35
36 int getWidth();
37 int getHeight();
daniel@transgaming.com4901fca2010-04-20 18:52:41 +000038 GLenum getFormat();
daniel@transgaming.com092bd482010-05-12 03:39:36 +000039 unsigned int getSerial() const;
40
41 static unsigned int issueSerial();
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000042
43 protected:
44 int mWidth;
45 int mHeight;
daniel@transgaming.com4901fca2010-04-20 18:52:41 +000046 GLenum mFormat;
daniel@transgaming.com092bd482010-05-12 03:39:36 +000047 unsigned int mSerial;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000048
49 private:
50 DISALLOW_COPY_AND_ASSIGN(Renderbuffer);
daniel@transgaming.com092bd482010-05-12 03:39:36 +000051
52 static unsigned int mCurrentSerial;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000053};
54
55class Colorbuffer : public Renderbuffer
56{
57 public:
daniel@transgaming.com70d312a2010-04-20 18:52:38 +000058 explicit Colorbuffer(IDirect3DSurface9 *renderTarget);
59 Colorbuffer(int width, int height, GLenum format);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000060
61 ~Colorbuffer();
62
63 bool isColorbuffer();
64
65 GLuint getRedSize();
66 GLuint getGreenSize();
67 GLuint getBlueSize();
68 GLuint getAlphaSize();
69
70 IDirect3DSurface9 *getRenderTarget();
71
72 protected:
73 IDirect3DSurface9 *mRenderTarget;
74
75 private:
76 DISALLOW_COPY_AND_ASSIGN(Colorbuffer);
77};
78
79class Depthbuffer : public Renderbuffer
80{
81 public:
daniel@transgaming.com70d312a2010-04-20 18:52:38 +000082 explicit Depthbuffer(IDirect3DSurface9 *depthStencil);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000083 Depthbuffer(int width, int height);
84
85 ~Depthbuffer();
86
87 bool isDepthbuffer();
88
89 GLuint getDepthSize();
90
91 IDirect3DSurface9 *getDepthStencil();
92
93 private:
94 DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
95 IDirect3DSurface9 *mDepthStencil;
96};
97
98class Stencilbuffer : public Renderbuffer
99{
100 public:
daniel@transgaming.com70d312a2010-04-20 18:52:38 +0000101 explicit Stencilbuffer(IDirect3DSurface9 *depthStencil);
daniel@transgaming.com4a9d65c2010-03-08 21:30:56 +0000102 Stencilbuffer(int width, int height);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000103
104 ~Stencilbuffer();
105
106 bool isStencilbuffer();
107
108 GLuint getStencilSize();
109
110 IDirect3DSurface9 *getDepthStencil();
111
112 private:
113 DISALLOW_COPY_AND_ASSIGN(Stencilbuffer);
114 IDirect3DSurface9 *mDepthStencil;
115};
116}
117
118#endif // LIBGLESV2_RENDERBUFFER_H_