// // Copyright 2017 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // ClearMultiviewGL: // A helper for clearing multiview side-by-side and layered framebuffers. // #ifndef LIBANGLE_RENDERER_GL_CLEARMULTIVIEWGL_H_ #define LIBANGLE_RENDERER_GL_CLEARMULTIVIEWGL_H_ #include "angle_gl.h" #include "libANGLE/Error.h" #include "libANGLE/angletypes.h" namespace gl { class FramebufferState; } // namespace gl namespace rx { class FunctionsGL; class StateManagerGL; class ClearMultiviewGL : angle::NonCopyable { public: // Enum containing the different types of Clear* commands. enum class ClearCommandType { Clear, ClearBufferfv, ClearBufferuiv, ClearBufferiv, ClearBufferfi }; public: ClearMultiviewGL(const FunctionsGL *functions, StateManagerGL *stateManager); ~ClearMultiviewGL(); ClearMultiviewGL(const ClearMultiviewGL &rht) = delete; ClearMultiviewGL &operator=(const ClearMultiviewGL &rht) = delete; ClearMultiviewGL(ClearMultiviewGL &&rht) = delete; ClearMultiviewGL &operator=(ClearMultiviewGL &&rht) = delete; void clearMultiviewFBO(const gl::FramebufferState &state, const gl::Rectangle &scissorBase, ClearCommandType clearCommandType, GLbitfield mask, GLenum buffer, GLint drawbuffer, const uint8_t *values, GLfloat depth, GLint stencil); void initializeResources(); private: void attachTextures(const gl::FramebufferState &state, int layer); void detachTextures(const gl::FramebufferState &state); void clearLayeredFBO(const gl::FramebufferState &state, ClearCommandType clearCommandType, GLbitfield mask, GLenum buffer, GLint drawbuffer, const uint8_t *values, GLfloat depth, GLint stencil); void genericClear(ClearCommandType clearCommandType, GLbitfield mask, GLenum buffer, GLint drawbuffer, const uint8_t *values, GLfloat depth, GLint stencil); const FunctionsGL *mFunctions; StateManagerGL *mStateManager; GLuint mFramebuffer; }; } // namespace rx #endif // LIBANGLE_RENDERER_GL_CLEARMULTIVIEWGL_H_