blob: b72695b783b201b80d67d9014d3856df3ce49a9b [file] [log] [blame]
Shannon Woodse2632d22014-10-17 13:08:51 -04001//
2// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7// RenderbufferD3d.cpp: Implements the RenderbufferD3D class, a specialization of RenderbufferImpl
8
9
Geoff Lang2b5420c2014-11-19 14:20:15 -050010#include "libANGLE/renderer/d3d/RenderbufferD3D.h"
Shannon Woodse2632d22014-10-17 13:08:51 -040011
Geoff Lang2b5420c2014-11-19 14:20:15 -050012#include "libANGLE/renderer/d3d/RendererD3D.h"
13#include "libANGLE/renderer/RenderTarget.h"
Shannon Woodse2632d22014-10-17 13:08:51 -040014
15namespace rx
16{
Jamie Madill93e13fb2014-11-06 15:27:25 -050017RenderbufferD3D::RenderbufferD3D(RendererD3D *renderer) : mRenderer(renderer)
Shannon Woodse2632d22014-10-17 13:08:51 -040018{
19 mRenderTarget = NULL;
20}
21
22RenderbufferD3D::~RenderbufferD3D()
23{
24 SafeDelete(mRenderTarget);
25}
26
27RenderbufferD3D *RenderbufferD3D::makeRenderbufferD3D(RenderbufferImpl *renderbuffer)
28{
29 ASSERT(HAS_DYNAMIC_TYPE(RenderbufferD3D*, renderbuffer));
30 return static_cast<RenderbufferD3D*>(renderbuffer);
31}
32
Geoff Langbafefdf2014-10-10 14:26:35 -040033gl::Error RenderbufferD3D::setStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples)
Shannon Woodse2632d22014-10-17 13:08:51 -040034{
35 // If the renderbuffer parameters are queried, the calling function
36 // will expect one of the valid renderbuffer formats for use in
37 // glRenderbufferStorage, but we should create depth and stencil buffers
38 // as DEPTH24_STENCIL8
39 GLenum creationFormat = internalformat;
40 if (internalformat == GL_DEPTH_COMPONENT16 || internalformat == GL_STENCIL_INDEX8)
41 {
42 creationFormat = GL_DEPTH24_STENCIL8_OES;
43 }
44
Geoff Langbafefdf2014-10-10 14:26:35 -040045 RenderTarget *newRT = NULL;
46 gl::Error error = mRenderer->createRenderTarget(width, height, creationFormat, samples, &newRT);
47 if (error.isError())
48 {
49 return error;
50 }
51
Shannon Woodse2632d22014-10-17 13:08:51 -040052 SafeDelete(mRenderTarget);
53 mRenderTarget = newRT;
Geoff Langbafefdf2014-10-10 14:26:35 -040054
55 return gl::Error(GL_NO_ERROR);
Shannon Woodse2632d22014-10-17 13:08:51 -040056}
57
Shannon Woodse2632d22014-10-17 13:08:51 -040058GLenum RenderbufferD3D::getActualFormat() const
59{
60 return (mRenderTarget ? mRenderTarget->getActualFormat() : GL_RGBA4);
61}
62
Shannon Woodse2632d22014-10-17 13:08:51 -040063RenderTarget *RenderbufferD3D::getRenderTarget()
64{
65 return mRenderTarget;
66}
67
68unsigned int RenderbufferD3D::getRenderTargetSerial() const
69{
70 return (mRenderTarget ? mRenderTarget->getSerial() : 0);
71}
72
73}