/*
 * Copyright 2011 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */


#include "GrGLStencilBuffer.h"
#include "GrGpuGL.h"

GrGLStencilBuffer::~GrGLStencilBuffer() {
    this->release();
}

size_t GrGLStencilBuffer::sizeInBytes() const {
    uint64_t size = this->width();
    size *= this->height();
    size *= fFormat.fTotalBits;
    size *= GrMax(1,this->numSamples());
    return static_cast<size_t>(size / 8);
}

void GrGLStencilBuffer::onRelease() {
    if (0 != fRenderbufferID && !this->isWrapped()) {
        GrGpuGL* gpuGL = (GrGpuGL*) this->getGpu();
        const GrGLInterface* gl = gpuGL->glInterface();
        GR_GL_CALL(gl, DeleteRenderbuffers(1, &fRenderbufferID));
        fRenderbufferID = 0;
    }

    INHERITED::onRelease();
}

void GrGLStencilBuffer::onAbandon() {
    fRenderbufferID = 0;

    INHERITED::onAbandon();
}
