blob: 30a7b867ed6b8f196816c65394412403c4909cd6 [file] [log] [blame]
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +00001//
daniel@transgaming.combdfb3912012-10-31 19:55:21 +00002// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +00003// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
Shannon Woodse2632d22014-10-17 13:08:51 -04007// Renderbuffer.cpp: Implements the renderer-agnostic gl::Renderbuffer class,
8// GL renderbuffer objects and related functionality.
9// [OpenGL ES 2.0.24] section 4.4.3 page 108.
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000010
daniel@transgaming.combbf56f72010-04-20 18:52:13 +000011#include "libGLESv2/Renderbuffer.h"
enne@chromium.org0fa74632010-09-21 16:18:52 +000012#include "libGLESv2/Texture.h"
shannonwoods@chromium.orgf6fb9592013-05-30 00:09:40 +000013#include "libGLESv2/formatutils.h"
Jamie Madille261b442014-06-25 12:42:21 -040014#include "libGLESv2/FramebufferAttachment.h"
Geoff Lang0b7eef72014-06-12 14:10:47 -040015#include "libGLESv2/renderer/Renderer.h"
16#include "libGLESv2/renderer/RenderTarget.h"
Shannon Woodse2632d22014-10-17 13:08:51 -040017#include "libGLESv2/renderer/RenderbufferImpl.h"
Geoff Lang0b7eef72014-06-12 14:10:47 -040018
19#include "common/utilities.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000020
21namespace gl
22{
Shannon Woodse2632d22014-10-17 13:08:51 -040023Renderbuffer::Renderbuffer(rx::RenderbufferImpl *impl, GLuint id)
Shannon Woodsf108df22014-10-30 18:53:29 +000024 : RefCountObject(id),
Shannon Woodse2632d22014-10-17 13:08:51 -040025 mRenderbuffer(impl)
Shannon Woodsf108df22014-10-30 18:53:29 +000026{
Shannon Woodse2632d22014-10-17 13:08:51 -040027 ASSERT(mRenderbuffer);
28
29 mWidth = mRenderbuffer->getWidth();
30 mHeight = mRenderbuffer->getHeight();
31 mInternalFormat = mRenderbuffer->getInternalFormat();
32 mActualFormat = mRenderbuffer->getActualFormat();
33 mSamples = mRenderbuffer->getSamples();
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040034}
35
Cooper Partin75c42f42014-08-11 10:16:44 -070036Renderbuffer::~Renderbuffer()
37{
Shannon Woodse2632d22014-10-17 13:08:51 -040038 SafeDelete(mRenderbuffer);
Cooper Partin75c42f42014-08-11 10:16:44 -070039}
40
Shannon Woodse2632d22014-10-17 13:08:51 -040041void Renderbuffer::setStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples)
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040042{
Shannon Woodse2632d22014-10-17 13:08:51 -040043 mWidth = width;
44 mHeight = height;
45 mInternalFormat = internalformat;
46 mSamples = samples;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040047
Shannon Woodse2632d22014-10-17 13:08:51 -040048 mRenderbuffer->setStorage(width, height, internalformat, samples);
49 mActualFormat = mRenderbuffer->getActualFormat();
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040050}
51
Shannon Woodse2632d22014-10-17 13:08:51 -040052rx::RenderbufferImpl *Renderbuffer::getImplementation()
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040053{
Shannon Woodse2632d22014-10-17 13:08:51 -040054 ASSERT(mRenderbuffer);
55 return mRenderbuffer;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040056}
57
58GLsizei Renderbuffer::getWidth() const
59{
Shannon Woodse2632d22014-10-17 13:08:51 -040060 return mWidth;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040061}
62
63GLsizei Renderbuffer::getHeight() const
64{
Shannon Woodse2632d22014-10-17 13:08:51 -040065 return mHeight;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040066}
67
68GLenum Renderbuffer::getInternalFormat() const
69{
Shannon Woodse2632d22014-10-17 13:08:51 -040070 return mInternalFormat;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040071}
72
73GLenum Renderbuffer::getActualFormat() const
74{
Shannon Woodse2632d22014-10-17 13:08:51 -040075 return mActualFormat;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040076}
77
78GLsizei Renderbuffer::getSamples() const
79{
Shannon Woodse2632d22014-10-17 13:08:51 -040080 return mSamples;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040081}
82
83GLuint Renderbuffer::getRedSize() const
84{
Geoff Lang5d601382014-07-22 15:14:06 -040085 return GetInternalFormatInfo(getActualFormat()).redBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040086}
87
88GLuint Renderbuffer::getGreenSize() const
89{
Geoff Lang5d601382014-07-22 15:14:06 -040090 return GetInternalFormatInfo(getActualFormat()).greenBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040091}
92
93GLuint Renderbuffer::getBlueSize() const
94{
Geoff Lang5d601382014-07-22 15:14:06 -040095 return GetInternalFormatInfo(getActualFormat()).blueBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040096}
97
98GLuint Renderbuffer::getAlphaSize() const
99{
Geoff Lang5d601382014-07-22 15:14:06 -0400100 return GetInternalFormatInfo(getActualFormat()).alphaBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400101}
102
103GLuint Renderbuffer::getDepthSize() const
104{
Geoff Lang5d601382014-07-22 15:14:06 -0400105 return GetInternalFormatInfo(getActualFormat()).depthBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400106}
107
108GLuint Renderbuffer::getStencilSize() const
109{
Geoff Lang5d601382014-07-22 15:14:06 -0400110 return GetInternalFormatInfo(getActualFormat()).stencilBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400111}
112
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000113}