blob: 8169bf718c02efdfa913edc56ace27c362dce4e2 [file] [log] [blame]
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +00001//
2// Copyright (c) 2012 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// Renderer.cpp: Implements EGL dependencies for creating and destroying Renderer instances.
8
9#include "libGLESv2/renderer/Renderer.h"
10#include "libGLESv2/renderer/Renderer9.h"
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000011#include "libGLESv2/renderer/Renderer11.h"
12
13#if !defined(ANGLE_ENABLE_D3D11)
14// Enables use of the Direct3D 11 API, when available
15#define ANGLE_ENABLE_D3D11 0
16#endif
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000017
18extern "C"
19{
20
21rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, bool softwareDevice)
22{
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000023 rx::Renderer *renderer = NULL;
24 EGLint status = EGL_BAD_ALLOC;
25
26 #if ANGLE_ENABLE_D3D11
27 renderer = new rx::Renderer11(display, hDc);
28
29 if (renderer)
30 {
31 status = renderer->initialize();
32 }
33
34 if (status == EGL_SUCCESS)
35 {
36 return renderer;
37 }
38
39 // Failed to create a D3D11 renderer, try creating a D3D9 renderer
40 delete renderer;
41 #endif
42
43 renderer = new rx::Renderer9(display, hDc, softwareDevice);
44
45 if (renderer)
46 {
47 status = renderer->initialize();
48 }
49
50 if (status == EGL_SUCCESS)
51 {
52 return renderer;
53 }
54
55 return NULL;
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000056}
57
58void glDestroyRenderer(rx::Renderer *renderer)
59{
60 delete renderer;
61}
62
63}