1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2017 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker // ClearMultiviewGL: 7*8975f5c5SAndroid Build Coastguard Worker // A helper for clearing multiview side-by-side and layered framebuffers. 8*8975f5c5SAndroid Build Coastguard Worker // 9*8975f5c5SAndroid Build Coastguard Worker 10*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_GL_CLEARMULTIVIEWGL_H_ 11*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_GL_CLEARMULTIVIEWGL_H_ 12*8975f5c5SAndroid Build Coastguard Worker 13*8975f5c5SAndroid Build Coastguard Worker #include "angle_gl.h" 14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Error.h" 15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/angletypes.h" 16*8975f5c5SAndroid Build Coastguard Worker 17*8975f5c5SAndroid Build Coastguard Worker namespace gl 18*8975f5c5SAndroid Build Coastguard Worker { 19*8975f5c5SAndroid Build Coastguard Worker class FramebufferState; 20*8975f5c5SAndroid Build Coastguard Worker } // namespace gl 21*8975f5c5SAndroid Build Coastguard Worker 22*8975f5c5SAndroid Build Coastguard Worker namespace rx 23*8975f5c5SAndroid Build Coastguard Worker { 24*8975f5c5SAndroid Build Coastguard Worker class FunctionsGL; 25*8975f5c5SAndroid Build Coastguard Worker class StateManagerGL; 26*8975f5c5SAndroid Build Coastguard Worker 27*8975f5c5SAndroid Build Coastguard Worker class ClearMultiviewGL : angle::NonCopyable 28*8975f5c5SAndroid Build Coastguard Worker { 29*8975f5c5SAndroid Build Coastguard Worker public: 30*8975f5c5SAndroid Build Coastguard Worker // Enum containing the different types of Clear* commands. 31*8975f5c5SAndroid Build Coastguard Worker enum class ClearCommandType 32*8975f5c5SAndroid Build Coastguard Worker { 33*8975f5c5SAndroid Build Coastguard Worker Clear, 34*8975f5c5SAndroid Build Coastguard Worker ClearBufferfv, 35*8975f5c5SAndroid Build Coastguard Worker ClearBufferuiv, 36*8975f5c5SAndroid Build Coastguard Worker ClearBufferiv, 37*8975f5c5SAndroid Build Coastguard Worker ClearBufferfi 38*8975f5c5SAndroid Build Coastguard Worker }; 39*8975f5c5SAndroid Build Coastguard Worker 40*8975f5c5SAndroid Build Coastguard Worker public: 41*8975f5c5SAndroid Build Coastguard Worker ClearMultiviewGL(const FunctionsGL *functions, StateManagerGL *stateManager); 42*8975f5c5SAndroid Build Coastguard Worker ~ClearMultiviewGL(); 43*8975f5c5SAndroid Build Coastguard Worker 44*8975f5c5SAndroid Build Coastguard Worker ClearMultiviewGL(const ClearMultiviewGL &rht) = delete; 45*8975f5c5SAndroid Build Coastguard Worker ClearMultiviewGL &operator=(const ClearMultiviewGL &rht) = delete; 46*8975f5c5SAndroid Build Coastguard Worker ClearMultiviewGL(ClearMultiviewGL &&rht) = delete; 47*8975f5c5SAndroid Build Coastguard Worker ClearMultiviewGL &operator=(ClearMultiviewGL &&rht) = delete; 48*8975f5c5SAndroid Build Coastguard Worker 49*8975f5c5SAndroid Build Coastguard Worker void clearMultiviewFBO(const gl::FramebufferState &state, 50*8975f5c5SAndroid Build Coastguard Worker const gl::Rectangle &scissorBase, 51*8975f5c5SAndroid Build Coastguard Worker ClearCommandType clearCommandType, 52*8975f5c5SAndroid Build Coastguard Worker GLbitfield mask, 53*8975f5c5SAndroid Build Coastguard Worker GLenum buffer, 54*8975f5c5SAndroid Build Coastguard Worker GLint drawbuffer, 55*8975f5c5SAndroid Build Coastguard Worker const uint8_t *values, 56*8975f5c5SAndroid Build Coastguard Worker GLfloat depth, 57*8975f5c5SAndroid Build Coastguard Worker GLint stencil); 58*8975f5c5SAndroid Build Coastguard Worker void initializeResources(); 59*8975f5c5SAndroid Build Coastguard Worker 60*8975f5c5SAndroid Build Coastguard Worker private: 61*8975f5c5SAndroid Build Coastguard Worker void attachTextures(const gl::FramebufferState &state, int layer); 62*8975f5c5SAndroid Build Coastguard Worker void detachTextures(const gl::FramebufferState &state); 63*8975f5c5SAndroid Build Coastguard Worker void clearLayeredFBO(const gl::FramebufferState &state, 64*8975f5c5SAndroid Build Coastguard Worker ClearCommandType clearCommandType, 65*8975f5c5SAndroid Build Coastguard Worker GLbitfield mask, 66*8975f5c5SAndroid Build Coastguard Worker GLenum buffer, 67*8975f5c5SAndroid Build Coastguard Worker GLint drawbuffer, 68*8975f5c5SAndroid Build Coastguard Worker const uint8_t *values, 69*8975f5c5SAndroid Build Coastguard Worker GLfloat depth, 70*8975f5c5SAndroid Build Coastguard Worker GLint stencil); 71*8975f5c5SAndroid Build Coastguard Worker void genericClear(ClearCommandType clearCommandType, 72*8975f5c5SAndroid Build Coastguard Worker GLbitfield mask, 73*8975f5c5SAndroid Build Coastguard Worker GLenum buffer, 74*8975f5c5SAndroid Build Coastguard Worker GLint drawbuffer, 75*8975f5c5SAndroid Build Coastguard Worker const uint8_t *values, 76*8975f5c5SAndroid Build Coastguard Worker GLfloat depth, 77*8975f5c5SAndroid Build Coastguard Worker GLint stencil); 78*8975f5c5SAndroid Build Coastguard Worker 79*8975f5c5SAndroid Build Coastguard Worker const FunctionsGL *mFunctions; 80*8975f5c5SAndroid Build Coastguard Worker StateManagerGL *mStateManager; 81*8975f5c5SAndroid Build Coastguard Worker 82*8975f5c5SAndroid Build Coastguard Worker GLuint mFramebuffer; 83*8975f5c5SAndroid Build Coastguard Worker }; 84*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 85*8975f5c5SAndroid Build Coastguard Worker 86*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_GL_CLEARMULTIVIEWGL_H_ 87