Create a Direct3D 11 device, if enabled and available.
TRAC #21925
Signed-off-by: Daniel Koch
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1399 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer.cpp b/src/libGLESv2/renderer/Renderer.cpp
index f6c200d..8169bf7 100644
--- a/src/libGLESv2/renderer/Renderer.cpp
+++ b/src/libGLESv2/renderer/Renderer.cpp
@@ -8,13 +8,51 @@
#include "libGLESv2/renderer/Renderer.h"
#include "libGLESv2/renderer/Renderer9.h"
+#include "libGLESv2/renderer/Renderer11.h"
+
+#if !defined(ANGLE_ENABLE_D3D11)
+// Enables use of the Direct3D 11 API, when available
+#define ANGLE_ENABLE_D3D11 0
+#endif
extern "C"
{
rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, bool softwareDevice)
{
- return new rx::Renderer9(display, hDc, softwareDevice);
+ rx::Renderer *renderer = NULL;
+ EGLint status = EGL_BAD_ALLOC;
+
+ #if ANGLE_ENABLE_D3D11
+ renderer = new rx::Renderer11(display, hDc);
+
+ if (renderer)
+ {
+ status = renderer->initialize();
+ }
+
+ if (status == EGL_SUCCESS)
+ {
+ return renderer;
+ }
+
+ // Failed to create a D3D11 renderer, try creating a D3D9 renderer
+ delete renderer;
+ #endif
+
+ renderer = new rx::Renderer9(display, hDc, softwareDevice);
+
+ if (renderer)
+ {
+ status = renderer->initialize();
+ }
+
+ if (status == EGL_SUCCESS)
+ {
+ return renderer;
+ }
+
+ return NULL;
}
void glDestroyRenderer(rx::Renderer *renderer)