blob: 78c4b2da7c1e2b179d988638edf34e3ed8d4aac0 [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"
Geoff Langd47e0fc2013-08-29 11:40:43 -040014#include "libGLESv2/renderer/d3d9/Renderer9.h"
15#include "libGLESv2/renderer/d3d11/Renderer11.h"
shannonwoods@chromium.orga2ecfcc2013-05-30 00:11:59 +000016#include "common/utilities.h"
Al Patrick3c6344e2013-09-23 14:57:00 -040017#include "third_party/trace_event/trace_event.h"
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000018
19#if !defined(ANGLE_ENABLE_D3D11)
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000020// Enables use of the Direct3D 11 API for a default display, when available
Geoff Langd47e0fc2013-08-29 11:40:43 -040021#define ANGLE_ENABLE_D3D11 1
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000022#endif
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000023
daniel@transgaming.com25e16af2012-11-28 21:05:57 +000024namespace rx
25{
26
27Renderer::Renderer(egl::Display *display) : mDisplay(display)
28{
shannonwoods@chromium.orge9438a52013-05-30 00:09:25 +000029 mCurrentClientVersion = 2;
daniel@transgaming.com25e16af2012-11-28 21:05:57 +000030}
31
daniel@transgaming.com25e16af2012-11-28 21:05:57 +000032}
33
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000034extern "C"
35{
36
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000037rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayType displayId)
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000038{
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000039 rx::Renderer *renderer = NULL;
40 EGLint status = EGL_BAD_ALLOC;
41
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000042 if (ANGLE_ENABLE_D3D11 ||
43 displayId == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ||
44 displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE)
daniel@transgaming.comdef9f0f2012-11-28 20:53:20 +000045 {
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000046 renderer = new rx::Renderer11(display, hDc);
47
48 if (renderer)
49 {
50 status = renderer->initialize();
51 }
52
53 if (status == EGL_SUCCESS)
54 {
55 return renderer;
56 }
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000057 else if (displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE)
58 {
59 return NULL;
60 }
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000061
62 // Failed to create a D3D11 renderer, try creating a D3D9 renderer
63 delete renderer;
daniel@transgaming.comdef9f0f2012-11-28 20:53:20 +000064 }
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000065
shannonwoods@chromium.orgeff3a122013-05-30 00:10:04 +000066 bool softwareDevice = (displayId == EGL_SOFTWARE_DISPLAY_ANGLE);
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000067 renderer = new rx::Renderer9(display, hDc, softwareDevice);
68
69 if (renderer)
70 {
71 status = renderer->initialize();
72 }
73
74 if (status == EGL_SUCCESS)
75 {
76 return renderer;
77 }
78
79 return NULL;
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000080}
81
82void glDestroyRenderer(rx::Renderer *renderer)
83{
84 delete renderer;
85}
86
87}