| // |
| // Copyright 2016 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. |
| // |
| |
| // Thread.h : Defines the Thread class which represents a global EGL thread. |
| |
| #ifndef LIBANGLE_THREAD_H_ |
| #define LIBANGLE_THREAD_H_ |
| |
| #include <EGL/egl.h> |
| |
| #include "libANGLE/Debug.h" |
| |
| #include <atomic> |
| |
| namespace angle |
| { |
| extern bool gUseAndroidOpenGLTlsSlot; |
| extern std::atomic_int gProcessCleanupRefCount; |
| |
| void ProcessCleanupCallback(void *ptr); |
| } // namespace angle |
| |
| namespace gl |
| { |
| class Context; |
| } // namespace gl |
| |
| namespace egl |
| { |
| class Error; |
| class Debug; |
| class Display; |
| class Surface; |
| |
| class Thread : public LabeledObject |
| { |
| public: |
| Thread(); |
| |
| void setLabel(EGLLabelKHR label) override; |
| EGLLabelKHR getLabel() const override; |
| |
| void setSuccess(); |
| |
| void setError(EGLint error, |
| const char *command, |
| const LabeledObject *object, |
| const char *message); |
| |
| // TODO: Remove egl::Error. http://anglebug.com/3041 |
| void setError(const Error &error, const char *command, const LabeledObject *object); |
| EGLint getError() const; |
| |
| void setAPI(EGLenum api); |
| EGLenum getAPI() const; |
| |
| void setCurrent(gl::Context *context); |
| Surface *getCurrentDrawSurface() const; |
| Surface *getCurrentReadSurface() const; |
| gl::Context *getContext() const; |
| Display *getDisplay() const; |
| |
| private: |
| EGLLabelKHR mLabel; |
| EGLint mError; |
| EGLenum mAPI; |
| gl::Context *mContext; |
| }; |
| |
| void EnsureDebugAllocated(); |
| void DeallocateDebug(); |
| Debug *GetDebug(); |
| |
| } // namespace egl |
| |
| #endif // LIBANGLE_THREAD_H_ |