+ /**
+ * @brief Executes all pending texture mipmap generation
+ */
+ void ProcessTextureMipmapGenerationQueue();
+
+ /**
+ * @brief Returns program custom parameter
+ *
+ * This function can be used as a backdoor in order to retrieve
+ * certain data out of implementation
+ *
+ * @param[in] program Valid Program object
+ * @param parameterId Integer id of parameter
+ * @param outData Output data
+ * @return True if parameter retrieved
+ */
+ bool GetProgramParameter(Graphics::Program& program, uint32_t parameterId, void* outData) override;
+
+ /**
+ * @brief Returns pipeline cache object
+ *
+ * @return Valid pipeline cache object
+ */
+ [[nodiscard]] GLES::PipelineCache& GetPipelineCache() const;
+
+ /**
+ * @brief Returns runtime supported GLES version
+ *
+ * @return GLES version enum
+ */
+ GLES::GLESVersion GetGLESVersion() const
+ {
+ return mGLESVersion;
+ }
+
+ /**
+ * @brief Sets runtime supported GLES version
+ *
+ * @param[in] glesVersion The runtime supported GLES version
+ */
+ void SetGLESVersion(GLES::GLESVersion glesVersion)
+ {
+ mGLESVersion = glesVersion;
+ }
+
+ bool IsShuttingDown() const
+ {
+ return mIsShuttingDown;
+ }
+
+ /**
+ * @brief Reset texture cache in the contexts
+ */
+ void ResetTextureCache()
+ {
+ if(mContext)
+ {
+ mContext->GetGLStateCache().ResetTextureCache();
+ }
+
+ for(auto& context : mSurfaceContexts)
+ {
+ if(context.second)
+ {
+ context.second->GetGLStateCache().ResetTextureCache();
+ }
+ }
+ }
+
+ /**
+ * @brief Reset buffer cache in the contexts
+ */
+ void ResetBufferCache()
+ {
+ if(mContext)
+ {
+ mContext->GetGLStateCache().ResetBufferCache();
+ }
+
+ for(auto& context : mSurfaceContexts)
+ {
+ if(context.second)
+ {
+ context.second->GetGLStateCache().ResetBufferCache();
+ }
+ }
+ }
+
+ void ProcessCommandBuffer(const GLES::CommandBuffer& commandBuffer);
+
+ // Resolves presentation
+ void ResolvePresentRenderTarget(GLES::RenderTarget* renderTarget);
+
+ /**
+ * Creates a GLES context for the given render surface
+ *
+ * @param[in] surface The surface whose GLES context to be created.
+ */
+ void CreateSurfaceContext(Dali::RenderSurfaceInterface* surface);
+
+ /**
+ * Deletes a GLES context
+ *
+ * @param[in] surface The surface whose GLES context to be deleted.
+ */
+ void DeleteSurfaceContext(Dali::RenderSurfaceInterface* surface);
+
+ /**
+ * Activate the resource context (shared surfaceless context)
+ */
+ void ActivateResourceContext();
+
+ /**
+ * Activate the surface context
+ *
+ * @param[in] surface The surface whose context to be switched to.
+ */
+ void ActivateSurfaceContext(Dali::RenderSurfaceInterface* surface);
+
+ /**
+ * @brief Returns the current context
+ *
+ * @return the current context
+ */
+ GLES::Context* GetCurrentContext() const
+ {
+ return mCurrentContext;
+ }
+