blob: 74ce2fa880b9715c466e2ff3c084c3a695b98f67 [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"
Jamie Madill93e13fb2014-11-06 15:27:25 -050015#include "libGLESv2/renderer/d3d/RendererD3D.h"
Geoff Lang0b7eef72014-06-12 14:10:47 -040016#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),
Geoff Lang6a1e6b92014-11-06 10:42:45 -050025 mRenderbuffer(impl),
26 mWidth(0),
27 mHeight(0),
28 mInternalFormat(GL_RGBA4),
29 mActualFormat(GL_RGBA4),
30 mSamples(0)
Shannon Woodsf108df22014-10-30 18:53:29 +000031{
Shannon Woodse2632d22014-10-17 13:08:51 -040032 ASSERT(mRenderbuffer);
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040033}
34
Cooper Partin75c42f42014-08-11 10:16:44 -070035Renderbuffer::~Renderbuffer()
36{
Shannon Woodse2632d22014-10-17 13:08:51 -040037 SafeDelete(mRenderbuffer);
Cooper Partin75c42f42014-08-11 10:16:44 -070038}
39
Geoff Langbafefdf2014-10-10 14:26:35 -040040Error Renderbuffer::setStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples)
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040041{
Geoff Langbafefdf2014-10-10 14:26:35 -040042 Error error = mRenderbuffer->setStorage(width, height, internalformat, samples);
43 if (error.isError())
44 {
45 return error;
46 }
47
Shannon Woodse2632d22014-10-17 13:08:51 -040048 mWidth = width;
49 mHeight = height;
50 mInternalFormat = internalformat;
51 mSamples = samples;
Shannon Woodse2632d22014-10-17 13:08:51 -040052 mActualFormat = mRenderbuffer->getActualFormat();
Geoff Langbafefdf2014-10-10 14:26:35 -040053
54 return Error(GL_NO_ERROR);
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040055}
56
Shannon Woodse2632d22014-10-17 13:08:51 -040057rx::RenderbufferImpl *Renderbuffer::getImplementation()
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040058{
Shannon Woodse2632d22014-10-17 13:08:51 -040059 ASSERT(mRenderbuffer);
60 return mRenderbuffer;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040061}
62
63GLsizei Renderbuffer::getWidth() const
64{
Shannon Woodse2632d22014-10-17 13:08:51 -040065 return mWidth;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040066}
67
68GLsizei Renderbuffer::getHeight() const
69{
Shannon Woodse2632d22014-10-17 13:08:51 -040070 return mHeight;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040071}
72
73GLenum Renderbuffer::getInternalFormat() const
74{
Shannon Woodse2632d22014-10-17 13:08:51 -040075 return mInternalFormat;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040076}
77
78GLenum Renderbuffer::getActualFormat() const
79{
Shannon Woodse2632d22014-10-17 13:08:51 -040080 return mActualFormat;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040081}
82
83GLsizei Renderbuffer::getSamples() const
84{
Shannon Woodse2632d22014-10-17 13:08:51 -040085 return mSamples;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040086}
87
88GLuint Renderbuffer::getRedSize() const
89{
Geoff Lang5d601382014-07-22 15:14:06 -040090 return GetInternalFormatInfo(getActualFormat()).redBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040091}
92
93GLuint Renderbuffer::getGreenSize() const
94{
Geoff Lang5d601382014-07-22 15:14:06 -040095 return GetInternalFormatInfo(getActualFormat()).greenBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040096}
97
98GLuint Renderbuffer::getBlueSize() const
99{
Geoff Lang5d601382014-07-22 15:14:06 -0400100 return GetInternalFormatInfo(getActualFormat()).blueBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400101}
102
103GLuint Renderbuffer::getAlphaSize() const
104{
Geoff Lang5d601382014-07-22 15:14:06 -0400105 return GetInternalFormatInfo(getActualFormat()).alphaBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400106}
107
108GLuint Renderbuffer::getDepthSize() const
109{
Geoff Lang5d601382014-07-22 15:14:06 -0400110 return GetInternalFormatInfo(getActualFormat()).depthBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400111}
112
113GLuint Renderbuffer::getStencilSize() const
114{
Geoff Lang5d601382014-07-22 15:14:06 -0400115 return GetInternalFormatInfo(getActualFormat()).stencilBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400116}
117
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000118}