summaryrefslogtreecommitdiffstats
path: root/ANGLE/src/libGLESv2/Renderbuffer.h
blob: 2c70ce9ead955be5e14670e122366a2abe44d43d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//
// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

// Renderbuffer.h: Defines the virtual gl::Renderbuffer class and its derived
// classes Colorbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
// objects and related functionality. [OpenGL ES 2.0.24] section 4.4.3 page 108.

#ifndef LIBGLESV2_RENDERBUFFER_H_
#define LIBGLESV2_RENDERBUFFER_H_

#define GL_APICALL
#include <GLES2/gl2.h>
#include <d3d9.h>

#include "common/angleutils.h"

namespace gl
{
class Renderbuffer
{
  public:
    Renderbuffer();

    virtual ~Renderbuffer();

    virtual bool isColorbuffer();
    virtual bool isDepthbuffer();
    virtual bool isStencilbuffer();

    virtual IDirect3DSurface9 *getRenderTarget();
    virtual IDirect3DSurface9 *getDepthStencil();

    virtual int getWidth();
    virtual int getHeight();
    GLenum getFormat();
    unsigned int getSerial() const;

    static unsigned int issueSerial();

  protected:
    void setSize(int width, int height);
    GLenum mFormat;
    unsigned int mSerial;

  private:
    DISALLOW_COPY_AND_ASSIGN(Renderbuffer);

    static unsigned int mCurrentSerial;

    int mWidth;
    int mHeight;
};

class Colorbuffer : public Renderbuffer
{
  public:
    explicit Colorbuffer(IDirect3DSurface9 *renderTarget);
    Colorbuffer(int width, int height, GLenum format);

    ~Colorbuffer();

    bool isColorbuffer();

    GLuint getRedSize();
    GLuint getGreenSize();
    GLuint getBlueSize();
    GLuint getAlphaSize();

    IDirect3DSurface9 *getRenderTarget();

  protected:
    IDirect3DSurface9 *mRenderTarget;

  private:
    DISALLOW_COPY_AND_ASSIGN(Colorbuffer);
};

class Depthbuffer : public Renderbuffer
{
  public:
    explicit Depthbuffer(IDirect3DSurface9 *depthStencil);
    Depthbuffer(int width, int height);

    ~Depthbuffer();

    bool isDepthbuffer();

    GLuint getDepthSize();

    IDirect3DSurface9 *getDepthStencil();

  private:
    DISALLOW_COPY_AND_ASSIGN(Depthbuffer);
    IDirect3DSurface9 *mDepthStencil;
};

class Stencilbuffer : public Renderbuffer
{
  public:
    explicit Stencilbuffer(IDirect3DSurface9 *depthStencil);
    Stencilbuffer(int width, int height);

    ~Stencilbuffer();

    bool isStencilbuffer();

    GLuint getStencilSize();

    IDirect3DSurface9 *getDepthStencil();

  private:
    DISALLOW_COPY_AND_ASSIGN(Stencilbuffer);
    IDirect3DSurface9 *mDepthStencil;
};
}

#endif   // LIBGLESV2_RENDERBUFFER_H_