blob: 90c758a1b2a0fcf1d54dbd80a0edda9356145c7a [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
Geoff Langbafefdf2014-10-10 14:26:35 -040041Error Renderbuffer::setStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples)
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040042{
Geoff Langbafefdf2014-10-10 14:26:35 -040043 Error error = mRenderbuffer->setStorage(width, height, internalformat, samples);
44 if (error.isError())
45 {
46 return error;
47 }
48
Shannon Woodse2632d22014-10-17 13:08:51 -040049 mWidth = width;
50 mHeight = height;
51 mInternalFormat = internalformat;
52 mSamples = samples;
Shannon Woodse2632d22014-10-17 13:08:51 -040053 mActualFormat = mRenderbuffer->getActualFormat();
Geoff Langbafefdf2014-10-10 14:26:35 -040054
55 return Error(GL_NO_ERROR);
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040056}
57
Shannon Woodse2632d22014-10-17 13:08:51 -040058rx::RenderbufferImpl *Renderbuffer::getImplementation()
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040059{
Shannon Woodse2632d22014-10-17 13:08:51 -040060 ASSERT(mRenderbuffer);
61 return mRenderbuffer;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040062}
63
64GLsizei Renderbuffer::getWidth() const
65{
Shannon Woodse2632d22014-10-17 13:08:51 -040066 return mWidth;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040067}
68
69GLsizei Renderbuffer::getHeight() const
70{
Shannon Woodse2632d22014-10-17 13:08:51 -040071 return mHeight;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040072}
73
74GLenum Renderbuffer::getInternalFormat() const
75{
Shannon Woodse2632d22014-10-17 13:08:51 -040076 return mInternalFormat;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040077}
78
79GLenum Renderbuffer::getActualFormat() const
80{
Shannon Woodse2632d22014-10-17 13:08:51 -040081 return mActualFormat;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040082}
83
84GLsizei Renderbuffer::getSamples() const
85{
Shannon Woodse2632d22014-10-17 13:08:51 -040086 return mSamples;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040087}
88
89GLuint Renderbuffer::getRedSize() const
90{
Geoff Lang5d601382014-07-22 15:14:06 -040091 return GetInternalFormatInfo(getActualFormat()).redBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040092}
93
94GLuint Renderbuffer::getGreenSize() const
95{
Geoff Lang5d601382014-07-22 15:14:06 -040096 return GetInternalFormatInfo(getActualFormat()).greenBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040097}
98
99GLuint Renderbuffer::getBlueSize() const
100{
Geoff Lang5d601382014-07-22 15:14:06 -0400101 return GetInternalFormatInfo(getActualFormat()).blueBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400102}
103
104GLuint Renderbuffer::getAlphaSize() const
105{
Geoff Lang5d601382014-07-22 15:14:06 -0400106 return GetInternalFormatInfo(getActualFormat()).alphaBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400107}
108
109GLuint Renderbuffer::getDepthSize() const
110{
Geoff Lang5d601382014-07-22 15:14:06 -0400111 return GetInternalFormatInfo(getActualFormat()).depthBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400112}
113
114GLuint Renderbuffer::getStencilSize() const
115{
Geoff Lang5d601382014-07-22 15:14:06 -0400116 return GetInternalFormatInfo(getActualFormat()).stencilBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400117}
118
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000119}