blob: 00d47689ad25c7128027a7be80231ae6c05bfc13 [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
Geoff Lang2b5420c2014-11-19 14:20:15 -050011#include "libANGLE/Renderbuffer.h"
Geoff Lang0b7eef72014-06-12 14:10:47 -040012
13#include "common/utilities.h"
Jamie Madilld98bbc32014-12-03 11:36:42 -050014#include "libANGLE/FramebufferAttachment.h"
15#include "libANGLE/Texture.h"
16#include "libANGLE/formatutils.h"
17#include "libANGLE/renderer/RenderTarget.h"
18#include "libANGLE/renderer/RenderbufferImpl.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000019
20namespace gl
21{
Shannon Woodse2632d22014-10-17 13:08:51 -040022Renderbuffer::Renderbuffer(rx::RenderbufferImpl *impl, GLuint id)
Shannon Woodsf108df22014-10-30 18:53:29 +000023 : RefCountObject(id),
Geoff Lang6a1e6b92014-11-06 10:42:45 -050024 mRenderbuffer(impl),
25 mWidth(0),
26 mHeight(0),
27 mInternalFormat(GL_RGBA4),
Geoff Lang6a1e6b92014-11-06 10:42:45 -050028 mSamples(0)
Shannon Woodsf108df22014-10-30 18:53:29 +000029{
Shannon Woodse2632d22014-10-17 13:08:51 -040030 ASSERT(mRenderbuffer);
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040031}
32
Cooper Partin75c42f42014-08-11 10:16:44 -070033Renderbuffer::~Renderbuffer()
34{
Shannon Woodse2632d22014-10-17 13:08:51 -040035 SafeDelete(mRenderbuffer);
Cooper Partin75c42f42014-08-11 10:16:44 -070036}
37
Geoff Langbafefdf2014-10-10 14:26:35 -040038Error Renderbuffer::setStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples)
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040039{
Geoff Langbafefdf2014-10-10 14:26:35 -040040 Error error = mRenderbuffer->setStorage(width, height, internalformat, samples);
41 if (error.isError())
42 {
43 return error;
44 }
45
Shannon Woodse2632d22014-10-17 13:08:51 -040046 mWidth = width;
47 mHeight = height;
48 mInternalFormat = internalformat;
49 mSamples = samples;
Geoff Langbafefdf2014-10-10 14:26:35 -040050
51 return Error(GL_NO_ERROR);
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040052}
53
Shannon Woodse2632d22014-10-17 13:08:51 -040054rx::RenderbufferImpl *Renderbuffer::getImplementation()
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040055{
Shannon Woodse2632d22014-10-17 13:08:51 -040056 ASSERT(mRenderbuffer);
57 return mRenderbuffer;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040058}
59
60GLsizei Renderbuffer::getWidth() const
61{
Shannon Woodse2632d22014-10-17 13:08:51 -040062 return mWidth;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040063}
64
65GLsizei Renderbuffer::getHeight() const
66{
Shannon Woodse2632d22014-10-17 13:08:51 -040067 return mHeight;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040068}
69
70GLenum Renderbuffer::getInternalFormat() const
71{
Shannon Woodse2632d22014-10-17 13:08:51 -040072 return mInternalFormat;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040073}
74
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040075GLsizei Renderbuffer::getSamples() const
76{
Shannon Woodse2632d22014-10-17 13:08:51 -040077 return mSamples;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040078}
79
80GLuint Renderbuffer::getRedSize() const
81{
Geoff Langd8a22582014-12-17 15:28:23 -050082 return GetInternalFormatInfo(mInternalFormat).redBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040083}
84
85GLuint Renderbuffer::getGreenSize() const
86{
Geoff Langd8a22582014-12-17 15:28:23 -050087 return GetInternalFormatInfo(mInternalFormat).greenBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040088}
89
90GLuint Renderbuffer::getBlueSize() const
91{
Geoff Langd8a22582014-12-17 15:28:23 -050092 return GetInternalFormatInfo(mInternalFormat).blueBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040093}
94
95GLuint Renderbuffer::getAlphaSize() const
96{
Geoff Langd8a22582014-12-17 15:28:23 -050097 return GetInternalFormatInfo(mInternalFormat).alphaBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040098}
99
100GLuint Renderbuffer::getDepthSize() const
101{
Geoff Langd8a22582014-12-17 15:28:23 -0500102 return GetInternalFormatInfo(mInternalFormat).depthBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400103}
104
105GLuint Renderbuffer::getStencilSize() const
106{
Geoff Langd8a22582014-12-17 15:28:23 -0500107 return GetInternalFormatInfo(mInternalFormat).stencilBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400108}
109
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000110}