Commit 96e46cd6 by Jamie Madill

Allow sample projects to choose ES3 & D3D version.

Passing parameters from the sample constructor allows us to test ES3 functionality, as well as choose between D3D9 and 11. BUG=angle:521 Change-Id: I7b9543b399450f62c5415654e8026a7c218b7e37 Reviewed-on: https://chromium-review.googlesource.com/193292Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent d095bdaa
......@@ -13,8 +13,12 @@
#error unsupported OS.
#endif
SampleApplication::SampleApplication(const std::string& name, size_t width, size_t height)
: mClientVersion(2),
SampleApplication::SampleApplication(const std::string& name, size_t width, size_t height,
EGLint glesMajorVersion, RendererType requestedRenderer)
: mSurface(EGL_NO_SURFACE),
mContext(EGL_NO_CONTEXT),
mClientVersion(glesMajorVersion),
mRequestedRenderer(requestedRenderer),
mWidth(width),
mHeight(height),
mName(name),
......@@ -74,7 +78,12 @@ EGLContext SampleApplication::getContext() const
int SampleApplication::run()
{
if (!mWindow->initialize(mName, mWidth, mHeight) || !initializeGL())
if (!mWindow->initialize(mName, mWidth, mHeight, mRequestedRenderer))
{
return -1;
}
if (!initializeGL())
{
return -1;
}
......
......@@ -27,7 +27,8 @@
class SampleApplication
{
public:
SampleApplication(const std::string& name, size_t width, size_t height);
SampleApplication(const std::string& name, size_t width, size_t height,
EGLint glesMajorVersion = 2, RendererType requestedRenderer = RENDERER_D3D11);
virtual ~SampleApplication();
virtual bool initialize();
......@@ -57,6 +58,7 @@ class SampleApplication
EGLContext mContext;
GLuint mClientVersion;
RendererType mRequestedRenderer;
size_t mWidth;
size_t mHeight;
std::string mName;
......
......@@ -13,12 +13,18 @@
#include <EGL/eglext.h>
#include <list>
enum RendererType
{
RENDERER_D3D9,
RENDERER_D3D11
};
class Window
{
public:
Window();
virtual bool initialize(const std::string &name, size_t width, size_t height) = 0;
virtual bool initialize(const std::string &name, size_t width, size_t height, RendererType requestedRenderer) = 0;
virtual void destroy() = 0;
int getWidth() const;
......
......@@ -374,7 +374,7 @@ Win32Window::~Win32Window()
destroy();
}
bool Win32Window::initialize(const std::string &name, size_t width, size_t height)
bool Win32Window::initialize(const std::string &name, size_t width, size_t height, RendererType requestedRenderer)
{
destroy();
......@@ -418,7 +418,13 @@ bool Win32Window::initialize(const std::string &name, size_t width, size_t heigh
return false;
}
mDisplay = eglGetDisplay(mNativeDisplay);
EGLNativeDisplayType requestedDisplay = mNativeDisplay;
if (requestedRenderer == RENDERER_D3D11)
{
requestedDisplay = EGL_D3D11_ONLY_DISPLAY_ANGLE;
}
mDisplay = eglGetDisplay(requestedDisplay);
if (mDisplay == EGL_NO_DISPLAY)
{
mDisplay = eglGetDisplay((EGLNativeDisplayType)EGL_DEFAULT_DISPLAY);
......@@ -443,8 +449,11 @@ bool Win32Window::initialize(const std::string &name, size_t width, size_t heigh
void Win32Window::destroy()
{
eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglTerminate(mDisplay);
if (mDisplay != EGL_NO_DISPLAY)
{
eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglTerminate(mDisplay);
}
if (mNativeDisplay)
{
......
......@@ -17,7 +17,7 @@ class Win32Window : public Window
Win32Window();
~Win32Window();
bool initialize(const std::string &name, size_t width, size_t height);
bool initialize(const std::string &name, size_t width, size_t height, RendererType requestedRenderer);
void destroy();
EGLDisplay getDisplay() const;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment