|
1 |
|
2 /* |
|
3 * Copyright 2012 Google Inc. |
|
4 * |
|
5 * Use of this source code is governed by a BSD-style license that can be |
|
6 * found in the LICENSE file. |
|
7 */ |
|
8 |
|
9 #ifndef GrFrameBufferObj_DEFINED |
|
10 #define GrFrameBufferObj_DEFINED |
|
11 |
|
12 #include "GrFakeRefObj.h" |
|
13 class GrFBBindableObj; |
|
14 |
|
15 //////////////////////////////////////////////////////////////////////////////// |
|
16 // TODO: when a framebuffer obj is bound the GL_SAMPLES query must return 0 |
|
17 // TODO: GL_STENCIL_BITS must also be redirected to the framebuffer |
|
18 class GrFrameBufferObj : public GrFakeRefObj { |
|
19 GR_DEFINE_CREATOR(GrFrameBufferObj); |
|
20 |
|
21 public: |
|
22 GrFrameBufferObj() |
|
23 : GrFakeRefObj() |
|
24 , fBound(false) |
|
25 , fColorBuffer(NULL) |
|
26 , fDepthBuffer(NULL) |
|
27 , fStencilBuffer(NULL) { |
|
28 } |
|
29 |
|
30 virtual ~GrFrameBufferObj() { |
|
31 fColorBuffer = NULL; |
|
32 fDepthBuffer = NULL; |
|
33 fStencilBuffer = NULL; |
|
34 } |
|
35 |
|
36 void setBound() { fBound = true; } |
|
37 void resetBound() { fBound = false; } |
|
38 bool getBound() const { return fBound; } |
|
39 |
|
40 void setColor(GrFBBindableObj *buffer); |
|
41 GrFBBindableObj *getColor() { return fColorBuffer; } |
|
42 |
|
43 void setDepth(GrFBBindableObj *buffer); |
|
44 GrFBBindableObj *getDepth() { return fDepthBuffer; } |
|
45 |
|
46 void setStencil(GrFBBindableObj *buffer); |
|
47 GrFBBindableObj *getStencil() { return fStencilBuffer; } |
|
48 |
|
49 virtual void deleteAction() SK_OVERRIDE { |
|
50 |
|
51 setColor(NULL); |
|
52 setDepth(NULL); |
|
53 setStencil(NULL); |
|
54 |
|
55 this->INHERITED::deleteAction(); |
|
56 } |
|
57 |
|
58 protected: |
|
59 private: |
|
60 bool fBound; // is this frame buffer currently bound via "glBindFramebuffer"? |
|
61 GrFBBindableObj * fColorBuffer; |
|
62 GrFBBindableObj * fDepthBuffer; |
|
63 GrFBBindableObj * fStencilBuffer; |
|
64 |
|
65 typedef GrFakeRefObj INHERITED; |
|
66 }; |
|
67 |
|
68 #endif // GrFrameBufferObj_DEFINED |