blob: 85b920bc1692837cbce2bd1f2b6bc6a76e7277cf [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"
Geoff Langc2e75af2015-01-05 14:26:24 -050017#include "libANGLE/renderer/d3d/RenderTargetD3D.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000018
19namespace gl
20{
Geoff Lang4274f7d2015-08-05 23:07:38 +000021
Shannon Woodse2632d22014-10-17 13:08:51 -040022Renderbuffer::Renderbuffer(rx::RenderbufferImpl *impl, GLuint id)
Geoff Lang4274f7d2015-08-05 23:07:38 +000023 : FramebufferAttachmentObject(id),
24 mRenderbuffer(impl),
25 mWidth(0),
26 mHeight(0),
27 mInternalFormat(GL_RGBA4),
28 mSamples(0)
Shannon Woodsf108df22014-10-30 18:53:29 +000029{
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040030}
31
Cooper Partin75c42f42014-08-11 10:16:44 -070032Renderbuffer::~Renderbuffer()
33{
Shannon Woodse2632d22014-10-17 13:08:51 -040034 SafeDelete(mRenderbuffer);
Cooper Partin75c42f42014-08-11 10:16:44 -070035}
36
Geoff Langa08e1bd2015-03-24 10:17:18 -040037Error Renderbuffer::setStorage(GLenum internalformat, size_t width, size_t height)
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040038{
Geoff Langa08e1bd2015-03-24 10:17:18 -040039 Error error = mRenderbuffer->setStorage(internalformat, width, height);
40 if (error.isError())
41 {
42 return error;
43 }
44
45 mWidth = width;
46 mHeight = height;
47 mInternalFormat = internalformat;
48 mSamples = 0;
49
50 return Error(GL_NO_ERROR);
51}
52
53Error Renderbuffer::setStorageMultisample(size_t samples, GLenum internalformat, size_t width, size_t height)
54{
55 Error error = mRenderbuffer->setStorageMultisample(samples, internalformat, width, height);
Geoff Langbafefdf2014-10-10 14:26:35 -040056 if (error.isError())
57 {
58 return error;
59 }
60
Shannon Woodse2632d22014-10-17 13:08:51 -040061 mWidth = width;
62 mHeight = height;
63 mInternalFormat = internalformat;
64 mSamples = samples;
Geoff Langbafefdf2014-10-10 14:26:35 -040065
66 return Error(GL_NO_ERROR);
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040067}
68
Shannon Woodse2632d22014-10-17 13:08:51 -040069rx::RenderbufferImpl *Renderbuffer::getImplementation()
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040070{
Shannon Woodse2632d22014-10-17 13:08:51 -040071 ASSERT(mRenderbuffer);
72 return mRenderbuffer;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040073}
74
Geoff Langcd69f1c2015-03-18 14:33:23 -040075const rx::RenderbufferImpl *Renderbuffer::getImplementation() const
76{
77 return mRenderbuffer;
78}
79
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040080GLsizei Renderbuffer::getWidth() const
81{
Shannon Woodse2632d22014-10-17 13:08:51 -040082 return mWidth;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040083}
84
85GLsizei Renderbuffer::getHeight() const
86{
Shannon Woodse2632d22014-10-17 13:08:51 -040087 return mHeight;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040088}
89
90GLenum Renderbuffer::getInternalFormat() const
91{
Shannon Woodse2632d22014-10-17 13:08:51 -040092 return mInternalFormat;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040093}
94
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040095GLsizei Renderbuffer::getSamples() const
96{
Shannon Woodse2632d22014-10-17 13:08:51 -040097 return mSamples;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -040098}
99
100GLuint Renderbuffer::getRedSize() const
101{
Geoff Langd8a22582014-12-17 15:28:23 -0500102 return GetInternalFormatInfo(mInternalFormat).redBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400103}
104
105GLuint Renderbuffer::getGreenSize() const
106{
Geoff Langd8a22582014-12-17 15:28:23 -0500107 return GetInternalFormatInfo(mInternalFormat).greenBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400108}
109
110GLuint Renderbuffer::getBlueSize() const
111{
Geoff Langd8a22582014-12-17 15:28:23 -0500112 return GetInternalFormatInfo(mInternalFormat).blueBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400113}
114
115GLuint Renderbuffer::getAlphaSize() const
116{
Geoff Langd8a22582014-12-17 15:28:23 -0500117 return GetInternalFormatInfo(mInternalFormat).alphaBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400118}
119
120GLuint Renderbuffer::getDepthSize() const
121{
Geoff Langd8a22582014-12-17 15:28:23 -0500122 return GetInternalFormatInfo(mInternalFormat).depthBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400123}
124
125GLuint Renderbuffer::getStencilSize() const
126{
Geoff Langd8a22582014-12-17 15:28:23 -0500127 return GetInternalFormatInfo(mInternalFormat).stencilBits;
Jamie Madill6c7b4ad2014-06-16 10:33:59 -0400128}
129
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +0000130}