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
// Instead of letting the application call eglSwapBuffers, call eglPostSubBufferNV here instead
size_t windowWidth = getWindow()->getWidth();
size_t windowHeight = getWindow()->getHeight();
EGLDisplay display = getWindow()->getDisplay();
EGLDisplay display = getDisplay();
EGLSurface surface = getSurface();
mPostSubBufferNV(display, surface, 60, 60, windowWidth - 120, windowHeight - 120);
}
......
......@@ -14,9 +14,10 @@
#endif
SampleApplication::SampleApplication(const std::string& name, size_t width, size_t height,
EGLint glesMajorVersion, RendererType requestedRenderer)
EGLint glesMajorVersion, EGLint requestedRenderer)
: mSurface(EGL_NO_SURFACE),
mContext(EGL_NO_CONTEXT),
mDisplay(EGL_NO_DISPLAY),
mClientVersion(glesMajorVersion),
mRequestedRenderer(requestedRenderer),
mWidth(width),
......@@ -53,7 +54,7 @@ void SampleApplication::draw()
void SampleApplication::swap()
{
eglSwapBuffers(mWindow->getDisplay(), mSurface);
eglSwapBuffers(mDisplay, mSurface);
}
Window *SampleApplication::getWindow() const
......@@ -66,6 +67,11 @@ EGLConfig SampleApplication::getConfig() const
return mConfig;
}
EGLDisplay SampleApplication::getDisplay() const
{
return mDisplay;
}
EGLSurface SampleApplication::getSurface() const
{
return mSurface;
......@@ -78,7 +84,7 @@ EGLContext SampleApplication::getContext() const
int SampleApplication::run()
{
if (!mWindow->initialize(mName, mWidth, mHeight, mRequestedRenderer))
if (!mWindow->initialize(mName, mWidth, mHeight))
{
return -1;
}
......@@ -150,6 +156,39 @@ bool SampleApplication::popEvent(Event *event)
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[] =
{
EGL_RED_SIZE, 8,
......@@ -163,7 +202,7 @@ bool SampleApplication::initializeGL()
};
EGLint configCount;
if (!eglChooseConfig(mWindow->getDisplay(), configAttributes, &mConfig, 1, &configCount) || (configCount != 1))
if (!eglChooseConfig(mDisplay, configAttributes, &mConfig, 1, &configCount) || (configCount != 1))
{
destroyGL();
return false;
......@@ -175,11 +214,11 @@ bool SampleApplication::initializeGL()
EGL_NONE, EGL_NONE,
};
mSurface = eglCreateWindowSurface(mWindow->getDisplay(), mConfig, mWindow->getNativeWindow(), surfaceAttributes);
mSurface = eglCreateWindowSurface(mDisplay, mConfig, mWindow->getNativeWindow(), surfaceAttributes);
if (mSurface == EGL_NO_SURFACE)
{
eglGetError(); // Clear error and try again
mSurface = eglCreateWindowSurface(mWindow->getDisplay(), mConfig, NULL, NULL);
mSurface = eglCreateWindowSurface(mDisplay, mConfig, NULL, NULL);
}
if (eglGetError() != EGL_SUCCESS)
......@@ -193,14 +232,14 @@ bool SampleApplication::initializeGL()
EGL_CONTEXT_CLIENT_VERSION, mClientVersion,
EGL_NONE
};
mContext = eglCreateContext(mWindow->getDisplay(), mConfig, NULL, contextAttibutes);
mContext = eglCreateContext(mDisplay, mConfig, NULL, contextAttibutes);
if (eglGetError() != EGL_SUCCESS)
{
destroyGL();
return false;
}
eglMakeCurrent(mWindow->getDisplay(), mSurface, mSurface, mContext);
eglMakeCurrent(mDisplay, mSurface, mSurface, mContext);
if (eglGetError() != EGL_SUCCESS)
{
destroyGL();
......@@ -208,16 +247,20 @@ bool SampleApplication::initializeGL()
}
// Turn off vsync
eglSwapInterval(mWindow->getDisplay(), 0);
eglSwapInterval(mDisplay, 0);
return true;
}
void SampleApplication::destroyGL()
{
eglDestroySurface(mWindow->getDisplay(), mSurface);
eglDestroySurface(mDisplay, mSurface);
mSurface = 0;
eglDestroyContext(mWindow->getDisplay(), mContext);
eglDestroyContext(mDisplay, mContext);
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
{
public:
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 bool initialize();
......@@ -41,6 +41,7 @@ class SampleApplication
Window *getWindow() const;
EGLConfig getConfig() const;
EGLDisplay getDisplay() const;
EGLSurface getSurface() const;
EGLContext getContext() const;
......@@ -54,11 +55,12 @@ class SampleApplication
void destroyGL();
EGLConfig mConfig;
EGLDisplay mDisplay;
EGLSurface mSurface;
EGLContext mContext;
GLuint mClientVersion;
RendererType mRequestedRenderer;
EGLint mRequestedRenderer;
size_t mWidth;
size_t mHeight;
std::string mName;
......
......@@ -13,25 +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, RendererType requestedRenderer) = 0;
virtual bool initialize(const std::string &name, size_t width, size_t height) = 0;
virtual void destroy() = 0;
int getWidth() const;
int getHeight() const;
virtual void setMousePosition(int x, int y) = 0;
virtual EGLDisplay getDisplay() const = 0;
virtual EGLNativeWindowType getNativeWindow() const = 0;
virtual EGLNativeDisplayType getNativeDisplay() const = 0;
......
......@@ -363,7 +363,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Win32Window::Win32Window()
: mClassName(),
mDisplay(0),
mNativeWindow(0),
mNativeDisplay(0)
{
......@@ -374,7 +373,7 @@ Win32Window::~Win32Window()
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();
......@@ -418,44 +417,11 @@ bool Win32Window::initialize(const std::string &name, size_t width, size_t heigh
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;
}
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)
{
ReleaseDC(mNativeWindow, mNativeDisplay);
......@@ -471,11 +437,6 @@ void Win32Window::destroy()
UnregisterClassA(mClassName.c_str(), NULL);
}
EGLDisplay Win32Window::getDisplay() const
{
return mDisplay;
}
EGLNativeWindowType Win32Window::getNativeWindow() const
{
return mNativeWindow;
......
......@@ -17,10 +17,9 @@ class Win32Window : public Window
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();
EGLDisplay getDisplay() const;
EGLNativeWindowType getNativeWindow() const;
EGLNativeDisplayType getNativeDisplay() const;
......@@ -34,7 +33,6 @@ class Win32Window : public Window
private:
std::string mClassName;
EGLDisplay mDisplay;
EGLNativeWindowType mNativeWindow;
EGLNativeDisplayType mNativeDisplay;
};
......
#include "ANGLETest.h"
ANGLETest::ANGLETest()
: mClientVersion(2),
: mTestPlatform(EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE),
mClientVersion(2),
mWidth(1280),
mHeight(720),
mRedBits(-1),
......@@ -248,6 +249,39 @@ bool ANGLETest::isMultisampleEnabled() const
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[] =
{
EGL_RED_SIZE, (mRedBits >= 0) ? mRedBits : EGL_DONT_CARE,
......@@ -315,8 +349,10 @@ bool ANGLETest::createEGLContext()
bool ANGLETest::destroyEGLContext()
{
eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglDestroySurface(mDisplay, mSurface);
eglDestroyContext(mDisplay, mContext);
eglTerminate(mDisplay);
return true;
}
......
......@@ -82,6 +82,8 @@ class ANGLETest : public testing::Test
bool createEGLContext();
bool destroyEGLContext();
EGLint mTestPlatform;
int mClientVersion;
int mWidth;
int mHeight;
......
......@@ -53,34 +53,11 @@ bool ANGLETest::InitTestWindow()
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;
}
bool ANGLETest::DestroyTestWindow()
{
eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglTerminate(mDisplay);
if (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