blob: 67682ed7ba3b7841958dc0b30de87cf42dcbb35e [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
7// FramebufferImpl.h: Defines the abstract rx::DefaultAttachmentImpl class.
8
Geoff Lang0a73dd82014-11-19 16:18:08 -05009#ifndef LIBANGLE_RENDERER_FRAMBUFFERIMPL_H_
10#define LIBANGLE_RENDERER_FRAMBUFFERIMPL_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"
Geoff Lang6a1e6b92014-11-06 10:42:45 -050015
Geoff Lang9ad4bda2014-12-01 11:03:09 -050016namespace gl
17{
Geoff Langb04dc822014-12-01 12:02:02 -050018class State;
Geoff Lang54bd5a42014-12-01 12:51:04 -050019class Framebuffer;
Geoff Lang9dd95802014-12-01 11:12:59 -050020class FramebufferAttachment;
Geoff Lang9ad4bda2014-12-01 11:03:09 -050021struct Rectangle;
22}
23
Geoff Lang6a1e6b92014-11-06 10:42:45 -050024namespace rx
25{
26
27class DefaultAttachmentImpl
28{
29 public:
Jamie Madill1d57ad42015-02-02 16:57:06 -050030 DefaultAttachmentImpl() {}
Geoff Lang6a1e6b92014-11-06 10:42:45 -050031 virtual ~DefaultAttachmentImpl() {};
32
33 virtual GLsizei getWidth() const = 0;
34 virtual GLsizei getHeight() const = 0;
35 virtual GLenum getInternalFormat() const = 0;
Geoff Lang6a1e6b92014-11-06 10:42:45 -050036 virtual GLsizei getSamples() const = 0;
Jamie Madill1d57ad42015-02-02 16:57:06 -050037
38 private:
39 DISALLOW_COPY_AND_ASSIGN(DefaultAttachmentImpl);
Geoff Lang6a1e6b92014-11-06 10:42:45 -050040};
41
Geoff Langda88add2014-12-01 10:22:01 -050042class FramebufferImpl
43{
44 public:
Jamie Madill1d57ad42015-02-02 16:57:06 -050045 FramebufferImpl() {}
Geoff Langda88add2014-12-01 10:22:01 -050046 virtual ~FramebufferImpl() {};
Geoff Lang9ad4bda2014-12-01 11:03:09 -050047
Geoff Lang9dd95802014-12-01 11:12:59 -050048 virtual void setColorAttachment(size_t index, const gl::FramebufferAttachment *attachment) = 0;
49 virtual void setDepthttachment(const gl::FramebufferAttachment *attachment) = 0;
50 virtual void setStencilAttachment(const gl::FramebufferAttachment *attachment) = 0;
51 virtual void setDepthStencilAttachment(const gl::FramebufferAttachment *attachment) = 0;
52
53 virtual void setDrawBuffers(size_t count, const GLenum *buffers) = 0;
54 virtual void setReadBuffer(GLenum buffer) = 0;
55
Geoff Lang9ad4bda2014-12-01 11:03:09 -050056 virtual gl::Error invalidate(size_t count, const GLenum *attachments) = 0;
57 virtual gl::Error invalidateSub(size_t count, const GLenum *attachments, const gl::Rectangle &area) = 0;
Geoff Lang748f74e2014-12-01 11:25:34 -050058
Geoff Langb04dc822014-12-01 12:02:02 -050059 virtual gl::Error clear(const gl::State &state, GLbitfield mask) = 0;
60 virtual gl::Error clearBufferfv(const gl::State &state, GLenum buffer, GLint drawbuffer, const GLfloat *values) = 0;
61 virtual gl::Error clearBufferuiv(const gl::State &state, GLenum buffer, GLint drawbuffer, const GLuint *values) = 0;
62 virtual gl::Error clearBufferiv(const gl::State &state, GLenum buffer, GLint drawbuffer, const GLint *values) = 0;
63 virtual gl::Error clearBufferfi(const gl::State &state, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) = 0;
64
Geoff Langbce529e2014-12-01 12:48:41 -050065 virtual GLenum getImplementationColorReadFormat() const = 0;
66 virtual GLenum getImplementationColorReadType() const = 0;
67 virtual gl::Error readPixels(const gl::State &state, const gl::Rectangle &area, GLenum format, GLenum type, GLvoid *pixels) const = 0;
68
Geoff Lang54bd5a42014-12-01 12:51:04 -050069 virtual gl::Error blit(const gl::State &state, const gl::Rectangle &sourceArea, const gl::Rectangle &destArea,
70 GLbitfield mask, GLenum filter, const gl::Framebuffer *sourceFramebuffer) = 0;
71
Geoff Lang748f74e2014-12-01 11:25:34 -050072 virtual GLenum checkStatus() const = 0;
Jamie Madill1d57ad42015-02-02 16:57:06 -050073
74 private:
75 DISALLOW_COPY_AND_ASSIGN(FramebufferImpl);
Geoff Langda88add2014-12-01 10:22:01 -050076};
77
Geoff Lang6a1e6b92014-11-06 10:42:45 -050078}
79
Geoff Lang0a73dd82014-11-19 16:18:08 -050080#endif // LIBANGLE_RENDERER_FRAMBUFFERIMPL_H_