/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef EGLMANAGER_H #define EGLMANAGER_H #include #include #include #include #include namespace android { namespace uirenderer { namespace renderthread { class RenderThread; // This class contains the shared global EGL objects, such as EGLDisplay // and EGLConfig, which are re-used by CanvasContext class EglManager { public: // Returns true on success, false on failure void initialize(); bool hasEglContext(); EGLSurface createSurface(EGLNativeWindowType window); void destroySurface(EGLSurface surface); void destroy(); bool isCurrent(EGLSurface surface) { return mCurrentSurface == surface; } // Returns true if the current surface changed, false if it was already current bool makeCurrent(EGLSurface surface); void beginFrame(EGLSurface surface, EGLint* width, EGLint* height); bool swapBuffers(EGLSurface surface, const SkRect& dirty, EGLint width, EGLint height); // Returns true iff the surface is now preserving buffers. bool setPreserveBuffer(EGLSurface surface, bool preserve); void setTextureAtlas(const sp& buffer, int64_t* map, size_t mapSize); void fence(); private: friend class RenderThread; EglManager(RenderThread& thread); // EglContext is never destroyed, method is purposely not implemented ~EglManager(); void createPBufferSurface(); void loadConfig(); void createContext(); void initAtlas(); RenderThread& mRenderThread; EGLDisplay mEglDisplay; EGLConfig mEglConfig; EGLContext mEglContext; EGLSurface mPBufferSurface; const bool mAllowPreserveBuffer; bool mCanSetPreserveBuffer; EGLSurface mCurrentSurface; sp mAtlasBuffer; int64_t* mAtlasMap; size_t mAtlasMapSize; }; } /* namespace renderthread */ } /* namespace uirenderer */ } /* namespace android */ #endif /* EGLMANAGER_H */