Commit f0955f15 by Geoff Lang

Update the samples and tests to use eglGetPlatformDisplayEXT.

BUG=angle:490 Change-Id: I5a685e42089377b5c600cd1f7ca8bd9a6654b3ba Reviewed-on: https://chromium-review.googlesource.com/204939Reviewed-by: 's avatarBrandon Jones <bajones@chromium.org> Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 591e6afe
...@@ -143,7 +143,7 @@ class PostSubBufferSample : public SampleApplication ...@@ -143,7 +143,7 @@ class PostSubBufferSample : public SampleApplication
// Instead of letting the application call eglSwapBuffers, call eglPostSubBufferNV here instead // Instead of letting the application call eglSwapBuffers, call eglPostSubBufferNV here instead
size_t windowWidth = getWindow()->getWidth(); size_t windowWidth = getWindow()->getWidth();
size_t windowHeight = getWindow()->getHeight(); size_t windowHeight = getWindow()->getHeight();
EGLDisplay display = getWindow()->getDisplay(); EGLDisplay display = getDisplay();
EGLSurface surface = getSurface(); EGLSurface surface = getSurface();
mPostSubBufferNV(display, surface, 60, 60, windowWidth - 120, windowHeight - 120); mPostSubBufferNV(display, surface, 60, 60, windowWidth - 120, windowHeight - 120);
} }
......
...@@ -14,9 +14,10 @@ ...@@ -14,9 +14,10 @@
#endif #endif
SampleApplication::SampleApplication(const std::string& name, size_t width, size_t height, SampleApplication::SampleApplication(const std::string& name, size_t width, size_t height,
EGLint glesMajorVersion, RendererType requestedRenderer) EGLint glesMajorVersion, EGLint requestedRenderer)
: mSurface(EGL_NO_SURFACE), : mSurface(EGL_NO_SURFACE),
mContext(EGL_NO_CONTEXT), mContext(EGL_NO_CONTEXT),
mDisplay(EGL_NO_DISPLAY),
mClientVersion(glesMajorVersion), mClientVersion(glesMajorVersion),
mRequestedRenderer(requestedRenderer), mRequestedRenderer(requestedRenderer),
mWidth(width), mWidth(width),
...@@ -53,7 +54,7 @@ void SampleApplication::draw() ...@@ -53,7 +54,7 @@ void SampleApplication::draw()
void SampleApplication::swap() void SampleApplication::swap()
{ {
eglSwapBuffers(mWindow->getDisplay(), mSurface); eglSwapBuffers(mDisplay, mSurface);
} }
Window *SampleApplication::getWindow() const Window *SampleApplication::getWindow() const
...@@ -66,6 +67,11 @@ EGLConfig SampleApplication::getConfig() const ...@@ -66,6 +67,11 @@ EGLConfig SampleApplication::getConfig() const
return mConfig; return mConfig;
} }
EGLDisplay SampleApplication::getDisplay() const
{
return mDisplay;
}
EGLSurface SampleApplication::getSurface() const EGLSurface SampleApplication::getSurface() const
{ {
return mSurface; return mSurface;
...@@ -78,7 +84,7 @@ EGLContext SampleApplication::getContext() const ...@@ -78,7 +84,7 @@ EGLContext SampleApplication::getContext() const
int SampleApplication::run() int SampleApplication::run()
{ {
if (!mWindow->initialize(mName, mWidth, mHeight, mRequestedRenderer)) if (!mWindow->initialize(mName, mWidth, mHeight))
{ {
return -1; return -1;
} }
...@@ -150,6 +156,39 @@ bool SampleApplication::popEvent(Event *event) ...@@ -150,6 +156,39 @@ bool SampleApplication::popEvent(Event *event)
bool SampleApplication::initializeGL() bool SampleApplication::initializeGL()
{ {
PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT = reinterpret_cast<PFNEGLGETPLATFORMDISPLAYEXTPROC>(eglGetProcAddress("eglGetPlatformDisplayEXT"));
if (!eglGetPlatformDisplayEXT)
{
return false;
}
const EGLint displayAttributes[] =
{
EGL_PLATFORM_ANGLE_TYPE_ANGLE, mRequestedRenderer,
EGL_NONE,
};
mDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, mWindow->getNativeDisplay(), displayAttributes);
if (mDisplay == EGL_NO_DISPLAY)
{
destroyGL();
return false;
}
EGLint majorVersion, minorVersion;
if (!eglInitialize(mDisplay, &majorVersion, &minorVersion))
{
destroyGL();
return false;
}
eglBindAPI(EGL_OPENGL_ES_API);
if (eglGetError() != EGL_SUCCESS)
{
destroyGL();
return false;
}
const EGLint configAttributes[] = const EGLint configAttributes[] =
{ {
EGL_RED_SIZE, 8, EGL_RED_SIZE, 8,
...@@ -163,7 +202,7 @@ bool SampleApplication::initializeGL() ...@@ -163,7 +202,7 @@ bool SampleApplication::initializeGL()
}; };
EGLint configCount; EGLint configCount;
if (!eglChooseConfig(mWindow->getDisplay(), configAttributes, &mConfig, 1, &configCount) || (configCount != 1)) if (!eglChooseConfig(mDisplay, configAttributes, &mConfig, 1, &configCount) || (configCount != 1))
{ {
destroyGL(); destroyGL();
return false; return false;
...@@ -175,11 +214,11 @@ bool SampleApplication::initializeGL() ...@@ -175,11 +214,11 @@ bool SampleApplication::initializeGL()
EGL_NONE, EGL_NONE, EGL_NONE, EGL_NONE,
}; };
mSurface = eglCreateWindowSurface(mWindow->getDisplay(), mConfig, mWindow->getNativeWindow(), surfaceAttributes); mSurface = eglCreateWindowSurface(mDisplay, mConfig, mWindow->getNativeWindow(), surfaceAttributes);
if (mSurface == EGL_NO_SURFACE) if (mSurface == EGL_NO_SURFACE)
{ {
eglGetError(); // Clear error and try again eglGetError(); // Clear error and try again
mSurface = eglCreateWindowSurface(mWindow->getDisplay(), mConfig, NULL, NULL); mSurface = eglCreateWindowSurface(mDisplay, mConfig, NULL, NULL);
} }
if (eglGetError() != EGL_SUCCESS) if (eglGetError() != EGL_SUCCESS)
...@@ -193,14 +232,14 @@ bool SampleApplication::initializeGL() ...@@ -193,14 +232,14 @@ bool SampleApplication::initializeGL()
EGL_CONTEXT_CLIENT_VERSION, mClientVersion, EGL_CONTEXT_CLIENT_VERSION, mClientVersion,
EGL_NONE EGL_NONE
}; };
mContext = eglCreateContext(mWindow->getDisplay(), mConfig, NULL, contextAttibutes); mContext = eglCreateContext(mDisplay, mConfig, NULL, contextAttibutes);
if (eglGetError() != EGL_SUCCESS) if (eglGetError() != EGL_SUCCESS)
{ {
destroyGL(); destroyGL();
return false; return false;
} }
eglMakeCurrent(mWindow->getDisplay(), mSurface, mSurface, mContext); eglMakeCurrent(mDisplay, mSurface, mSurface, mContext);
if (eglGetError() != EGL_SUCCESS) if (eglGetError() != EGL_SUCCESS)
{ {
destroyGL(); destroyGL();
...@@ -208,16 +247,20 @@ bool SampleApplication::initializeGL() ...@@ -208,16 +247,20 @@ bool SampleApplication::initializeGL()
} }
// Turn off vsync // Turn off vsync
eglSwapInterval(mWindow->getDisplay(), 0); eglSwapInterval(mDisplay, 0);
return true; return true;
} }
void SampleApplication::destroyGL() void SampleApplication::destroyGL()
{ {
eglDestroySurface(mWindow->getDisplay(), mSurface); eglDestroySurface(mDisplay, mSurface);
mSurface = 0; mSurface = 0;
eglDestroyContext(mWindow->getDisplay(), mContext); eglDestroyContext(mDisplay, mContext);
mContext = 0; mContext = 0;
eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglTerminate(mDisplay);
mDisplay = EGL_NO_DISPLAY;
} }
...@@ -28,7 +28,7 @@ class SampleApplication ...@@ -28,7 +28,7 @@ class SampleApplication
{ {
public: 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); EGLint glesMajorVersion = 2, EGLint requestedRenderer = EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE);
virtual ~SampleApplication(); virtual ~SampleApplication();
virtual bool initialize(); virtual bool initialize();
...@@ -41,6 +41,7 @@ class SampleApplication ...@@ -41,6 +41,7 @@ class SampleApplication
Window *getWindow() const; Window *getWindow() const;
EGLConfig getConfig() const; EGLConfig getConfig() const;
EGLDisplay getDisplay() const;
EGLSurface getSurface() const; EGLSurface getSurface() const;
EGLContext getContext() const; EGLContext getContext() const;
...@@ -54,11 +55,12 @@ class SampleApplication ...@@ -54,11 +55,12 @@ class SampleApplication
void destroyGL(); void destroyGL();
EGLConfig mConfig; EGLConfig mConfig;
EGLDisplay mDisplay;
EGLSurface mSurface; EGLSurface mSurface;
EGLContext mContext; EGLContext mContext;
GLuint mClientVersion; GLuint mClientVersion;
RendererType mRequestedRenderer; EGLint mRequestedRenderer;
size_t mWidth; size_t mWidth;
size_t mHeight; size_t mHeight;
std::string mName; std::string mName;
......
...@@ -13,25 +13,18 @@ ...@@ -13,25 +13,18 @@
#include <EGL/eglext.h> #include <EGL/eglext.h>
#include <list> #include <list>
enum RendererType
{
RENDERER_D3D9,
RENDERER_D3D11
};
class Window class Window
{ {
public: public:
Window(); Window();
virtual bool initialize(const std::string &name, size_t width, size_t height, RendererType requestedRenderer) = 0; virtual bool initialize(const std::string &name, size_t width, size_t height) = 0;
virtual void destroy() = 0; virtual void destroy() = 0;
int getWidth() const; int getWidth() const;
int getHeight() const; int getHeight() const;
virtual void setMousePosition(int x, int y) = 0; virtual void setMousePosition(int x, int y) = 0;
virtual EGLDisplay getDisplay() const = 0;
virtual EGLNativeWindowType getNativeWindow() const = 0; virtual EGLNativeWindowType getNativeWindow() const = 0;
virtual EGLNativeDisplayType getNativeDisplay() const = 0; virtual EGLNativeDisplayType getNativeDisplay() const = 0;
......
...@@ -363,7 +363,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) ...@@ -363,7 +363,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Win32Window::Win32Window() Win32Window::Win32Window()
: mClassName(), : mClassName(),
mDisplay(0),
mNativeWindow(0), mNativeWindow(0),
mNativeDisplay(0) mNativeDisplay(0)
{ {
...@@ -374,7 +373,7 @@ Win32Window::~Win32Window() ...@@ -374,7 +373,7 @@ Win32Window::~Win32Window()
destroy(); destroy();
} }
bool Win32Window::initialize(const std::string &name, size_t width, size_t height, RendererType requestedRenderer) bool Win32Window::initialize(const std::string &name, size_t width, size_t height)
{ {
destroy(); destroy();
...@@ -418,44 +417,11 @@ bool Win32Window::initialize(const std::string &name, size_t width, size_t heigh ...@@ -418,44 +417,11 @@ bool Win32Window::initialize(const std::string &name, size_t width, size_t heigh
return false; return false;
} }
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);
}
EGLint majorVersion, minorVersion;
if (!eglInitialize(mDisplay, &majorVersion, &minorVersion))
{
destroy();
return false;
}
eglBindAPI(EGL_OPENGL_ES_API);
if (eglGetError() != EGL_SUCCESS)
{
destroy();
return false;
}
return true; return true;
} }
void Win32Window::destroy() void Win32Window::destroy()
{ {
if (mDisplay != EGL_NO_DISPLAY)
{
eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglTerminate(mDisplay);
mDisplay = EGL_NO_DISPLAY;
}
if (mNativeDisplay) if (mNativeDisplay)
{ {
ReleaseDC(mNativeWindow, mNativeDisplay); ReleaseDC(mNativeWindow, mNativeDisplay);
...@@ -471,11 +437,6 @@ void Win32Window::destroy() ...@@ -471,11 +437,6 @@ void Win32Window::destroy()
UnregisterClassA(mClassName.c_str(), NULL); UnregisterClassA(mClassName.c_str(), NULL);
} }
EGLDisplay Win32Window::getDisplay() const
{
return mDisplay;
}
EGLNativeWindowType Win32Window::getNativeWindow() const EGLNativeWindowType Win32Window::getNativeWindow() const
{ {
return mNativeWindow; return mNativeWindow;
......
...@@ -17,10 +17,9 @@ class Win32Window : public Window ...@@ -17,10 +17,9 @@ class Win32Window : public Window
Win32Window(); Win32Window();
~Win32Window(); ~Win32Window();
bool initialize(const std::string &name, size_t width, size_t height, RendererType requestedRenderer); bool initialize(const std::string &name, size_t width, size_t height);
void destroy(); void destroy();
EGLDisplay getDisplay() const;
EGLNativeWindowType getNativeWindow() const; EGLNativeWindowType getNativeWindow() const;
EGLNativeDisplayType getNativeDisplay() const; EGLNativeDisplayType getNativeDisplay() const;
...@@ -34,7 +33,6 @@ class Win32Window : public Window ...@@ -34,7 +33,6 @@ class Win32Window : public Window
private: private:
std::string mClassName; std::string mClassName;
EGLDisplay mDisplay;
EGLNativeWindowType mNativeWindow; EGLNativeWindowType mNativeWindow;
EGLNativeDisplayType mNativeDisplay; EGLNativeDisplayType mNativeDisplay;
}; };
......
#include "ANGLETest.h" #include "ANGLETest.h"
ANGLETest::ANGLETest() ANGLETest::ANGLETest()
: mClientVersion(2), : mTestPlatform(EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE),
mClientVersion(2),
mWidth(1280), mWidth(1280),
mHeight(720), mHeight(720),
mRedBits(-1), mRedBits(-1),
...@@ -248,6 +249,39 @@ bool ANGLETest::isMultisampleEnabled() const ...@@ -248,6 +249,39 @@ bool ANGLETest::isMultisampleEnabled() const
bool ANGLETest::createEGLContext() bool ANGLETest::createEGLContext()
{ {
PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT = reinterpret_cast<PFNEGLGETPLATFORMDISPLAYEXTPROC>(eglGetProcAddress("eglGetPlatformDisplayEXT"));
if (!eglGetPlatformDisplayEXT)
{
return false;
}
const EGLint displayAttributes[] =
{
EGL_PLATFORM_ANGLE_TYPE_ANGLE, mTestPlatform,
EGL_NONE,
};
mDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, mNativeDisplay, displayAttributes);
if (mDisplay == EGL_NO_DISPLAY)
{
destroyEGLContext();
return false;
}
EGLint majorVersion, minorVersion;
if (!eglInitialize(mDisplay, &majorVersion, &minorVersion))
{
destroyEGLContext();
return false;
}
eglBindAPI(EGL_OPENGL_ES_API);
if (eglGetError() != EGL_SUCCESS)
{
destroyEGLContext();
return false;
}
const EGLint configAttributes[] = const EGLint configAttributes[] =
{ {
EGL_RED_SIZE, (mRedBits >= 0) ? mRedBits : EGL_DONT_CARE, EGL_RED_SIZE, (mRedBits >= 0) ? mRedBits : EGL_DONT_CARE,
...@@ -315,8 +349,10 @@ bool ANGLETest::createEGLContext() ...@@ -315,8 +349,10 @@ bool ANGLETest::createEGLContext()
bool ANGLETest::destroyEGLContext() bool ANGLETest::destroyEGLContext()
{ {
eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglDestroySurface(mDisplay, mSurface); eglDestroySurface(mDisplay, mSurface);
eglDestroyContext(mDisplay, mContext); eglDestroyContext(mDisplay, mContext);
eglTerminate(mDisplay);
return true; return true;
} }
......
...@@ -82,6 +82,8 @@ class ANGLETest : public testing::Test ...@@ -82,6 +82,8 @@ class ANGLETest : public testing::Test
bool createEGLContext(); bool createEGLContext();
bool destroyEGLContext(); bool destroyEGLContext();
EGLint mTestPlatform;
int mClientVersion; int mClientVersion;
int mWidth; int mWidth;
int mHeight; int mHeight;
......
...@@ -53,34 +53,11 @@ bool ANGLETest::InitTestWindow() ...@@ -53,34 +53,11 @@ bool ANGLETest::InitTestWindow()
return false; return false;
} }
mDisplay = eglGetDisplay(mNativeDisplay);
if(mDisplay == EGL_NO_DISPLAY)
{
mDisplay = eglGetDisplay((EGLNativeDisplayType)EGL_DEFAULT_DISPLAY);
}
EGLint majorVersion, minorVersion;
if (!eglInitialize(mDisplay, &majorVersion, &minorVersion))
{
DestroyTestWindow();
return false;
}
eglBindAPI(EGL_OPENGL_ES_API);
if (eglGetError() != EGL_SUCCESS)
{
DestroyTestWindow();
return false;
}
return true; return true;
} }
bool ANGLETest::DestroyTestWindow() bool ANGLETest::DestroyTestWindow()
{ {
eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglTerminate(mDisplay);
if (mNativeDisplay) if (mNativeDisplay)
{ {
ReleaseDC(mNativeWindow, mNativeDisplay); ReleaseDC(mNativeWindow, mNativeDisplay);
......
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