1 #include "precompiled.h" 2 // 3 // Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved. 4 // 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 10 #include <EGL/eglext.h> 11 #include "libGLESv2/main.h" 12 #include "libGLESv2/Program.h" 13 #include "libGLESv2/renderer/Renderer.h" 14 #include "common/utilities.h" 15 #include "third_party/trace_event/trace_event.h" 16 #include "libGLESv2/Shader.h" 17 18 #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) 27 // Enables use of the Direct3D 11 API for a default display, when available 28 #define ANGLE_DEFAULT_D3D11 0 29 #endif 30 31 namespace rx 32 { 33 34 Renderer::Renderer(egl::Display *display) : mDisplay(display) 35 { 36 mCurrentClientVersion = 2; 37 } 38 39 Renderer::~Renderer() 40 { 41 gl::Shader::releaseCompiler(); 42 } 43 44 } 45 46 extern "C" 47 { 48 49 rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayType displayId) 50 { 51 #if defined(ANGLE_ENABLE_D3D11) 52 if (ANGLE_DEFAULT_D3D11 || 53 displayId == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE || 54 displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE) 55 { 56 rx::Renderer11 *renderer = new rx::Renderer11(display, hDc); 57 if (renderer->initialize() == EGL_SUCCESS) 58 { 59 return renderer; 60 } 61 else 62 { 63 // Failed to create a D3D11 renderer, try D3D9 64 SafeDelete(renderer); 65 } 66 } 67 #endif 68 69 #if defined(ANGLE_ENABLE_D3D9) 70 if (displayId != EGL_D3D11_ONLY_DISPLAY_ANGLE) 71 { 72 rx::Renderer9 *renderer = new rx::Renderer9(display, hDc); 73 if (renderer->initialize() == EGL_SUCCESS) 74 { 75 return renderer; 76 } 77 else 78 { 79 SafeDelete(renderer); 80 } 81 } 82 #endif 83 84 return NULL; 85 } 86 87 void glDestroyRenderer(rx::Renderer *renderer) 88 { 89 delete renderer; 90 } 91 92 } 93