blob: e96622fecb35d3acf8fb6ccbd186f5c2e21b82ca [file] [log] [blame]
Geoff Langf9a6f082015-01-22 13:32:49 -05001//
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
7// RendererGL.cpp: Implements the class methods for RendererGL.
8
9#include "libANGLE/renderer/gl/RendererGL.h"
10
11#include "common/debug.h"
12#include "libANGLE/renderer/gl/BufferGL.h"
13#include "libANGLE/renderer/gl/CompilerGL.h"
14#include "libANGLE/renderer/gl/DefaultAttachmentGL.h"
15#include "libANGLE/renderer/gl/FenceNVGL.h"
16#include "libANGLE/renderer/gl/FenceSyncGL.h"
17#include "libANGLE/renderer/gl/FramebufferGL.h"
18#include "libANGLE/renderer/gl/ProgramGL.h"
19#include "libANGLE/renderer/gl/QueryGL.h"
20#include "libANGLE/renderer/gl/RenderbufferGL.h"
21#include "libANGLE/renderer/gl/ShaderGL.h"
22#include "libANGLE/renderer/gl/TextureGL.h"
23#include "libANGLE/renderer/gl/TransformFeedbackGL.h"
24#include "libANGLE/renderer/gl/VertexArrayGL.h"
25
26namespace rx
27{
28
29RendererGL::RendererGL()
30 : Renderer()
31{}
32
33RendererGL::~RendererGL()
34{}
35
36gl::Error RendererGL::flush()
37{
38 UNIMPLEMENTED();
39 return gl::Error(GL_INVALID_OPERATION);
40}
41
42gl::Error RendererGL::finish()
43{
44 UNIMPLEMENTED();
45 return gl::Error(GL_INVALID_OPERATION);
46}
47
48gl::Error RendererGL::drawArrays(const gl::Data &data, GLenum mode,
49 GLint first, GLsizei count, GLsizei instances)
50{
51 UNIMPLEMENTED();
52 return gl::Error(GL_INVALID_OPERATION);
53}
54
55gl::Error RendererGL::drawElements(const gl::Data &data, GLenum mode, GLsizei count, GLenum type,
56 const GLvoid *indices, GLsizei instances,
57 const RangeUI &indexRange)
58{
59 UNIMPLEMENTED();
60 return gl::Error(GL_INVALID_OPERATION);
61}
62
63CompilerImpl *RendererGL::createCompiler(const gl::Data &data)
64{
65 return new CompilerGL();
66}
67
68ShaderImpl *RendererGL::createShader(GLenum type)
69{
70 return new ShaderGL();
71}
72
73ProgramImpl *RendererGL::createProgram()
74{
75 return new ProgramGL();
76}
77
78DefaultAttachmentImpl *RendererGL::createDefaultAttachment(GLenum type, egl::Surface *surface)
79{
80 return new DefaultAttachmentGL();
81}
82
83FramebufferImpl *RendererGL::createFramebuffer()
84{
85 return new FramebufferGL();
86}
87
88TextureImpl *RendererGL::createTexture(GLenum target)
89{
90 return new TextureGL();
91}
92
93RenderbufferImpl *RendererGL::createRenderbuffer()
94{
95 return new RenderbufferGL();
96}
97
98BufferImpl *RendererGL::createBuffer()
99{
100 return new BufferGL();
101}
102
103VertexArrayImpl *RendererGL::createVertexArray()
104{
105 return new VertexArrayGL();
106}
107
108QueryImpl *RendererGL::createQuery(GLenum type)
109{
110 return new QueryGL(type);
111}
112
113FenceNVImpl *RendererGL::createFenceNV()
114{
115 return new FenceNVGL();
116}
117
118FenceSyncImpl *RendererGL::createFenceSync()
119{
120 return new FenceSyncGL();
121}
122
123TransformFeedbackImpl *RendererGL::createTransformFeedback()
124{
125 return new TransformFeedbackGL();
126}
127
128void RendererGL::notifyDeviceLost()
129{
130 UNIMPLEMENTED();
131}
132
133bool RendererGL::isDeviceLost() const
134{
135 UNIMPLEMENTED();
136 return bool();
137}
138
139bool RendererGL::testDeviceLost()
140{
141 UNIMPLEMENTED();
142 return bool();
143}
144
145bool RendererGL::testDeviceResettable()
146{
147 UNIMPLEMENTED();
148 return bool();
149}
150
151VendorID RendererGL::getVendorId() const
152{
153 UNIMPLEMENTED();
154 return VendorID();
155}
156
157std::string RendererGL::getVendorString() const
158{
159 UNIMPLEMENTED();
160 return std::string();
161}
162
163std::string RendererGL::getRendererDescription() const
164{
165 UNIMPLEMENTED();
166 return std::string();
167}
168
169void RendererGL::generateCaps(gl::Caps *outCaps, gl::TextureCapsMap* outTextureCaps, gl::Extensions *outExtensions) const
170{
171 // Set some minimum GLES2 caps, TODO: query for real GL caps
172 outCaps->maxElementIndex = static_cast<GLint64>(std::numeric_limits<unsigned int>::max());
173 outCaps->max3DTextureSize = 0;
174 outCaps->max2DTextureSize = 1024;
175 outCaps->maxCubeMapTextureSize = outCaps->max2DTextureSize;
176 outCaps->maxArrayTextureLayers = 1;
177 outCaps->maxLODBias = 0.0f;
178 outCaps->maxRenderbufferSize = outCaps->max2DTextureSize;
179 outCaps->maxDrawBuffers = 1;
180 outCaps->maxColorAttachments = 1;
181 outCaps->maxViewportWidth = outCaps->max2DTextureSize;
182 outCaps->maxViewportHeight = outCaps->maxViewportWidth;
183 outCaps->minAliasedPointSize = 1.0f;
184 outCaps->maxAliasedPointSize = 1.0f;
185 outCaps->minAliasedLineWidth = 1.0f;
186 outCaps->maxAliasedLineWidth = 1.0f;
187 outCaps->maxElementsIndices = 0;
188 outCaps->maxElementsVertices = 0;
189 outCaps->maxServerWaitTimeout = 0;
190 outCaps->maxVertexAttributes = 16;
191 outCaps->maxVertexUniformVectors = 256;
192 outCaps->maxVertexUniformVectors = outCaps->maxVertexUniformVectors * 4;
193 outCaps->maxVertexUniformBlocks = 0;
194 outCaps->maxVertexOutputComponents = 16;
195 outCaps->maxVertexTextureImageUnits = outCaps->maxTextureImageUnits;
196 outCaps->maxFragmentUniformVectors = 256;
197 outCaps->maxFragmentUniformComponents = outCaps->maxFragmentUniformVectors * 4;
198 outCaps->maxFragmentUniformBlocks = 0;
199 outCaps->maxFragmentInputComponents = outCaps->maxVertexOutputComponents;
200 outCaps->maxTextureImageUnits = 16;
201 outCaps->minProgramTexelOffset = 0;
202 outCaps->maxProgramTexelOffset = 0;
203 outCaps->maxUniformBufferBindings = 0;
204 outCaps->maxUniformBlockSize = 0;
205 outCaps->uniformBufferOffsetAlignment = 0;
206 outCaps->maxCombinedUniformBlocks = 0;
207 outCaps->maxCombinedVertexUniformComponents = 0;
208 outCaps->maxCombinedFragmentUniformComponents = 0;
209 outCaps->maxVaryingComponents = 0;
210 outCaps->maxVaryingVectors = outCaps->maxVertexOutputComponents / 4;
211 outCaps->maxCombinedTextureImageUnits = outCaps->maxVertexTextureImageUnits + outCaps->maxTextureImageUnits;
212 outCaps->maxTransformFeedbackInterleavedComponents = 0;
213 outCaps->maxTransformFeedbackSeparateAttributes = 0;
214 outCaps->maxTransformFeedbackSeparateComponents = 0;
215
216 gl::TextureCaps supportedTextureFormat;
217 supportedTextureFormat.texturable = true;
218 supportedTextureFormat.filterable = true;
219 supportedTextureFormat.renderable = true;
220
221 outTextureCaps->insert(GL_RGB565, supportedTextureFormat);
222 outTextureCaps->insert(GL_RGBA4, supportedTextureFormat);
223 outTextureCaps->insert(GL_RGB5_A1, supportedTextureFormat);
224 outTextureCaps->insert(GL_RGB8_OES, supportedTextureFormat);
225 outTextureCaps->insert(GL_RGBA8_OES, supportedTextureFormat);
226
227 outTextureCaps->insert(GL_DEPTH_COMPONENT16, supportedTextureFormat);
228 outTextureCaps->insert(GL_STENCIL_INDEX8, supportedTextureFormat);
229
230 outExtensions->setTextureExtensionSupport(*outTextureCaps);
231 outExtensions->textureNPOT = true;
232 outExtensions->textureStorage = true;
233}
234
235Workarounds RendererGL::generateWorkarounds() const
236{
237 Workarounds workarounds;
238 return workarounds;
239}
240
241}