blob: ed84cab70c85bd7df6b6573e732babe85c969f69 [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 Langc05f7062015-03-10 09:50:57 -070039 mStateManager = new StateManagerGL(mFunctions, getRendererCaps());
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 Lang7c82bc42015-03-09 16:18:08 -040062 gl::Error error = mStateManager->setDrawArraysState(data, first, count);
63 if (error.isError())
64 {
65 return error;
66 }
67
Geoff Langd6e50872015-02-24 12:42:26 -050068 mFunctions->drawArrays(mode, first, count);
69
70 return gl::Error(GL_NO_ERROR);
Geoff Langf9a6f082015-01-22 13:32:49 -050071}
72
73gl::Error RendererGL::drawElements(const gl::Data &data, GLenum mode, GLsizei count, GLenum type,
74 const GLvoid *indices, GLsizei instances,
75 const RangeUI &indexRange)
76{
Geoff Langd6e50872015-02-24 12:42:26 -050077 if (instances > 0)
78 {
79 UNIMPLEMENTED();
80 }
81
Geoff Lang7c82bc42015-03-09 16:18:08 -040082 const GLvoid *drawIndexPointer = nullptr;
83 gl::Error error = mStateManager->setDrawElementsState(data, count, type, indices, &drawIndexPointer);
84 if (error.isError())
85 {
86 return error;
87 }
88
89 mFunctions->drawElements(mode, count, type, drawIndexPointer);
Geoff Langd6e50872015-02-24 12:42:26 -050090
91 return gl::Error(GL_NO_ERROR);
Geoff Langf9a6f082015-01-22 13:32:49 -050092}
93
94CompilerImpl *RendererGL::createCompiler(const gl::Data &data)
95{
Geoff Langc4152832015-02-20 09:57:29 -050096 return new CompilerGL(data);
Geoff Langf9a6f082015-01-22 13:32:49 -050097}
98
99ShaderImpl *RendererGL::createShader(GLenum type)
100{
Geoff Lang295ed4c2015-02-20 09:58:25 -0500101 return new ShaderGL(type, mFunctions);
Geoff Langf9a6f082015-01-22 13:32:49 -0500102}
103
104ProgramImpl *RendererGL::createProgram()
105{
Geoff Langb1f435e2015-02-20 10:01:01 -0500106 return new ProgramGL(mFunctions, mStateManager);
Geoff Langf9a6f082015-01-22 13:32:49 -0500107}
108
109DefaultAttachmentImpl *RendererGL::createDefaultAttachment(GLenum type, egl::Surface *surface)
110{
111 return new DefaultAttachmentGL();
112}
113
Jamie Madilld1405e52015-03-05 15:41:39 -0500114FramebufferImpl *RendererGL::createFramebuffer(const gl::Framebuffer::Data &data)
Geoff Langf9a6f082015-01-22 13:32:49 -0500115{
Jamie Madilld1405e52015-03-05 15:41:39 -0500116 return new FramebufferGL(data);
Geoff Langf9a6f082015-01-22 13:32:49 -0500117}
118
119TextureImpl *RendererGL::createTexture(GLenum target)
120{
Geoff Langc05f7062015-03-10 09:50:57 -0700121 return new TextureGL(target, mFunctions, mStateManager);
Geoff Langf9a6f082015-01-22 13:32:49 -0500122}
123
124RenderbufferImpl *RendererGL::createRenderbuffer()
125{
126 return new RenderbufferGL();
127}
128
129BufferImpl *RendererGL::createBuffer()
130{
Geoff Lang36c79012015-02-24 11:47:20 -0500131 return new BufferGL(mFunctions, mStateManager);
Geoff Langf9a6f082015-01-22 13:32:49 -0500132}
133
134VertexArrayImpl *RendererGL::createVertexArray()
135{
Geoff Langba4c4a82015-02-24 12:38:46 -0500136 return new VertexArrayGL(mFunctions, mStateManager);
Geoff Langf9a6f082015-01-22 13:32:49 -0500137}
138
139QueryImpl *RendererGL::createQuery(GLenum type)
140{
141 return new QueryGL(type);
142}
143
144FenceNVImpl *RendererGL::createFenceNV()
145{
146 return new FenceNVGL();
147}
148
149FenceSyncImpl *RendererGL::createFenceSync()
150{
151 return new FenceSyncGL();
152}
153
154TransformFeedbackImpl *RendererGL::createTransformFeedback()
155{
156 return new TransformFeedbackGL();
157}
158
159void RendererGL::notifyDeviceLost()
160{
161 UNIMPLEMENTED();
162}
163
164bool RendererGL::isDeviceLost() const
165{
166 UNIMPLEMENTED();
167 return bool();
168}
169
170bool RendererGL::testDeviceLost()
171{
172 UNIMPLEMENTED();
173 return bool();
174}
175
176bool RendererGL::testDeviceResettable()
177{
178 UNIMPLEMENTED();
179 return bool();
180}
181
182VendorID RendererGL::getVendorId() const
183{
184 UNIMPLEMENTED();
185 return VendorID();
186}
187
188std::string RendererGL::getVendorString() const
189{
190 UNIMPLEMENTED();
191 return std::string();
192}
193
194std::string RendererGL::getRendererDescription() const
195{
Geoff Langf1e85922015-02-23 14:40:04 -0500196 //UNIMPLEMENTED();
Geoff Langf9a6f082015-01-22 13:32:49 -0500197 return std::string();
198}
199
200void RendererGL::generateCaps(gl::Caps *outCaps, gl::TextureCapsMap* outTextureCaps, gl::Extensions *outExtensions) const
201{
Geoff Langddc74462015-02-25 11:48:09 -0500202 nativegl_gl::GenerateCaps(mFunctions, outCaps, outTextureCaps, outExtensions);
Geoff Langf9a6f082015-01-22 13:32:49 -0500203}
204
205Workarounds RendererGL::generateWorkarounds() const
206{
207 Workarounds workarounds;
208 return workarounds;
209}
210
211}