blob: 89c312f7d6587e06efb4e311441609c30efa7069 [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 Lang4ad17092015-03-10 16:47:44 -040013#include "libANGLE/Surface.h"
Geoff Langf9a6f082015-01-22 13:32:49 -050014#include "libANGLE/renderer/gl/BufferGL.h"
15#include "libANGLE/renderer/gl/CompilerGL.h"
16#include "libANGLE/renderer/gl/DefaultAttachmentGL.h"
17#include "libANGLE/renderer/gl/FenceNVGL.h"
18#include "libANGLE/renderer/gl/FenceSyncGL.h"
19#include "libANGLE/renderer/gl/FramebufferGL.h"
Geoff Lang56cf9af2015-02-17 10:16:49 -050020#include "libANGLE/renderer/gl/FunctionsGL.h"
Geoff Langf9a6f082015-01-22 13:32:49 -050021#include "libANGLE/renderer/gl/ProgramGL.h"
22#include "libANGLE/renderer/gl/QueryGL.h"
23#include "libANGLE/renderer/gl/RenderbufferGL.h"
24#include "libANGLE/renderer/gl/ShaderGL.h"
Geoff Lang94463d52015-02-18 13:09:37 -050025#include "libANGLE/renderer/gl/StateManagerGL.h"
Geoff Lang4ad17092015-03-10 16:47:44 -040026#include "libANGLE/renderer/gl/SurfaceGL.h"
Geoff Langf9a6f082015-01-22 13:32:49 -050027#include "libANGLE/renderer/gl/TextureGL.h"
28#include "libANGLE/renderer/gl/TransformFeedbackGL.h"
29#include "libANGLE/renderer/gl/VertexArrayGL.h"
Geoff Langddc74462015-02-25 11:48:09 -050030#include "libANGLE/renderer/gl/renderergl_utils.h"
Geoff Langf9a6f082015-01-22 13:32:49 -050031
32namespace rx
33{
34
Geoff Lang56cf9af2015-02-17 10:16:49 -050035RendererGL::RendererGL(const FunctionsGL *functions)
36 : Renderer(),
Geoff Lang94463d52015-02-18 13:09:37 -050037 mFunctions(functions),
38 mStateManager(nullptr)
Geoff Lang56cf9af2015-02-17 10:16:49 -050039{
40 ASSERT(mFunctions);
Geoff Langc05f7062015-03-10 09:50:57 -070041 mStateManager = new StateManagerGL(mFunctions, getRendererCaps());
Geoff Lang56cf9af2015-02-17 10:16:49 -050042}
Geoff Langf9a6f082015-01-22 13:32:49 -050043
44RendererGL::~RendererGL()
Geoff Lang94463d52015-02-18 13:09:37 -050045{
46 SafeDelete(mStateManager);
47}
Geoff Langf9a6f082015-01-22 13:32:49 -050048
49gl::Error RendererGL::flush()
50{
Geoff Lang2c919142015-04-01 14:44:13 -040051 mFunctions->flush();
52 return gl::Error(GL_NO_ERROR);
Geoff Langf9a6f082015-01-22 13:32:49 -050053}
54
55gl::Error RendererGL::finish()
56{
Geoff Lang2c919142015-04-01 14:44:13 -040057 mFunctions->finish();
58 return gl::Error(GL_NO_ERROR);
Geoff Langf9a6f082015-01-22 13:32:49 -050059}
60
61gl::Error RendererGL::drawArrays(const gl::Data &data, GLenum mode,
62 GLint first, GLsizei count, GLsizei instances)
63{
Geoff Lang7c82bc42015-03-09 16:18:08 -040064 gl::Error error = mStateManager->setDrawArraysState(data, first, count);
65 if (error.isError())
66 {
67 return error;
68 }
69
Geoff Langd6e50872015-02-24 12:42:26 -050070 mFunctions->drawArrays(mode, first, count);
71
72 return gl::Error(GL_NO_ERROR);
Geoff Langf9a6f082015-01-22 13:32:49 -050073}
74
75gl::Error RendererGL::drawElements(const gl::Data &data, GLenum mode, GLsizei count, GLenum type,
76 const GLvoid *indices, GLsizei instances,
77 const RangeUI &indexRange)
78{
Geoff Langd6e50872015-02-24 12:42:26 -050079 if (instances > 0)
80 {
81 UNIMPLEMENTED();
82 }
83
Geoff Lang7c82bc42015-03-09 16:18:08 -040084 const GLvoid *drawIndexPointer = nullptr;
85 gl::Error error = mStateManager->setDrawElementsState(data, count, type, indices, &drawIndexPointer);
86 if (error.isError())
87 {
88 return error;
89 }
90
91 mFunctions->drawElements(mode, count, type, drawIndexPointer);
Geoff Langd6e50872015-02-24 12:42:26 -050092
93 return gl::Error(GL_NO_ERROR);
Geoff Langf9a6f082015-01-22 13:32:49 -050094}
95
96CompilerImpl *RendererGL::createCompiler(const gl::Data &data)
97{
Geoff Langc4152832015-02-20 09:57:29 -050098 return new CompilerGL(data);
Geoff Langf9a6f082015-01-22 13:32:49 -050099}
100
101ShaderImpl *RendererGL::createShader(GLenum type)
102{
Geoff Lang295ed4c2015-02-20 09:58:25 -0500103 return new ShaderGL(type, mFunctions);
Geoff Langf9a6f082015-01-22 13:32:49 -0500104}
105
106ProgramImpl *RendererGL::createProgram()
107{
Geoff Langb1f435e2015-02-20 10:01:01 -0500108 return new ProgramGL(mFunctions, mStateManager);
Geoff Langf9a6f082015-01-22 13:32:49 -0500109}
110
111DefaultAttachmentImpl *RendererGL::createDefaultAttachment(GLenum type, egl::Surface *surface)
112{
Geoff Lang1aca9222015-03-19 12:02:50 -0400113 return new DefaultAttachmentGL(type, surface);
Geoff Lang4ad17092015-03-10 16:47:44 -0400114}
115
116FramebufferImpl *RendererGL::createDefaultFramebuffer(const gl::Framebuffer::Data &data)
117{
118 return new FramebufferGL(data, mFunctions, mStateManager, true);
Geoff Langf9a6f082015-01-22 13:32:49 -0500119}
120
Jamie Madilld1405e52015-03-05 15:41:39 -0500121FramebufferImpl *RendererGL::createFramebuffer(const gl::Framebuffer::Data &data)
Geoff Langf9a6f082015-01-22 13:32:49 -0500122{
Geoff Lang4ad17092015-03-10 16:47:44 -0400123 return new FramebufferGL(data, mFunctions, mStateManager, false);
Geoff Langf9a6f082015-01-22 13:32:49 -0500124}
125
126TextureImpl *RendererGL::createTexture(GLenum target)
127{
Geoff Langc05f7062015-03-10 09:50:57 -0700128 return new TextureGL(target, mFunctions, mStateManager);
Geoff Langf9a6f082015-01-22 13:32:49 -0500129}
130
131RenderbufferImpl *RendererGL::createRenderbuffer()
132{
Geoff Langcd69f1c2015-03-18 14:33:23 -0400133 return new RenderbufferGL(mFunctions, mStateManager);
Geoff Langf9a6f082015-01-22 13:32:49 -0500134}
135
136BufferImpl *RendererGL::createBuffer()
137{
Geoff Lang36c79012015-02-24 11:47:20 -0500138 return new BufferGL(mFunctions, mStateManager);
Geoff Langf9a6f082015-01-22 13:32:49 -0500139}
140
141VertexArrayImpl *RendererGL::createVertexArray()
142{
Geoff Langba4c4a82015-02-24 12:38:46 -0500143 return new VertexArrayGL(mFunctions, mStateManager);
Geoff Langf9a6f082015-01-22 13:32:49 -0500144}
145
146QueryImpl *RendererGL::createQuery(GLenum type)
147{
148 return new QueryGL(type);
149}
150
151FenceNVImpl *RendererGL::createFenceNV()
152{
153 return new FenceNVGL();
154}
155
156FenceSyncImpl *RendererGL::createFenceSync()
157{
158 return new FenceSyncGL();
159}
160
161TransformFeedbackImpl *RendererGL::createTransformFeedback()
162{
163 return new TransformFeedbackGL();
164}
165
166void RendererGL::notifyDeviceLost()
167{
168 UNIMPLEMENTED();
169}
170
171bool RendererGL::isDeviceLost() const
172{
173 UNIMPLEMENTED();
174 return bool();
175}
176
177bool RendererGL::testDeviceLost()
178{
179 UNIMPLEMENTED();
180 return bool();
181}
182
183bool RendererGL::testDeviceResettable()
184{
185 UNIMPLEMENTED();
186 return bool();
187}
188
189VendorID RendererGL::getVendorId() const
190{
191 UNIMPLEMENTED();
192 return VendorID();
193}
194
195std::string RendererGL::getVendorString() const
196{
197 UNIMPLEMENTED();
198 return std::string();
199}
200
201std::string RendererGL::getRendererDescription() const
202{
Geoff Langf1e85922015-02-23 14:40:04 -0500203 //UNIMPLEMENTED();
Geoff Langf9a6f082015-01-22 13:32:49 -0500204 return std::string();
205}
206
207void RendererGL::generateCaps(gl::Caps *outCaps, gl::TextureCapsMap* outTextureCaps, gl::Extensions *outExtensions) const
208{
Geoff Langddc74462015-02-25 11:48:09 -0500209 nativegl_gl::GenerateCaps(mFunctions, outCaps, outTextureCaps, outExtensions);
Geoff Langf9a6f082015-01-22 13:32:49 -0500210}
211
212Workarounds RendererGL::generateWorkarounds() const
213{
214 Workarounds workarounds;
215 return workarounds;
216}
217
218}