blob: 756b596416627cf47a8be231a845422b283a8182 [file] [log] [blame]
Geoff Lang6a1e6b92014-11-06 10:42:45 -05001//
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
Jamie Madill811b6352015-02-09 10:17:09 -05007// FramebufferImpl.h: Defines the abstract rx::FramebufferImpl class.
Geoff Lang6a1e6b92014-11-06 10:42:45 -05008
Jamie Madill811b6352015-02-09 10:17:09 -05009#ifndef LIBANGLE_RENDERER_FRAMEBUFFERIMPL_H_
10#define LIBANGLE_RENDERER_FRAMEBUFFERIMPL_H_
Geoff Lang6a1e6b92014-11-06 10:42:45 -050011
12#include "angle_gl.h"
Jamie Madill1d57ad42015-02-02 16:57:06 -050013#include "common/angleutils.h"
14#include "libANGLE/Error.h"
Jamie Madilld1405e52015-03-05 15:41:39 -050015#include "libANGLE/Framebuffer.h"
Geoff Lang6a1e6b92014-11-06 10:42:45 -050016
Geoff Lang9ad4bda2014-12-01 11:03:09 -050017namespace gl
18{
Geoff Langb04dc822014-12-01 12:02:02 -050019class State;
Geoff Lang54bd5a42014-12-01 12:51:04 -050020class Framebuffer;
Geoff Lang9dd95802014-12-01 11:12:59 -050021class FramebufferAttachment;
Geoff Lang9ad4bda2014-12-01 11:03:09 -050022struct Rectangle;
23}
24
Geoff Lang6a1e6b92014-11-06 10:42:45 -050025namespace rx
26{
Jamie Madill6c1f6712017-02-14 19:08:04 -050027class DisplayImpl;
Geoff Lang6a1e6b92014-11-06 10:42:45 -050028
Jamie Madillf0d10f82015-03-31 12:56:52 -040029class FramebufferImpl : angle::NonCopyable
Geoff Langda88add2014-12-01 10:22:01 -050030{
31 public:
Jamie Madill48ef11b2016-04-27 15:21:52 -040032 explicit FramebufferImpl(const gl::FramebufferState &state) : mState(state) {}
Jamie Madill231c7f52017-04-26 13:45:37 -040033 virtual ~FramebufferImpl() {}
Jamie Madillc564c072017-06-01 12:45:42 -040034 virtual void destroy(const gl::Context *context) {}
Geoff Lang9ad4bda2014-12-01 11:03:09 -050035
Jamie Madill4928b7c2017-06-20 12:57:39 -040036 virtual gl::Error discard(const gl::Context *context,
37 size_t count,
38 const GLenum *attachments) = 0;
39 virtual gl::Error invalidate(const gl::Context *context,
40 size_t count,
41 const GLenum *attachments) = 0;
42 virtual gl::Error invalidateSub(const gl::Context *context,
43 size_t count,
Jamie Madill231c7f52017-04-26 13:45:37 -040044 const GLenum *attachments,
45 const gl::Rectangle &area) = 0;
Geoff Lang748f74e2014-12-01 11:25:34 -050046
Jamie Madillc564c072017-06-01 12:45:42 -040047 virtual gl::Error clear(const gl::Context *context, GLbitfield mask) = 0;
48 virtual gl::Error clearBufferfv(const gl::Context *context,
Dian Xiang40281592015-11-19 18:24:44 -080049 GLenum buffer,
50 GLint drawbuffer,
51 const GLfloat *values) = 0;
Jamie Madillc564c072017-06-01 12:45:42 -040052 virtual gl::Error clearBufferuiv(const gl::Context *context,
Dian Xiang40281592015-11-19 18:24:44 -080053 GLenum buffer,
54 GLint drawbuffer,
55 const GLuint *values) = 0;
Jamie Madillc564c072017-06-01 12:45:42 -040056 virtual gl::Error clearBufferiv(const gl::Context *context,
Dian Xiang40281592015-11-19 18:24:44 -080057 GLenum buffer,
58 GLint drawbuffer,
59 const GLint *values) = 0;
Jamie Madillc564c072017-06-01 12:45:42 -040060 virtual gl::Error clearBufferfi(const gl::Context *context,
Dian Xiang40281592015-11-19 18:24:44 -080061 GLenum buffer,
62 GLint drawbuffer,
63 GLfloat depth,
64 GLint stencil) = 0;
Geoff Langb04dc822014-12-01 12:02:02 -050065
Jamie Madill4928b7c2017-06-20 12:57:39 -040066 virtual GLenum getImplementationColorReadFormat(const gl::Context *context) const = 0;
67 virtual GLenum getImplementationColorReadType(const gl::Context *context) const = 0;
Jamie Madillc564c072017-06-01 12:45:42 -040068 virtual gl::Error readPixels(const gl::Context *context,
Jamie Madill8415b5f2016-04-26 13:41:39 -040069 const gl::Rectangle &area,
70 GLenum format,
71 GLenum type,
Jamie Madilld4826152017-09-21 11:18:59 -040072 void *pixels) = 0;
Geoff Langbce529e2014-12-01 12:48:41 -050073
Jamie Madillc564c072017-06-01 12:45:42 -040074 virtual gl::Error blit(const gl::Context *context,
Jamie Madill8415b5f2016-04-26 13:41:39 -040075 const gl::Rectangle &sourceArea,
76 const gl::Rectangle &destArea,
77 GLbitfield mask,
78 GLenum filter) = 0;
Geoff Lang54bd5a42014-12-01 12:51:04 -050079
Kenneth Russellce8602a2017-10-03 18:23:08 -070080 virtual bool checkStatus(const gl::Context *context) const = 0;
Jamie Madill1d57ad42015-02-02 16:57:06 -050081
Jamie Madill6f755b22018-10-09 12:48:54 -040082 virtual angle::Result syncState(const gl::Context *context,
83 const gl::Framebuffer::DirtyBits &dirtyBits) = 0;
Jamie Madill60ec6ea2016-01-22 15:27:19 -050084
Geoff Lang13455072018-05-09 11:24:43 -040085 virtual gl::Error getSamplePosition(const gl::Context *context,
86 size_t index,
87 GLfloat *xy) const = 0;
JiangYizhoubddc46b2016-12-09 09:50:51 +080088
Jamie Madillab9f9c32017-01-17 17:47:34 -050089 const gl::FramebufferState &getState() const { return mState; }
90
Jamie Madilld1405e52015-03-05 15:41:39 -050091 protected:
Jamie Madill48ef11b2016-04-27 15:21:52 -040092 const gl::FramebufferState &mState;
Geoff Langda88add2014-12-01 10:22:01 -050093};
Geoff Lang6a1e6b92014-11-06 10:42:45 -050094}
95
Jamie Madill231c7f52017-04-26 13:45:37 -040096#endif // LIBANGLE_RENDERER_FRAMEBUFFERIMPL_H_