|
1 // |
|
2 // Copyright (c) 2002-2013 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 #include "common/angleutils.h" |
|
14 #include "common/RefCountObject.h" |
|
15 #include "Constants.h" |
|
16 |
|
17 namespace rx |
|
18 { |
|
19 class Renderer; |
|
20 } |
|
21 |
|
22 namespace gl |
|
23 { |
|
24 class Renderbuffer; |
|
25 class Colorbuffer; |
|
26 class Depthbuffer; |
|
27 class Stencilbuffer; |
|
28 class DepthStencilbuffer; |
|
29 |
|
30 class Framebuffer |
|
31 { |
|
32 public: |
|
33 explicit Framebuffer(rx::Renderer *renderer); |
|
34 |
|
35 virtual ~Framebuffer(); |
|
36 |
|
37 void setColorbuffer(unsigned int colorAttachment, GLenum type, GLuint colorbuffer); |
|
38 void setDepthbuffer(GLenum type, GLuint depthbuffer); |
|
39 void setStencilbuffer(GLenum type, GLuint stencilbuffer); |
|
40 |
|
41 void detachTexture(GLuint texture); |
|
42 void detachRenderbuffer(GLuint renderbuffer); |
|
43 |
|
44 unsigned int getRenderTargetSerial(unsigned int colorAttachment) const; |
|
45 unsigned int getDepthbufferSerial() const; |
|
46 unsigned int getStencilbufferSerial() const; |
|
47 |
|
48 Renderbuffer *getColorbuffer(unsigned int colorAttachment) const; |
|
49 Renderbuffer *getDepthbuffer() const; |
|
50 Renderbuffer *getStencilbuffer() const; |
|
51 Renderbuffer *getDepthOrStencilbuffer() const; |
|
52 Renderbuffer *getReadColorbuffer() const; |
|
53 GLenum getReadColorbufferType() const; |
|
54 Renderbuffer *getFirstColorbuffer() const; |
|
55 |
|
56 GLenum getColorbufferType(unsigned int colorAttachment) const; |
|
57 GLenum getDepthbufferType() const; |
|
58 GLenum getStencilbufferType() const; |
|
59 |
|
60 GLuint getColorbufferHandle(unsigned int colorAttachment) const; |
|
61 GLuint getDepthbufferHandle() const; |
|
62 GLuint getStencilbufferHandle() const; |
|
63 |
|
64 GLenum getDrawBufferState(unsigned int colorAttachment) const; |
|
65 void setDrawBufferState(unsigned int colorAttachment, GLenum drawBuffer); |
|
66 |
|
67 bool isEnabledColorAttachment(unsigned int colorAttachment) const; |
|
68 bool hasEnabledColorAttachment() const; |
|
69 bool hasStencil() const; |
|
70 int getSamples() const; |
|
71 bool usingExtendedDrawBuffers() const; |
|
72 |
|
73 virtual GLenum completeness() const; |
|
74 |
|
75 protected: |
|
76 GLenum mColorbufferTypes[IMPLEMENTATION_MAX_DRAW_BUFFERS]; |
|
77 BindingPointer<Renderbuffer> mColorbufferPointers[IMPLEMENTATION_MAX_DRAW_BUFFERS]; |
|
78 GLenum mDrawBufferStates[IMPLEMENTATION_MAX_DRAW_BUFFERS]; |
|
79 GLenum mReadBufferState; |
|
80 |
|
81 GLenum mDepthbufferType; |
|
82 BindingPointer<Renderbuffer> mDepthbufferPointer; |
|
83 |
|
84 GLenum mStencilbufferType; |
|
85 BindingPointer<Renderbuffer> mStencilbufferPointer; |
|
86 |
|
87 rx::Renderer *mRenderer; |
|
88 |
|
89 private: |
|
90 DISALLOW_COPY_AND_ASSIGN(Framebuffer); |
|
91 |
|
92 Renderbuffer *lookupRenderbuffer(GLenum type, GLuint handle) const; |
|
93 }; |
|
94 |
|
95 class DefaultFramebuffer : public Framebuffer |
|
96 { |
|
97 public: |
|
98 DefaultFramebuffer(rx::Renderer *Renderer, Colorbuffer *colorbuffer, DepthStencilbuffer *depthStencil); |
|
99 |
|
100 virtual GLenum completeness() const; |
|
101 |
|
102 private: |
|
103 DISALLOW_COPY_AND_ASSIGN(DefaultFramebuffer); |
|
104 }; |
|
105 |
|
106 } |
|
107 |
|
108 #endif // LIBGLESV2_FRAMEBUFFER_H_ |