1 //
2 // Copyright 2015 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // GLImplFactory.h:
7 //   Factory interface for OpenGL ES Impl objects.
8 //
9 
10 #ifndef LIBANGLE_RENDERER_GLIMPLFACTORY_H_
11 #define LIBANGLE_RENDERER_GLIMPLFACTORY_H_
12 
13 #include <vector>
14 
15 #include "angle_gl.h"
16 #include "libANGLE/Framebuffer.h"
17 #include "libANGLE/Overlay.h"
18 #include "libANGLE/Program.h"
19 #include "libANGLE/ProgramPipeline.h"
20 #include "libANGLE/Renderbuffer.h"
21 #include "libANGLE/Shader.h"
22 #include "libANGLE/Texture.h"
23 #include "libANGLE/TransformFeedback.h"
24 #include "libANGLE/VertexArray.h"
25 #include "libANGLE/renderer/serial_utils.h"
26 
27 namespace gl
28 {
29 class State;
30 }  // namespace gl
31 
32 namespace rx
33 {
34 class BufferImpl;
35 class CompilerImpl;
36 class ContextImpl;
37 class FenceNVImpl;
38 class SyncImpl;
39 class FramebufferImpl;
40 class MemoryObjectImpl;
41 class OverlayImpl;
42 class PathImpl;
43 class ProgramImpl;
44 class ProgramPipelineImpl;
45 class QueryImpl;
46 class RenderbufferImpl;
47 class SamplerImpl;
48 class SemaphoreImpl;
49 class ShaderImpl;
50 class TextureImpl;
51 class TransformFeedbackImpl;
52 class VertexArrayImpl;
53 
54 class GLImplFactory : angle::NonCopyable
55 {
56   public:
57     GLImplFactory();
58     virtual ~GLImplFactory();
59 
60     // Shader creation
61     virtual CompilerImpl *createCompiler()                           = 0;
62     virtual ShaderImpl *createShader(const gl::ShaderState &data)    = 0;
63     virtual ProgramImpl *createProgram(const gl::ProgramState &data) = 0;
64 
65     // Framebuffer creation
66     virtual FramebufferImpl *createFramebuffer(const gl::FramebufferState &data) = 0;
67 
68     // Texture creation
69     virtual TextureImpl *createTexture(const gl::TextureState &state) = 0;
70 
71     // Renderbuffer creation
72     virtual RenderbufferImpl *createRenderbuffer(const gl::RenderbufferState &state) = 0;
73 
74     // Buffer creation
75     virtual BufferImpl *createBuffer(const gl::BufferState &state) = 0;
76 
77     // Vertex Array creation
78     virtual VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) = 0;
79 
80     // Query and Fence creation
81     virtual QueryImpl *createQuery(gl::QueryType type) = 0;
82     virtual FenceNVImpl *createFenceNV()               = 0;
83     virtual SyncImpl *createSync()                     = 0;
84 
85     // Transform Feedback creation
86     virtual TransformFeedbackImpl *createTransformFeedback(
87         const gl::TransformFeedbackState &state) = 0;
88 
89     // Sampler object creation
90     virtual SamplerImpl *createSampler(const gl::SamplerState &state) = 0;
91 
92     // Program Pipeline object creation
93     virtual ProgramPipelineImpl *createProgramPipeline(const gl::ProgramPipelineState &data) = 0;
94 
95     // Memory object creation
96     virtual MemoryObjectImpl *createMemoryObject() = 0;
97 
98     // Semaphore creation
99     virtual SemaphoreImpl *createSemaphore() = 0;
100 
101     // Overlay creation
102     virtual OverlayImpl *createOverlay(const gl::OverlayState &state) = 0;
103 
generateSerial()104     rx::Serial generateSerial() { return mSerialFactory.generate(); }
105 
106   private:
107     rx::SerialFactory mSerialFactory;
108 };
109 
110 inline GLImplFactory::GLImplFactory() = default;
111 
112 inline GLImplFactory::~GLImplFactory() = default;
113 
114 }  // namespace rx
115 
116 #endif  // LIBANGLE_RENDERER_GLIMPLFACTORY_H_
117