Commit 029d3539 by Greg Hartman

Add support for Android window size.

Change-Id: Ib96c227367fe10890e576bf99a654b50fa9e06c4 Reviewed-on: https://swiftshader-review.googlesource.com/2671Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarGreg Hartman <ghartman@google.com>
parent 9a10e062
...@@ -20,6 +20,11 @@ ...@@ -20,6 +20,11 @@
#include "libEGL/Context.hpp" #include "libEGL/Context.hpp"
#include "common/debug.h" #include "common/debug.h"
#ifdef __ANDROID__
#include <system/window.h>
#include <GceFrameBufferConfig.h>
#endif
#include <algorithm> #include <algorithm>
#include <vector> #include <vector>
#include <map> #include <map>
...@@ -31,28 +36,30 @@ DisplayMap displays; ...@@ -31,28 +36,30 @@ DisplayMap displays;
egl::Display *Display::getPlatformDisplay(EGLenum platform, EGLNativeDisplayType displayId) egl::Display *Display::getPlatformDisplay(EGLenum platform, EGLNativeDisplayType displayId)
{ {
if(platform == EGL_UNKNOWN) // Default #ifndef __ANDROID__
{ if(platform == EGL_UNKNOWN) // Default
#if defined(__unix__)
platform = EGL_PLATFORM_X11_EXT;
#endif
}
if(displayId == EGL_DEFAULT_DISPLAY)
{
if(platform == EGL_PLATFORM_X11_EXT)
{ {
#if defined(__unix__) #if defined(__unix__)
displayId = XOpenDisplay(NULL); platform = EGL_PLATFORM_X11_EXT;
#else
return error(EGL_BAD_PARAMETER, (egl::Display*)EGL_NO_DISPLAY);
#endif #endif
} }
}
else if(displayId == EGL_DEFAULT_DISPLAY)
{ {
// FIXME: Check if displayId is a valid display device context for <platform> if(platform == EGL_PLATFORM_X11_EXT)
} {
#if defined(__unix__)
displayId = XOpenDisplay(NULL);
#else
return error(EGL_BAD_PARAMETER, (egl::Display*)EGL_NO_DISPLAY);
#endif
}
}
else
{
// FIXME: Check if displayId is a valid display device context for <platform>
}
#endif
if(displays.find(displayId) != displays.end()) if(displays.find(displayId) != displays.end())
{ {
...@@ -459,6 +466,18 @@ bool Display::isValidWindow(EGLNativeWindowType window) ...@@ -459,6 +466,18 @@ bool Display::isValidWindow(EGLNativeWindowType window)
{ {
#if defined(_WIN32) #if defined(_WIN32)
return IsWindow(window) == TRUE; return IsWindow(window) == TRUE;
#elif defined(__ANDROID__)
if(!window)
{
ALOGE("%s called with window==NULL %s:%d", __FUNCTION__, __FILE__, __LINE__);
return false;
}
if(static_cast<ANativeWindow*>(window)->common.magic != ANDROID_NATIVE_WINDOW_MAGIC)
{
ALOGE("%s called with window==%p bad magic %s:%d", __FUNCTION__, window, __FILE__, __LINE__);
return false;
}
return true;
#else #else
if(platform == EGL_PLATFORM_X11_EXT) if(platform == EGL_PLATFORM_X11_EXT)
{ {
...@@ -467,7 +486,7 @@ bool Display::isValidWindow(EGLNativeWindowType window) ...@@ -467,7 +486,7 @@ bool Display::isValidWindow(EGLNativeWindowType window)
return status == True; return status == True;
} }
#endif #endif
return false; return false;
} }
...@@ -521,7 +540,12 @@ DisplayMode Display::getDisplayMode() const ...@@ -521,7 +540,12 @@ DisplayMode Display::getDisplayMode() const
} }
ReleaseDC(0, deviceContext); ReleaseDC(0, deviceContext);
#else #elif defined(__ANDROID__)
displayMode.width = GceFrameBufferConfig::getInstance()->x_res();
displayMode.height = GceFrameBufferConfig::getInstance()->y_res();
displayMode.format = sw::FORMAT_X8R8G8B8;
ALOGI("Returning framebuffer config width=%d height=%d, format=%d", displayMode.width, displayMode.height, displayMode.format);
#else
if(platform == EGL_PLATFORM_X11_EXT) if(platform == EGL_PLATFORM_X11_EXT)
{ {
Screen *screen = XDefaultScreenOfDisplay(displayId); Screen *screen = XDefaultScreenOfDisplay(displayId);
......
...@@ -118,6 +118,8 @@ bool Surface::reset() ...@@ -118,6 +118,8 @@ bool Surface::reset()
GetClientRect(mWindow, &windowRect); GetClientRect(mWindow, &windowRect);
return reset(windowRect.right - windowRect.left, windowRect.bottom - windowRect.top); return reset(windowRect.right - windowRect.left, windowRect.bottom - windowRect.top);
#elif defined(__ANDROID__)
return reset(ANativeWindow_getWidth(mWindow), ANativeWindow_getHeight(mWindow));
#else #else
XWindowAttributes windowAttributes; XWindowAttributes windowAttributes;
XGetWindowAttributes(mDisplay->getNativeDisplay(), mWindow, &windowAttributes); XGetWindowAttributes(mDisplay->getNativeDisplay(), mWindow, &windowAttributes);
...@@ -285,6 +287,9 @@ bool Surface::checkForResize() ...@@ -285,6 +287,9 @@ bool Surface::checkForResize()
int clientWidth = client.right - client.left; int clientWidth = client.right - client.left;
int clientHeight = client.bottom - client.top; int clientHeight = client.bottom - client.top;
#elif defined(__ANDROID__)
int clientWidth = ANativeWindow_getWidth(mWindow);
int clientHeight = ANativeWindow_getHeight(mWindow);
#else #else
XWindowAttributes windowAttributes; XWindowAttributes windowAttributes;
XGetWindowAttributes(mDisplay->getNativeDisplay(), mWindow, &windowAttributes); XGetWindowAttributes(mDisplay->getNativeDisplay(), mWindow, &windowAttributes);
......
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