1 //
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 // Framebuffer.h: Defines the gl::Framebuffer class. Implements GL framebuffer
8 // objects and related functionality. [OpenGL ES 2.0.24] section 4.4 page 105.
9 
10 #ifndef LIBGLESV2_FRAMEBUFFER_H_
11 #define LIBGLESV2_FRAMEBUFFER_H_
12 
13 #define GL_APICALL
14 #include <GLES2/gl2.h>
15 #include <d3d9.h>
16 
17 #include "common/angleutils.h"
18 #include "libGLESv2/RefCountObject.h"
19 
20 namespace gl
21 {
22 class Renderbuffer;
23 class Colorbuffer;
24 class Depthbuffer;
25 class Stencilbuffer;
26 class DepthStencilbuffer;
27 
28 class Framebuffer
29 {
30   public:
31     Framebuffer();
32 
33     virtual ~Framebuffer();
34 
35     void setColorbuffer(GLenum type, GLuint colorbuffer);
36     void setDepthbuffer(GLenum type, GLuint depthbuffer);
37     void setStencilbuffer(GLenum type, GLuint stencilbuffer);
38 
39     void detachTexture(GLuint texture);
40     void detachRenderbuffer(GLuint renderbuffer);
41 
42     IDirect3DSurface9 *getRenderTarget();
43     IDirect3DSurface9 *getDepthStencil();
44 
45     unsigned int getRenderTargetSerial();
46     unsigned int getDepthbufferSerial();
47     unsigned int getStencilbufferSerial();
48 
49     Colorbuffer *getColorbuffer();
50     DepthStencilbuffer *getDepthbuffer();
51     DepthStencilbuffer *getStencilbuffer();
52 
53     GLenum getColorbufferType();
54     GLenum getDepthbufferType();
55     GLenum getStencilbufferType();
56 
57     GLuint getColorbufferHandle();
58     GLuint getDepthbufferHandle();
59     GLuint getStencilbufferHandle();
60 
61     bool hasStencil();
62     bool isMultisample();
63     int getSamples();
64 
65     virtual GLenum completeness();
66 
67   protected:
68     GLenum mColorbufferType;
69     BindingPointer<Renderbuffer> mColorbufferPointer;
70 
71     GLenum mDepthbufferType;
72     BindingPointer<Renderbuffer> mDepthbufferPointer;
73 
74     GLenum mStencilbufferType;
75     BindingPointer<Renderbuffer> mStencilbufferPointer;
76 
77   private:
78     DISALLOW_COPY_AND_ASSIGN(Framebuffer);
79 
80     Renderbuffer *lookupRenderbuffer(GLenum type, GLuint handle) const;
81 };
82 
83 class DefaultFramebuffer : public Framebuffer
84 {
85   public:
86     DefaultFramebuffer(Colorbuffer *color, DepthStencilbuffer *depthStencil);
87 
88     virtual GLenum completeness();
89 
90   private:
91     DISALLOW_COPY_AND_ASSIGN(DefaultFramebuffer);
92 };
93 
94 }
95 
96 #endif   // LIBGLESV2_FRAMEBUFFER_H_
97