1 //
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.h: Defines the RenderbufferD3D class which implements RenderbufferImpl.
8 
9 #ifndef LIBANGLE_RENDERER_D3D_RENDERBUFFERD3D_H_
10 #define LIBANGLE_RENDERER_D3D_RENDERBUFFERD3D_H_
11 
12 #include "angle_gl.h"
13 
14 #include "common/angleutils.h"
15 #include "libANGLE/renderer/RenderbufferImpl.h"
16 
17 namespace rx
18 {
19 class EGLImageD3D;
20 class RendererD3D;
21 class RenderTargetD3D;
22 class SwapChainD3D;
23 
24 class RenderbufferD3D : public RenderbufferImpl
25 {
26   public:
27     RenderbufferD3D(RendererD3D *renderer);
28     ~RenderbufferD3D() override;
29 
30     gl::Error onDestroy(const gl::Context *context) override;
31 
32     gl::Error setStorage(const gl::Context *context,
33                          GLenum internalformat,
34                          size_t width,
35                          size_t height) override;
36     gl::Error setStorageMultisample(const gl::Context *context,
37                                     size_t samples,
38                                     GLenum internalformat,
39                                     size_t width,
40                                     size_t height) override;
41     gl::Error setStorageEGLImageTarget(const gl::Context *context, egl::Image *image) override;
42 
43     gl::Error getRenderTarget(const gl::Context *context, RenderTargetD3D **outRenderTarget);
44     gl::Error getAttachmentRenderTarget(const gl::Context *context,
45                                         GLenum binding,
46                                         const gl::ImageIndex &imageIndex,
47                                         FramebufferAttachmentRenderTarget **rtOut) override;
48 
49     gl::Error initializeContents(const gl::Context *context,
50                                  const gl::ImageIndex &imageIndex) override;
51 
52   private:
53     void deleteRenderTarget(const gl::Context *context);
54 
55     RendererD3D *mRenderer;
56     RenderTargetD3D *mRenderTarget;
57     EGLImageD3D *mImage;
58 };
59 
60 }
61 
62 #endif // LIBANGLE_RENDERER_D3D_RENDERBUFFERD3D_H_
63