blob: d24e90de8d4be2c6d3bcac013485024ce498b23a [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"
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000016
Geoff Lang2a419242014-02-10 13:00:44 -050017#if defined (ANGLE_ENABLE_D3D9)
18#include "libGLESv2/renderer/d3d9/Renderer9.h"
19#endif // ANGLE_ENABLE_D3D9
20
21#if defined (ANGLE_ENABLE_D3D11)
22#include "libGLESv2/renderer/d3d11/Renderer11.h"
23#endif // ANGLE_ENABLE_D3D11
24
25#if !defined(ANGLE_DEFAULT_D3D11)
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000026// Enables use of the Direct3D 11 API for a default display, when available
Geoff Lang2a419242014-02-10 13:00:44 -050027#define ANGLE_DEFAULT_D3D11 1
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000028#endif
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000029
daniel@transgaming.com25e16af2012-11-28 21:05:57 +000030namespace rx
31{
32
33Renderer::Renderer(egl::Display *display) : mDisplay(display)
34{
shannonwoods@chromium.orge9438a52013-05-30 00:09:25 +000035 mCurrentClientVersion = 2;
daniel@transgaming.com25e16af2012-11-28 21:05:57 +000036}
37
daniel@transgaming.com25e16af2012-11-28 21:05:57 +000038}
39
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000040extern "C"
41{
42
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000043rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayType displayId)
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000044{
Geoff Lang2a419242014-02-10 13:00:44 -050045#if defined(ANGLE_ENABLE_D3D11)
46 if (ANGLE_DEFAULT_D3D11 ||
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000047 displayId == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ||
48 displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE)
daniel@transgaming.comdef9f0f2012-11-28 20:53:20 +000049 {
Geoff Lang2a419242014-02-10 13:00:44 -050050 rx::Renderer11 *renderer = new rx::Renderer11(display, hDc);
51 if (renderer->initialize() == EGL_SUCCESS)
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000052 {
53 return renderer;
54 }
Geoff Lang2a419242014-02-10 13:00:44 -050055 else
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000056 {
Geoff Lang2a419242014-02-10 13:00:44 -050057 // Failed to create a D3D11 renderer, try D3D9
58 SafeDelete(renderer);
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000059 }
daniel@transgaming.comdef9f0f2012-11-28 20:53:20 +000060 }
Geoff Lang2a419242014-02-10 13:00:44 -050061#endif
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000062
Geoff Lang2a419242014-02-10 13:00:44 -050063#if defined(ANGLE_ENABLE_D3D9)
64 if (displayId != EGL_D3D11_ONLY_DISPLAY_ANGLE)
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000065 {
Geoff Lang2a419242014-02-10 13:00:44 -050066 bool softwareDevice = (displayId == EGL_SOFTWARE_DISPLAY_ANGLE);
67 rx::Renderer9 *renderer = new rx::Renderer9(display, hDc, softwareDevice);
68 if (renderer->initialize() == EGL_SUCCESS)
69 {
70 return renderer;
71 }
72 else
73 {
74 SafeDelete(renderer);
75 }
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000076 }
Geoff Lang2a419242014-02-10 13:00:44 -050077#endif
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000078
79 return NULL;
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000080}
81
82void glDestroyRenderer(rx::Renderer *renderer)
83{
84 delete renderer;
85}
86
Geoff Lang2a419242014-02-10 13:00:44 -050087}