// // 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. // // ContextGL: // OpenGL-specific functionality associated with a GL Context. // #ifndef LIBANGLE_RENDERER_GL_CONTEXTGL_H_ #define LIBANGLE_RENDERER_GL_CONTEXTGL_H_ #include "libANGLE/renderer/ContextImpl.h" namespace sh { struct BlockMemberInfo; } namespace rx { class FunctionsGL; class RendererGL; class StateManagerGL; struct WorkaroundsGL; class ContextGL : public ContextImpl { public: ContextGL(const gl::ContextState &state, RendererGL *renderer); ~ContextGL() override; gl::Error initialize() override; // Shader creation CompilerImpl *createCompiler() override; ShaderImpl *createShader(const gl::ShaderState &data) override; ProgramImpl *createProgram(const gl::ProgramState &data) override; // Framebuffer creation FramebufferImpl *createFramebuffer(const gl::FramebufferState &data) override; // Texture creation TextureImpl *createTexture(const gl::TextureState &state) override; // Renderbuffer creation RenderbufferImpl *createRenderbuffer() override; // Buffer creation BufferImpl *createBuffer() override; // Vertex Array creation VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override; // Query and Fence creation QueryImpl *createQuery(GLenum type) override; FenceNVImpl *createFenceNV() override; FenceSyncImpl *createFenceSync() override; // Transform Feedback creation TransformFeedbackImpl *createTransformFeedback( const gl::TransformFeedbackState &state) override; // Sampler object creation SamplerImpl *createSampler() override; // Path object creation std::vector createPaths(GLsizei range) override; // Flush and finish. gl::Error flush() override; gl::Error finish() override; // Drawing methods. gl::Error drawArrays(GLenum mode, GLint first, GLsizei count) override; gl::Error drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount) override; gl::Error drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, const gl::IndexRange &indexRange) override; gl::Error drawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instances, const gl::IndexRange &indexRange) override; gl::Error drawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, const gl::IndexRange &indexRange) override; // CHROMIUM_path_rendering implementation void stencilFillPath(const gl::Path *path, GLenum fillMode, GLuint mask) override; void stencilStrokePath(const gl::Path *path, GLint reference, GLuint mask) override; void coverFillPath(const gl::Path *path, GLenum coverMode) override; void coverStrokePath(const gl::Path *path, GLenum coverMode) override; void stencilThenCoverFillPath(const gl::Path *path, GLenum fillMode, GLuint mask, GLenum coverMode) override; void stencilThenCoverStrokePath(const gl::Path *path, GLint reference, GLuint mask, GLenum coverMode) override; void coverFillPathInstanced(const std::vector &paths, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) override; void coverStrokePathInstanced(const std::vector &paths, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) override; void stencilFillPathInstanced(const std::vector &paths, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues) override; void stencilStrokePathInstanced(const std::vector &paths, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues) override; void stencilThenCoverFillPathInstanced(const std::vector &paths, GLenum coverMode, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues) override; void stencilThenCoverStrokePathInstanced(const std::vector &paths, GLenum coverMode, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues) override; // Device loss GLenum getResetStatus() override; // Vendor and description strings. std::string getVendorString() const override; std::string getRendererDescription() const override; // Debug markers. void insertEventMarker(GLsizei length, const char *marker) override; void pushGroupMarker(GLsizei length, const char *marker) override; void popGroupMarker() override; // State sync with dirty bits. void syncState(const gl::State &state, const gl::State::DirtyBits &dirtyBits) override; // Disjoint timer queries GLint getGPUDisjoint() override; GLint64 getTimestamp() override; // Context switching void onMakeCurrent(const gl::ContextState &data) override; // Caps queries const gl::Caps &getNativeCaps() const override; const gl::TextureCapsMap &getNativeTextureCaps() const override; const gl::Extensions &getNativeExtensions() const override; const gl::Limitations &getNativeLimitations() const override; // Handle helpers const FunctionsGL *getFunctions() const; StateManagerGL *getStateManager(); const WorkaroundsGL &getWorkaroundsGL(); private: RendererGL *mRenderer; }; } // namespace rx #endif // LIBANGLE_RENDERER_GL_CONTEXTGL_H_