blob: 92594a4d5664f4e3734ef0fd26b19b57565aa6fa [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 Lang64c83242014-05-06 10:49:24 -040072 rx::Renderer9 *renderer = new rx::Renderer9(display, hDc);
Geoff Lang2a419242014-02-10 13:00:44 -050073 if (renderer->initialize() == EGL_SUCCESS)
74 {
75 return renderer;
76 }
77 else
78 {
79 SafeDelete(renderer);
80 }
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000081 }
Geoff Lang2a419242014-02-10 13:00:44 -050082#endif
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000083
84 return NULL;
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000085}
86
87void glDestroyRenderer(rx::Renderer *renderer)
88{
89 delete renderer;
90}
91
Geoff Lang2a419242014-02-10 13:00:44 -050092}