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#include "GrFrameBufferObj.h"
10#include "GrFBBindableObj.h"
11
12void GrFrameBufferObj::setColor(GrFBBindableObj *buffer) {
13    if (fColorBuffer) {
14        // automatically break the binding of the old buffer
15        GrAlwaysAssert(fColorBuffer->getColorBound(this));
16        fColorBuffer->resetColorBound(this);
17
18        GrAlwaysAssert(!fColorBuffer->getDeleted());
19        fColorBuffer->unref();
20    }
21    fColorBuffer = buffer;
22    if (fColorBuffer) {
23        GrAlwaysAssert(!fColorBuffer->getDeleted());
24        fColorBuffer->ref();
25
26        GrAlwaysAssert(!fColorBuffer->getColorBound(this));
27        fColorBuffer->setColorBound(this);
28    }
29}
30
31void GrFrameBufferObj::setDepth(GrFBBindableObj *buffer) {
32    if (fDepthBuffer) {
33        // automatically break the binding of the old buffer
34        GrAlwaysAssert(fDepthBuffer->getDepthBound(this));
35        fDepthBuffer->resetDepthBound(this);
36
37        GrAlwaysAssert(!fDepthBuffer->getDeleted());
38        fDepthBuffer->unref();
39    }
40    fDepthBuffer = buffer;
41    if (fDepthBuffer) {
42        GrAlwaysAssert(!fDepthBuffer->getDeleted());
43        fDepthBuffer->ref();
44
45        GrAlwaysAssert(!fDepthBuffer->getDepthBound(this));
46        fDepthBuffer->setDepthBound(this);
47    }
48}
49
50void GrFrameBufferObj::setStencil(GrFBBindableObj *buffer) {
51    if (fStencilBuffer) {
52        // automatically break the binding of the old buffer
53        GrAlwaysAssert(fStencilBuffer->getStencilBound(this));
54        fStencilBuffer->resetStencilBound(this);
55
56        //GrAlwaysAssert(!fStencilBuffer->getDeleted());
57        fStencilBuffer->unref();
58    }
59    fStencilBuffer = buffer;
60    if (fStencilBuffer) {
61        GrAlwaysAssert(!fStencilBuffer->getDeleted());
62        fStencilBuffer->ref();
63
64        GrAlwaysAssert(!fStencilBuffer->getStencilBound(this));
65        fStencilBuffer->setStencilBound(this);
66    }
67}
68