1 //
2 // Copyright 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 // RenderbufferImpl.h: Defines the abstract class gl::RenderbufferImpl
8
9 #ifndef LIBANGLE_RENDERER_RENDERBUFFERIMPL_H_
10 #define LIBANGLE_RENDERER_RENDERBUFFERIMPL_H_
11
12 #include "angle_gl.h"
13 #include "common/angleutils.h"
14 #include "libANGLE/Error.h"
15 #include "libANGLE/angletypes.h"
16 #include "libANGLE/renderer/FramebufferAttachmentObjectImpl.h"
17
18 namespace gl
19 {
20 struct PixelPackState;
21 class RenderbufferState;
22 } // namespace gl
23
24 namespace egl
25 {
26 class Image;
27 } // namespace egl
28
29 namespace rx
30 {
31
32 class RenderbufferImpl : public FramebufferAttachmentObjectImpl
33 {
34 public:
RenderbufferImpl(const gl::RenderbufferState & state)35 RenderbufferImpl(const gl::RenderbufferState &state) : mState(state) {}
~RenderbufferImpl()36 ~RenderbufferImpl() override {}
onDestroy(const gl::Context * context)37 virtual void onDestroy(const gl::Context *context) {}
38
39 virtual angle::Result setStorage(const gl::Context *context,
40 GLenum internalformat,
41 GLsizei width,
42 GLsizei height) = 0;
43 virtual angle::Result setStorageMultisample(const gl::Context *context,
44 GLsizei samples,
45 GLenum internalformat,
46 GLsizei width,
47 GLsizei height,
48 gl::MultisamplingMode mode) = 0;
49 virtual angle::Result setStorageEGLImageTarget(const gl::Context *context,
50 egl::Image *image) = 0;
51
52 virtual angle::Result copyRenderbufferSubData(const gl::Context *context,
53 const gl::Renderbuffer *srcBuffer,
54 GLint srcLevel,
55 GLint srcX,
56 GLint srcY,
57 GLint srcZ,
58 GLint dstLevel,
59 GLint dstX,
60 GLint dstY,
61 GLint dstZ,
62 GLsizei srcWidth,
63 GLsizei srcHeight,
64 GLsizei srcDepth);
65
66 virtual angle::Result copyTextureSubData(const gl::Context *context,
67 const gl::Texture *srcTexture,
68 GLint srcLevel,
69 GLint srcX,
70 GLint srcY,
71 GLint srcZ,
72 GLint dstLevel,
73 GLint dstX,
74 GLint dstY,
75 GLint dstZ,
76 GLsizei srcWidth,
77 GLsizei srcHeight,
78 GLsizei srcDepth);
79
80 virtual GLenum getColorReadFormat(const gl::Context *context);
81 virtual GLenum getColorReadType(const gl::Context *context);
82
83 virtual angle::Result getRenderbufferImage(const gl::Context *context,
84 const gl::PixelPackState &packState,
85 gl::Buffer *packBuffer,
86 GLenum format,
87 GLenum type,
88 void *pixels);
89
90 // Override if accurate native memory size information is available
91 virtual GLint getMemorySize() const;
92
93 virtual angle::Result onLabelUpdate(const gl::Context *context);
94
95 protected:
96 const gl::RenderbufferState &mState;
97 };
98
copyRenderbufferSubData(const gl::Context * context,const gl::Renderbuffer * srcBuffer,GLint srcLevel,GLint srcX,GLint srcY,GLint srcZ,GLint dstLevel,GLint dstX,GLint dstY,GLint dstZ,GLsizei srcWidth,GLsizei srcHeight,GLsizei srcDepth)99 inline angle::Result RenderbufferImpl::copyRenderbufferSubData(const gl::Context *context,
100 const gl::Renderbuffer *srcBuffer,
101 GLint srcLevel,
102 GLint srcX,
103 GLint srcY,
104 GLint srcZ,
105 GLint dstLevel,
106 GLint dstX,
107 GLint dstY,
108 GLint dstZ,
109 GLsizei srcWidth,
110 GLsizei srcHeight,
111 GLsizei srcDepth)
112 {
113 UNREACHABLE();
114 return angle::Result::Stop;
115 }
116
copyTextureSubData(const gl::Context * context,const gl::Texture * srcTexture,GLint srcLevel,GLint srcX,GLint srcY,GLint srcZ,GLint dstLevel,GLint dstX,GLint dstY,GLint dstZ,GLsizei srcWidth,GLsizei srcHeight,GLsizei srcDepth)117 inline angle::Result RenderbufferImpl::copyTextureSubData(const gl::Context *context,
118 const gl::Texture *srcTexture,
119 GLint srcLevel,
120 GLint srcX,
121 GLint srcY,
122 GLint srcZ,
123 GLint dstLevel,
124 GLint dstX,
125 GLint dstY,
126 GLint dstZ,
127 GLsizei srcWidth,
128 GLsizei srcHeight,
129 GLsizei srcDepth)
130 {
131 UNREACHABLE();
132 return angle::Result::Stop;
133 }
134
getMemorySize()135 inline GLint RenderbufferImpl::getMemorySize() const
136 {
137 return 0;
138 }
139
getColorReadFormat(const gl::Context * context)140 inline GLenum RenderbufferImpl::getColorReadFormat(const gl::Context *context)
141 {
142 UNREACHABLE();
143 return GL_NONE;
144 }
145
getColorReadType(const gl::Context * context)146 inline GLenum RenderbufferImpl::getColorReadType(const gl::Context *context)
147 {
148 UNREACHABLE();
149 return GL_NONE;
150 }
151
getRenderbufferImage(const gl::Context * context,const gl::PixelPackState & packState,gl::Buffer * packBuffer,GLenum format,GLenum type,void * pixels)152 inline angle::Result RenderbufferImpl::getRenderbufferImage(const gl::Context *context,
153 const gl::PixelPackState &packState,
154 gl::Buffer *packBuffer,
155 GLenum format,
156 GLenum type,
157 void *pixels)
158 {
159 UNREACHABLE();
160 return angle::Result::Stop;
161 }
162 } // namespace rx
163
164 #endif // LIBANGLE_RENDERER_RENDERBUFFERIMPL_H_
165