blob: c258d7c05d8e1f2d9f517854fda931bc96f55f59 [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
Geoff Lang9ad4bda2014-12-01 11:03:09 -050012#include "libANGLE/Error.h"
13
Geoff Lang6a1e6b92014-11-06 10:42:45 -050014#include "angle_gl.h"
15
Geoff Lang9ad4bda2014-12-01 11:03:09 -050016namespace gl
17{
Geoff Langb04dc822014-12-01 12:02:02 -050018class State;
Geoff Lang9dd95802014-12-01 11:12:59 -050019class FramebufferAttachment;
Geoff Lang9ad4bda2014-12-01 11:03:09 -050020struct Rectangle;
21}
22
Geoff Lang6a1e6b92014-11-06 10:42:45 -050023namespace rx
24{
25
26class DefaultAttachmentImpl
27{
28 public:
29 virtual ~DefaultAttachmentImpl() {};
30
31 virtual GLsizei getWidth() const = 0;
32 virtual GLsizei getHeight() const = 0;
33 virtual GLenum getInternalFormat() const = 0;
34 virtual GLenum getActualFormat() const = 0;
35 virtual GLsizei getSamples() const = 0;
36};
37
Geoff Langda88add2014-12-01 10:22:01 -050038class FramebufferImpl
39{
40 public:
41 virtual ~FramebufferImpl() {};
Geoff Lang9ad4bda2014-12-01 11:03:09 -050042
Geoff Lang9dd95802014-12-01 11:12:59 -050043 virtual void setColorAttachment(size_t index, const gl::FramebufferAttachment *attachment) = 0;
44 virtual void setDepthttachment(const gl::FramebufferAttachment *attachment) = 0;
45 virtual void setStencilAttachment(const gl::FramebufferAttachment *attachment) = 0;
46 virtual void setDepthStencilAttachment(const gl::FramebufferAttachment *attachment) = 0;
47
48 virtual void setDrawBuffers(size_t count, const GLenum *buffers) = 0;
49 virtual void setReadBuffer(GLenum buffer) = 0;
50
Geoff Lang9ad4bda2014-12-01 11:03:09 -050051 virtual gl::Error invalidate(size_t count, const GLenum *attachments) = 0;
52 virtual gl::Error invalidateSub(size_t count, const GLenum *attachments, const gl::Rectangle &area) = 0;
Geoff Lang748f74e2014-12-01 11:25:34 -050053
Geoff Langb04dc822014-12-01 12:02:02 -050054 virtual gl::Error clear(const gl::State &state, GLbitfield mask) = 0;
55 virtual gl::Error clearBufferfv(const gl::State &state, GLenum buffer, GLint drawbuffer, const GLfloat *values) = 0;
56 virtual gl::Error clearBufferuiv(const gl::State &state, GLenum buffer, GLint drawbuffer, const GLuint *values) = 0;
57 virtual gl::Error clearBufferiv(const gl::State &state, GLenum buffer, GLint drawbuffer, const GLint *values) = 0;
58 virtual gl::Error clearBufferfi(const gl::State &state, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) = 0;
59
Geoff Lang748f74e2014-12-01 11:25:34 -050060 virtual GLenum checkStatus() const = 0;
Geoff Langda88add2014-12-01 10:22:01 -050061};
62
Geoff Lang6a1e6b92014-11-06 10:42:45 -050063}
64
Geoff Lang0a73dd82014-11-19 16:18:08 -050065#endif // LIBANGLE_RENDERER_FRAMBUFFERIMPL_H_