blob: 9aa6cee0193d1b8aa867f7c24034693944fe7a04 [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
daniel@transgaming.comdef9f0f2012-11-28 20:53:20 +000026 if (ANGLE_ENABLE_D3D11)
27 {
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000028 renderer = new rx::Renderer11(display, hDc);
29
30 if (renderer)
31 {
32 status = renderer->initialize();
33 }
34
35 if (status == EGL_SUCCESS)
36 {
37 return renderer;
38 }
39
40 // Failed to create a D3D11 renderer, try creating a D3D9 renderer
41 delete renderer;
daniel@transgaming.comdef9f0f2012-11-28 20:53:20 +000042 }
daniel@transgaming.comc1e26342012-11-28 19:31:16 +000043
44 renderer = new rx::Renderer9(display, hDc, softwareDevice);
45
46 if (renderer)
47 {
48 status = renderer->initialize();
49 }
50
51 if (status == EGL_SUCCESS)
52 {
53 return renderer;
54 }
55
56 return NULL;
daniel@transgaming.comae4f4d42012-11-28 19:31:06 +000057}
58
59void glDestroyRenderer(rx::Renderer *renderer)
60{
61 delete renderer;
62}
63
64}