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