blob: 4e164b8b1c3dbf97987cebbbe10a51767fe3e90a [file] [log] [blame]
shannon.woods@transgaming.combdf2d802013-02-28 23:16:20 +00001#include "precompiled.h"
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +00002//
shannon.woods@transgaming.com45262362013-01-25 21:51:27 +00003// Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +00004// Use of this source code is governed by a BSD-style license that can be
5// found in the LICENSE file.
6//
7
8// Renderer.cpp: Implements EGL dependencies for creating and destroying Renderer instances.
9
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000010#include <EGL/eglext.h>
daniel@transgaming.com25e16af2012-11-28 21:05:57 +000011#include "libGLESv2/main.h"
12#include "libGLESv2/Program.h"
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000013#include "libGLESv2/renderer/Renderer.h"
shannonwoods@chromium.orga2ecfcc2013-05-30 00:11:59 +000014#include "common/utilities.h"
Al Patrick3c6344e2013-09-23 14:57:00 -040015#include "third_party/trace_event/trace_event.h"
Jamie Madillbde4c2f2014-03-21 10:42:10 -040016#include "libGLESv2/Shader.h"
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000017
Geoff Lang2a419242014-02-10 13:00:44 -050018#if defined (ANGLE_ENABLE_D3D9)
19#include "libGLESv2/renderer/d3d9/Renderer9.h"
20#endif // ANGLE_ENABLE_D3D9
21
22#if defined (ANGLE_ENABLE_D3D11)
23#include "libGLESv2/renderer/d3d11/Renderer11.h"
24#endif // ANGLE_ENABLE_D3D11
25
26#if !defined(ANGLE_DEFAULT_D3D11)
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000027// Enables use of the Direct3D 11 API for a default display, when available
Jamie Madillf81e69b2014-03-26 14:05:48 -040028#define ANGLE_DEFAULT_D3D11 0
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000029#endif
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000030
daniel@transgaming.com25e16af2012-11-28 21:05:57 +000031namespace rx
32{
33
34Renderer::Renderer(egl::Display *display) : mDisplay(display)
35{
shannonwoods@chromium.orge9438a52013-05-30 00:09:25 +000036 mCurrentClientVersion = 2;
daniel@transgaming.com25e16af2012-11-28 21:05:57 +000037}
38
Jamie Madillbde4c2f2014-03-21 10:42:10 -040039Renderer::~Renderer()
40{
41 gl::Shader::releaseCompiler();
42}
43
daniel@transgaming.com25e16af2012-11-28 21:05:57 +000044}
45
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000046extern "C"
47{
48
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000049rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayType displayId)
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000050{
Geoff Lang2a419242014-02-10 13:00:44 -050051#if defined(ANGLE_ENABLE_D3D11)
52 if (ANGLE_DEFAULT_D3D11 ||
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000053 displayId == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ||
54 displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE)
daniel@transgaming.comdef9f0f2012-11-28 20:53:20 +000055 {
Geoff Lang2a419242014-02-10 13:00:44 -050056 rx::Renderer11 *renderer = new rx::Renderer11(display, hDc);
57 if (renderer->initialize() == EGL_SUCCESS)
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000058 {
59 return renderer;
60 }
Geoff Lang2a419242014-02-10 13:00:44 -050061 else
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000062 {
Geoff Lang2a419242014-02-10 13:00:44 -050063 // Failed to create a D3D11 renderer, try D3D9
64 SafeDelete(renderer);
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000065 }
daniel@transgaming.comdef9f0f2012-11-28 20:53:20 +000066 }
Geoff Lang2a419242014-02-10 13:00:44 -050067#endif
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000068
Geoff Lang2a419242014-02-10 13:00:44 -050069#if defined(ANGLE_ENABLE_D3D9)
70 if (displayId != EGL_D3D11_ONLY_DISPLAY_ANGLE)
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000071 {
Geoff Lang2a419242014-02-10 13:00:44 -050072 bool softwareDevice = (displayId == EGL_SOFTWARE_DISPLAY_ANGLE);
73 rx::Renderer9 *renderer = new rx::Renderer9(display, hDc, softwareDevice);
74 if (renderer->initialize() == EGL_SUCCESS)
75 {
76 return renderer;
77 }
78 else
79 {
80 SafeDelete(renderer);
81 }
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000082 }
Geoff Lang2a419242014-02-10 13:00:44 -050083#endif
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000084
85 return NULL;
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000086}
87
88void glDestroyRenderer(rx::Renderer *renderer)
89{
90 delete renderer;
91}
92
Geoff Lang2a419242014-02-10 13:00:44 -050093}