blob: ee6acc11bc372584b0a9a2b82feae4a659021dea [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),
28 mActualFormat(GL_RGBA4),
29 mSamples(0)
Shannon Woodsf108df22014-10-30 18:53:29 +000030{
Shannon Woodse2632d22014-10-17 13:08:51 -040031 ASSERT(mRenderbuffer);
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040032}
33
Cooper Partin75c42f42014-08-11 10:16:44 -070034Renderbuffer::~Renderbuffer()
35{
Shannon Woodse2632d22014-10-17 13:08:51 -040036 SafeDelete(mRenderbuffer);
Cooper Partin75c42f42014-08-11 10:16:44 -070037}
38
Geoff Langbafefdf2014-10-10 14:26:35 -040039Error Renderbuffer::setStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples)
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040040{
Geoff Langbafefdf2014-10-10 14:26:35 -040041 Error error = mRenderbuffer->setStorage(width, height, internalformat, samples);
42 if (error.isError())
43 {
44 return error;
45 }
46
Shannon Woodse2632d22014-10-17 13:08:51 -040047 mWidth = width;
48 mHeight = height;
49 mInternalFormat = internalformat;
50 mSamples = samples;
Shannon Woodse2632d22014-10-17 13:08:51 -040051 mActualFormat = mRenderbuffer->getActualFormat();
Geoff Langbafefdf2014-10-10 14:26:35 -040052
53 return Error(GL_NO_ERROR);
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040054}
55
Shannon Woodse2632d22014-10-17 13:08:51 -040056rx::RenderbufferImpl *Renderbuffer::getImplementation()
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040057{
Shannon Woodse2632d22014-10-17 13:08:51 -040058 ASSERT(mRenderbuffer);
59 return mRenderbuffer;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040060}
61
62GLsizei Renderbuffer::getWidth() const
63{
Shannon Woodse2632d22014-10-17 13:08:51 -040064 return mWidth;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040065}
66
67GLsizei Renderbuffer::getHeight() const
68{
Shannon Woodse2632d22014-10-17 13:08:51 -040069 return mHeight;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040070}
71
72GLenum Renderbuffer::getInternalFormat() const
73{
Shannon Woodse2632d22014-10-17 13:08:51 -040074 return mInternalFormat;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040075}
76
77GLenum Renderbuffer::getActualFormat() const
78{
Shannon Woodse2632d22014-10-17 13:08:51 -040079 return mActualFormat;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040080}
81
82GLsizei Renderbuffer::getSamples() const
83{
Shannon Woodse2632d22014-10-17 13:08:51 -040084 return mSamples;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040085}
86
87GLuint Renderbuffer::getRedSize() const
88{
Geoff Lang5d601382014-07-22 15:14:06 -040089 return GetInternalFormatInfo(getActualFormat()).redBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040090}
91
92GLuint Renderbuffer::getGreenSize() const
93{
Geoff Lang5d601382014-07-22 15:14:06 -040094 return GetInternalFormatInfo(getActualFormat()).greenBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040095}
96
97GLuint Renderbuffer::getBlueSize() const
98{
Geoff Lang5d601382014-07-22 15:14:06 -040099 return GetInternalFormatInfo(getActualFormat()).blueBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400100}
101
102GLuint Renderbuffer::getAlphaSize() const
103{
Geoff Lang5d601382014-07-22 15:14:06 -0400104 return GetInternalFormatInfo(getActualFormat()).alphaBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400105}
106
107GLuint Renderbuffer::getDepthSize() const
108{
Geoff Lang5d601382014-07-22 15:14:06 -0400109 return GetInternalFormatInfo(getActualFormat()).depthBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400110}
111
112GLuint Renderbuffer::getStencilSize() const
113{
Geoff Lang5d601382014-07-22 15:14:06 -0400114 return GetInternalFormatInfo(getActualFormat()).stencilBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400115}
116
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000117}