blob: 3a1e78c8eb145f41f06057975b2f587f858381ab [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
10#include "libGLESv2/renderer/d3d/RenderbufferD3D.h"
11
12#include "libGLESv2/renderer/Renderer.h"
13#include "libGLESv2/renderer/RenderTarget.h"
14
15namespace rx
16{
17RenderbufferD3D::RenderbufferD3D(Renderer *renderer) : mRenderer(renderer)
18{
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
33void RenderbufferD3D::setStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples)
34{
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
45 RenderTarget *newRT = mRenderer->createRenderTarget(width, height, creationFormat, samples);
46 SafeDelete(mRenderTarget);
47 mRenderTarget = newRT;
48}
49
50void RenderbufferD3D::setStorage(SwapChain *swapChain, bool depth)
51{
52 RenderTarget *newRT = mRenderer->createRenderTarget(swapChain, depth);
53 SafeDelete(mRenderTarget);
54 mRenderTarget = newRT;
55}
56
57GLsizei RenderbufferD3D::getWidth() const
58{
59 return (mRenderTarget ? mRenderTarget->getWidth() : 0);
60}
61
62GLsizei RenderbufferD3D::getHeight() const
63{
64 return (mRenderTarget ? mRenderTarget->getHeight() : 0);
65}
66
67GLenum RenderbufferD3D::getInternalFormat() const
68{
69 return (mRenderTarget ? mRenderTarget->getInternalFormat() : GL_RGBA4);
70}
71
72GLenum RenderbufferD3D::getActualFormat() const
73{
74 return (mRenderTarget ? mRenderTarget->getActualFormat() : GL_RGBA4);
75}
76
77GLsizei RenderbufferD3D::getSamples() const
78{
79 return (mRenderTarget ? mRenderTarget->getSamples() : 0);
80}
81
82RenderTarget *RenderbufferD3D::getRenderTarget()
83{
84 return mRenderTarget;
85}
86
87unsigned int RenderbufferD3D::getRenderTargetSerial() const
88{
89 return (mRenderTarget ? mRenderTarget->getSerial() : 0);
90}
91
92}