blob: 3bbab71ed5d3900cf9d8a7f662e76d793ee265a6 [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{
27
Jamie Madillf0d10f82015-03-31 12:56:52 -040028class FramebufferImpl : angle::NonCopyable
Geoff Langda88add2014-12-01 10:22:01 -050029{
30 public:
Jamie Madill48ef11b2016-04-27 15:21:52 -040031 explicit FramebufferImpl(const gl::FramebufferState &state) : mState(state) {}
Jamie Madilld1405e52015-03-05 15:41:39 -050032 virtual ~FramebufferImpl() { }
Geoff Lang9ad4bda2014-12-01 11:03:09 -050033
Austin Kinross08332632015-05-05 13:35:47 -070034 virtual gl::Error discard(size_t count, const GLenum *attachments) = 0;
Geoff Lang9ad4bda2014-12-01 11:03:09 -050035 virtual gl::Error invalidate(size_t count, const GLenum *attachments) = 0;
36 virtual gl::Error invalidateSub(size_t count, const GLenum *attachments, const gl::Rectangle &area) = 0;
Geoff Lang748f74e2014-12-01 11:25:34 -050037
Jamie Madill8415b5f2016-04-26 13:41:39 -040038 virtual gl::Error clear(ContextImpl *context, GLbitfield mask) = 0;
39 virtual gl::Error clearBufferfv(ContextImpl *context,
Dian Xiang40281592015-11-19 18:24:44 -080040 GLenum buffer,
41 GLint drawbuffer,
42 const GLfloat *values) = 0;
Jamie Madill8415b5f2016-04-26 13:41:39 -040043 virtual gl::Error clearBufferuiv(ContextImpl *context,
Dian Xiang40281592015-11-19 18:24:44 -080044 GLenum buffer,
45 GLint drawbuffer,
46 const GLuint *values) = 0;
Jamie Madill8415b5f2016-04-26 13:41:39 -040047 virtual gl::Error clearBufferiv(ContextImpl *context,
Dian Xiang40281592015-11-19 18:24:44 -080048 GLenum buffer,
49 GLint drawbuffer,
50 const GLint *values) = 0;
Jamie Madill8415b5f2016-04-26 13:41:39 -040051 virtual gl::Error clearBufferfi(ContextImpl *context,
Dian Xiang40281592015-11-19 18:24:44 -080052 GLenum buffer,
53 GLint drawbuffer,
54 GLfloat depth,
55 GLint stencil) = 0;
Geoff Langb04dc822014-12-01 12:02:02 -050056
Geoff Langbce529e2014-12-01 12:48:41 -050057 virtual GLenum getImplementationColorReadFormat() const = 0;
58 virtual GLenum getImplementationColorReadType() const = 0;
Jamie Madill8415b5f2016-04-26 13:41:39 -040059 virtual gl::Error readPixels(ContextImpl *context,
60 const gl::Rectangle &area,
61 GLenum format,
62 GLenum type,
63 GLvoid *pixels) const = 0;
Geoff Langbce529e2014-12-01 12:48:41 -050064
Jamie Madill8415b5f2016-04-26 13:41:39 -040065 virtual gl::Error blit(ContextImpl *context,
66 const gl::Rectangle &sourceArea,
67 const gl::Rectangle &destArea,
68 GLbitfield mask,
69 GLenum filter) = 0;
Geoff Lang54bd5a42014-12-01 12:51:04 -050070
Jamie Madillcc86d642015-11-24 13:00:07 -050071 virtual bool checkStatus() const = 0;
Jamie Madill1d57ad42015-02-02 16:57:06 -050072
Jamie Madill60ec6ea2016-01-22 15:27:19 -050073 virtual void syncState(const gl::Framebuffer::DirtyBits &dirtyBits) = 0;
74
JiangYizhoubddc46b2016-12-09 09:50:51 +080075 virtual gl::Error getSamplePosition(size_t index, GLfloat *xy) const = 0;
76
Jamie Madillab9f9c32017-01-17 17:47:34 -050077 const gl::FramebufferState &getState() const { return mState; }
78
Jamie Madilld1405e52015-03-05 15:41:39 -050079 protected:
Jamie Madill48ef11b2016-04-27 15:21:52 -040080 const gl::FramebufferState &mState;
Geoff Langda88add2014-12-01 10:22:01 -050081};
82
Geoff Lang6a1e6b92014-11-06 10:42:45 -050083}
84
Jamie Madill811b6352015-02-09 10:17:09 -050085#endif // LIBANGLE_RENDERER_FRAMEBUFFERIMPL_H_