+ /**
+ * @brief Resolves GPU-based uniform buffers
+ */
+ void ResolveGpuUniformBuffers();
+
+ /**
+ * @brief Begins render pass for specified render target
+ *
+ * @param[in] renderPass render pass object to begin
+ */
+ void BeginRenderPass(const BeginRenderPassDescriptor& renderPassBegin);
+
+ /**
+ * @brief Ends render pass
+ *
+ * Ending render pass is necessary in order to ensure
+ * proper explicit synchronization is in place
+ */
+ void EndRenderPass(TextureDependencyChecker& checker);
+
+ /**
+ * @brief Returns the cache of GL state in the context
+ * @return the reference of GL state cache (which can be modified)
+ */
+ GLStateCache& GetGLStateCache();
+
+ /**
+ * @brief Called when the GL context has been created.
+ */
+ void GlContextCreated();
+
+ /**
+ * @brief Called when the GL context has been destroyed.
+ */
+ void GlContextDestroyed();
+
+ /**
+ * @brief Invalidates the cached pipeline object in the context if it matches
+ * This is called before the pipeline is deleted
+ *
+ * @param[in] pipeline The pipeline
+ */
+ void InvalidateCachedPipeline(GLES::Pipeline* pipeline);
+
+ /**
+ * @brief Sets up EGL context for native rendering
+ *
+ * - The native rendering uses dedicated context
+ * - There is one EGL native rendering context per GLES::Context object
+ * - Native rendering context is compatible with the window/surface context
+ * - Native rendering context dies with GLES::Context object
+ *
+ * When native rendering is about to be executed, the dedicated EGL context
+ * is acquired (created or reused) and made current. The Window/Surface context
+ * is cached to be restored afterwards.
+ */
+ void PrepareForNativeRendering();
+
+ /**
+ * @brief Restores window/surface context after native rendering.
+ */
+ void RestoreFromNativeRendering();
+
+ void ActiveTexture(uint32_t textureBindingIndex);
+ void BindTexture(GLenum target, BoundTextureType textureTypeId, uint32_t textureId);
+ void GenerateMipmap(GLenum target);
+
+ /**
+ * Binds the buffer.
+ * @return true if the buffer was actually bound, false if it's cached
+ */
+ bool BindBuffer(GLenum target, uint32_t bufferId);
+
+ void DrawBuffers(uint32_t count, const GLenum* buffers);
+ void BindFrameBuffer(GLenum target, uint32_t bufferId);
+ void GenFramebuffers(uint32_t count, uint32_t* framebuffers);
+ void DeleteFramebuffers(uint32_t count, uint32_t* framebuffers);
+ void ColorMask(bool enabled);
+ void ClearStencilBuffer();
+ void ClearDepthBuffer();
+ void ClearBuffer(uint32_t mask, bool forceClear);
+ void InvalidateDepthStencilBuffers();
+ void SetScissorTestEnabled(bool scissorEnabled);
+ void SetStencilTestEnable(bool stencilEnable);
+ void StencilMask(uint32_t writeMask);
+ void StencilFunc(Graphics::CompareOp compareOp,
+ uint32_t reference,
+ uint32_t compareMask);
+ void StencilOp(Graphics::StencilOp failOp,
+ Graphics::StencilOp depthFailOp,
+ Graphics::StencilOp passOp);
+ void SetDepthCompareOp(Graphics::CompareOp compareOp);
+ void SetDepthTestEnable(bool depthTestEnable);
+ void SetDepthWriteEnable(bool depthWriteEnable);
+