blob: 4229a5e6c17e0cef0bbc2f2aec5aa411e4482b3a [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"
Geoff Langc4152832015-02-20 09:57:29 -050012#include "libANGLE/Data.h"
Geoff Langf9a6f082015-01-22 13:32:49 -050013#include "libANGLE/renderer/gl/BufferGL.h"
14#include "libANGLE/renderer/gl/CompilerGL.h"
15#include "libANGLE/renderer/gl/DefaultAttachmentGL.h"
16#include "libANGLE/renderer/gl/FenceNVGL.h"
17#include "libANGLE/renderer/gl/FenceSyncGL.h"
18#include "libANGLE/renderer/gl/FramebufferGL.h"
Geoff Lang56cf9af2015-02-17 10:16:49 -050019#include "libANGLE/renderer/gl/FunctionsGL.h"
Geoff Langf9a6f082015-01-22 13:32:49 -050020#include "libANGLE/renderer/gl/ProgramGL.h"
21#include "libANGLE/renderer/gl/QueryGL.h"
22#include "libANGLE/renderer/gl/RenderbufferGL.h"
23#include "libANGLE/renderer/gl/ShaderGL.h"
Geoff Lang94463d52015-02-18 13:09:37 -050024#include "libANGLE/renderer/gl/StateManagerGL.h"
Geoff Langf9a6f082015-01-22 13:32:49 -050025#include "libANGLE/renderer/gl/TextureGL.h"
26#include "libANGLE/renderer/gl/TransformFeedbackGL.h"
27#include "libANGLE/renderer/gl/VertexArrayGL.h"
Geoff Langddc74462015-02-25 11:48:09 -050028#include "libANGLE/renderer/gl/renderergl_utils.h"
Geoff Langf9a6f082015-01-22 13:32:49 -050029
30namespace rx
31{
32
Geoff Lang56cf9af2015-02-17 10:16:49 -050033RendererGL::RendererGL(const FunctionsGL *functions)
34 : Renderer(),
Geoff Lang94463d52015-02-18 13:09:37 -050035 mFunctions(functions),
36 mStateManager(nullptr)
Geoff Lang56cf9af2015-02-17 10:16:49 -050037{
38 ASSERT(mFunctions);
Geoff Lang94463d52015-02-18 13:09:37 -050039 mStateManager = new StateManagerGL(mFunctions);
Geoff Lang56cf9af2015-02-17 10:16:49 -050040}
Geoff Langf9a6f082015-01-22 13:32:49 -050041
42RendererGL::~RendererGL()
Geoff Lang94463d52015-02-18 13:09:37 -050043{
44 SafeDelete(mStateManager);
45}
Geoff Langf9a6f082015-01-22 13:32:49 -050046
47gl::Error RendererGL::flush()
48{
49 UNIMPLEMENTED();
50 return gl::Error(GL_INVALID_OPERATION);
51}
52
53gl::Error RendererGL::finish()
54{
55 UNIMPLEMENTED();
56 return gl::Error(GL_INVALID_OPERATION);
57}
58
59gl::Error RendererGL::drawArrays(const gl::Data &data, GLenum mode,
60 GLint first, GLsizei count, GLsizei instances)
61{
Geoff Langd6e50872015-02-24 12:42:26 -050062 mStateManager->setDrawState(*data.state);
63 mFunctions->drawArrays(mode, first, count);
64
65 return gl::Error(GL_NO_ERROR);
Geoff Langf9a6f082015-01-22 13:32:49 -050066}
67
68gl::Error RendererGL::drawElements(const gl::Data &data, GLenum mode, GLsizei count, GLenum type,
69 const GLvoid *indices, GLsizei instances,
70 const RangeUI &indexRange)
71{
Geoff Langd6e50872015-02-24 12:42:26 -050072 if (instances > 0)
73 {
74 UNIMPLEMENTED();
75 }
76
77 mStateManager->setDrawState(*data.state);
78 mFunctions->drawElements(mode, count, type, indices);
79
80 return gl::Error(GL_NO_ERROR);
Geoff Langf9a6f082015-01-22 13:32:49 -050081}
82
83CompilerImpl *RendererGL::createCompiler(const gl::Data &data)
84{
Geoff Langc4152832015-02-20 09:57:29 -050085 return new CompilerGL(data);
Geoff Langf9a6f082015-01-22 13:32:49 -050086}
87
88ShaderImpl *RendererGL::createShader(GLenum type)
89{
Geoff Lang295ed4c2015-02-20 09:58:25 -050090 return new ShaderGL(type, mFunctions);
Geoff Langf9a6f082015-01-22 13:32:49 -050091}
92
93ProgramImpl *RendererGL::createProgram()
94{
Geoff Langb1f435e2015-02-20 10:01:01 -050095 return new ProgramGL(mFunctions, mStateManager);
Geoff Langf9a6f082015-01-22 13:32:49 -050096}
97
98DefaultAttachmentImpl *RendererGL::createDefaultAttachment(GLenum type, egl::Surface *surface)
99{
100 return new DefaultAttachmentGL();
101}
102
Jamie Madilld1405e52015-03-05 15:41:39 -0500103FramebufferImpl *RendererGL::createFramebuffer(const gl::Framebuffer::Data &data)
Geoff Langf9a6f082015-01-22 13:32:49 -0500104{
Jamie Madilld1405e52015-03-05 15:41:39 -0500105 return new FramebufferGL(data);
Geoff Langf9a6f082015-01-22 13:32:49 -0500106}
107
108TextureImpl *RendererGL::createTexture(GLenum target)
109{
110 return new TextureGL();
111}
112
113RenderbufferImpl *RendererGL::createRenderbuffer()
114{
115 return new RenderbufferGL();
116}
117
118BufferImpl *RendererGL::createBuffer()
119{
Geoff Lang36c79012015-02-24 11:47:20 -0500120 return new BufferGL(mFunctions, mStateManager);
Geoff Langf9a6f082015-01-22 13:32:49 -0500121}
122
123VertexArrayImpl *RendererGL::createVertexArray()
124{
Geoff Langba4c4a82015-02-24 12:38:46 -0500125 return new VertexArrayGL(mFunctions, mStateManager);
Geoff Langf9a6f082015-01-22 13:32:49 -0500126}
127
128QueryImpl *RendererGL::createQuery(GLenum type)
129{
130 return new QueryGL(type);
131}
132
133FenceNVImpl *RendererGL::createFenceNV()
134{
135 return new FenceNVGL();
136}
137
138FenceSyncImpl *RendererGL::createFenceSync()
139{
140 return new FenceSyncGL();
141}
142
143TransformFeedbackImpl *RendererGL::createTransformFeedback()
144{
145 return new TransformFeedbackGL();
146}
147
148void RendererGL::notifyDeviceLost()
149{
150 UNIMPLEMENTED();
151}
152
153bool RendererGL::isDeviceLost() const
154{
155 UNIMPLEMENTED();
156 return bool();
157}
158
159bool RendererGL::testDeviceLost()
160{
161 UNIMPLEMENTED();
162 return bool();
163}
164
165bool RendererGL::testDeviceResettable()
166{
167 UNIMPLEMENTED();
168 return bool();
169}
170
171VendorID RendererGL::getVendorId() const
172{
173 UNIMPLEMENTED();
174 return VendorID();
175}
176
177std::string RendererGL::getVendorString() const
178{
179 UNIMPLEMENTED();
180 return std::string();
181}
182
183std::string RendererGL::getRendererDescription() const
184{
Geoff Langf1e85922015-02-23 14:40:04 -0500185 //UNIMPLEMENTED();
Geoff Langf9a6f082015-01-22 13:32:49 -0500186 return std::string();
187}
188
189void RendererGL::generateCaps(gl::Caps *outCaps, gl::TextureCapsMap* outTextureCaps, gl::Extensions *outExtensions) const
190{
Geoff Langddc74462015-02-25 11:48:09 -0500191 nativegl_gl::GenerateCaps(mFunctions, outCaps, outTextureCaps, outExtensions);
Geoff Langf9a6f082015-01-22 13:32:49 -0500192}
193
194Workarounds RendererGL::generateWorkarounds() const
195{
196 Workarounds workarounds;
197 return workarounds;
198}
199
200}