blob: 64b01e8a1fc579ae76c5dd40ccbf2bda7701eff6 [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 Madill28291c52015-03-16 10:46:54 -040031 explicit FramebufferImpl(const gl::Framebuffer::Data &data) : mData(data) { }
Jamie Madilld1405e52015-03-05 15:41:39 -050032 virtual ~FramebufferImpl() { }
Geoff Lang9ad4bda2014-12-01 11:03:09 -050033
Geoff Lang9dd95802014-12-01 11:12:59 -050034 virtual void setColorAttachment(size_t index, const gl::FramebufferAttachment *attachment) = 0;
Jamie Madillf90353e2015-03-05 19:37:58 -050035 virtual void setDepthAttachment(const gl::FramebufferAttachment *attachment) = 0;
Geoff Lang9dd95802014-12-01 11:12:59 -050036 virtual void setStencilAttachment(const gl::FramebufferAttachment *attachment) = 0;
37 virtual void setDepthStencilAttachment(const gl::FramebufferAttachment *attachment) = 0;
38
39 virtual void setDrawBuffers(size_t count, const GLenum *buffers) = 0;
40 virtual void setReadBuffer(GLenum buffer) = 0;
41
Geoff Lang9ad4bda2014-12-01 11:03:09 -050042 virtual gl::Error invalidate(size_t count, const GLenum *attachments) = 0;
43 virtual gl::Error invalidateSub(size_t count, const GLenum *attachments, const gl::Rectangle &area) = 0;
Geoff Lang748f74e2014-12-01 11:25:34 -050044
Geoff Langb04dc822014-12-01 12:02:02 -050045 virtual gl::Error clear(const gl::State &state, GLbitfield mask) = 0;
46 virtual gl::Error clearBufferfv(const gl::State &state, GLenum buffer, GLint drawbuffer, const GLfloat *values) = 0;
47 virtual gl::Error clearBufferuiv(const gl::State &state, GLenum buffer, GLint drawbuffer, const GLuint *values) = 0;
48 virtual gl::Error clearBufferiv(const gl::State &state, GLenum buffer, GLint drawbuffer, const GLint *values) = 0;
49 virtual gl::Error clearBufferfi(const gl::State &state, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) = 0;
50
Geoff Langbce529e2014-12-01 12:48:41 -050051 virtual GLenum getImplementationColorReadFormat() const = 0;
52 virtual GLenum getImplementationColorReadType() const = 0;
53 virtual gl::Error readPixels(const gl::State &state, const gl::Rectangle &area, GLenum format, GLenum type, GLvoid *pixels) const = 0;
54
Geoff Lang54bd5a42014-12-01 12:51:04 -050055 virtual gl::Error blit(const gl::State &state, const gl::Rectangle &sourceArea, const gl::Rectangle &destArea,
56 GLbitfield mask, GLenum filter, const gl::Framebuffer *sourceFramebuffer) = 0;
57
Geoff Lang748f74e2014-12-01 11:25:34 -050058 virtual GLenum checkStatus() const = 0;
Jamie Madill1d57ad42015-02-02 16:57:06 -050059
Jamie Madilld1405e52015-03-05 15:41:39 -050060 const gl::Framebuffer::Data &getData() const { return mData; }
61
62 protected:
63 const gl::Framebuffer::Data &mData;
Geoff Langda88add2014-12-01 10:22:01 -050064};
65
Geoff Lang6a1e6b92014-11-06 10:42:45 -050066}
67
Jamie Madill811b6352015-02-09 10:17:09 -050068#endif // LIBANGLE_RENDERER_FRAMEBUFFERIMPL_H_