diff options
Diffstat (limited to 'libs/hwui/renderstate/RenderState.h')
-rw-r--r-- | libs/hwui/renderstate/RenderState.h | 105 |
1 files changed, 16 insertions, 89 deletions
diff --git a/libs/hwui/renderstate/RenderState.h b/libs/hwui/renderstate/RenderState.h index e033cf2c5046..ff5d02fe359a 100644 --- a/libs/hwui/renderstate/RenderState.h +++ b/libs/hwui/renderstate/RenderState.h @@ -16,132 +16,59 @@ #ifndef RENDERSTATE_H #define RENDERSTATE_H -#include "Caches.h" -#include "Glop.h" -#include "renderstate/Blend.h" -#include "renderstate/MeshState.h" -#include "renderstate/OffscreenBufferPool.h" -#include "renderstate/PixelBufferState.h" -#include "renderstate/Scissor.h" -#include "renderstate/Stencil.h" #include "utils/Macros.h" -#include <GLES2/gl2.h> -#include <GLES2/gl2ext.h> -#include <private/hwui/DrawGlInfo.h> -#include <ui/Region.h> -#include <utils/Functor.h> -#include <utils/Mutex.h> #include <utils/RefBase.h> #include <set> -class GrContext; - namespace android { namespace uirenderer { -class Caches; class Layer; -class DeferredLayerUpdater; namespace renderthread { class CacheManager; -class CanvasContext; class RenderThread; } -// TODO: Replace Cache's GL state tracking with this. For now it's more a thin +class IGpuContextCallback { +public: + virtual void onContextDestroyed() = 0; +protected: + virtual ~IGpuContextCallback() {} +}; + // wrapper of Caches for users to migrate to. class RenderState { PREVENT_COPY_AND_ASSIGN(RenderState); friend class renderthread::RenderThread; - friend class Caches; friend class renderthread::CacheManager; public: - void onGLContextCreated(); - void onGLContextDestroyed(); - - void onVkContextCreated(); - void onVkContextDestroyed(); - - void flush(Caches::FlushMode flushMode); - void onBitmapDestroyed(uint32_t pixelRefId); - - void setViewport(GLsizei width, GLsizei height); - void getViewport(GLsizei* outWidth, GLsizei* outHeight); - - void bindFramebuffer(GLuint fbo); - GLuint getFramebuffer() { return mFramebuffer; } - GLuint createFramebuffer(); - void deleteFramebuffer(GLuint fbo); - - void invokeFunctor(Functor* functor, DrawGlInfo::Mode mode, DrawGlInfo* info); - - void debugOverdraw(bool enable, bool clear); + void registerContextCallback(IGpuContextCallback* cb) { mContextCallbacks.insert(cb); } + void removeContextCallback(IGpuContextCallback* cb) { mContextCallbacks.erase(cb); } void registerLayer(Layer* layer) { mActiveLayers.insert(layer); } void unregisterLayer(Layer* layer) { mActiveLayers.erase(layer); } - void registerCanvasContext(renderthread::CanvasContext* context) { - mRegisteredContexts.insert(context); - } - - void unregisterCanvasContext(renderthread::CanvasContext* context) { - mRegisteredContexts.erase(context); - } - - void registerDeferredLayerUpdater(DeferredLayerUpdater* layerUpdater) { - mActiveLayerUpdaters.insert(layerUpdater); - } - - void unregisterDeferredLayerUpdater(DeferredLayerUpdater* layerUpdater) { - mActiveLayerUpdaters.erase(layerUpdater); - } - // TODO: This system is a little clunky feeling, this could use some // more thinking... void postDecStrong(VirtualLightRefBase* object); - void render(const Glop& glop, const Matrix4& orthoMatrix, bool overrideDisableBlending); - - Blend& blend() { return *mBlend; } - MeshState& meshState() { return *mMeshState; } - Scissor& scissor() { return *mScissor; } - Stencil& stencil() { return *mStencil; } - - OffscreenBufferPool& layerPool() { return *mLayerPool; } - - GrContext* getGrContext() const; - - void dump(); + renderthread::RenderThread& getRenderThread() const { return mRenderThread; } private: - void interruptForFunctorInvoke(); - void resumeFromFunctorInvoke(); - void destroyLayersInUpdater(); - explicit RenderState(renderthread::RenderThread& thread); - ~RenderState(); - - renderthread::RenderThread& mRenderThread; - Caches* mCaches = nullptr; + ~RenderState() {} - Blend* mBlend = nullptr; - MeshState* mMeshState = nullptr; - Scissor* mScissor = nullptr; - Stencil* mStencil = nullptr; - - OffscreenBufferPool* mLayerPool = nullptr; + // Context notifications are only to be triggered by renderthread::RenderThread + void onContextCreated(); + void onContextDestroyed(); + std::set<IGpuContextCallback*> mContextCallbacks; std::set<Layer*> mActiveLayers; - std::set<DeferredLayerUpdater*> mActiveLayerUpdaters; - std::set<renderthread::CanvasContext*> mRegisteredContexts; - - GLsizei mViewportWidth; - GLsizei mViewportHeight; - GLuint mFramebuffer; + renderthread::RenderThread& mRenderThread; pthread_t mThreadId; }; |