Add support for Android window size.
Change-Id: Ib96c227367fe10890e576bf99a654b50fa9e06c4
Reviewed-on: https://swiftshader-review.googlesource.com/2671
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Greg Hartman <ghartman@google.com>
diff --git a/src/OpenGL/libEGL/Display.cpp b/src/OpenGL/libEGL/Display.cpp
index 2013e7b..e9be15e 100644
--- a/src/OpenGL/libEGL/Display.cpp
+++ b/src/OpenGL/libEGL/Display.cpp
@@ -20,6 +20,11 @@
#include "libEGL/Context.hpp"
#include "common/debug.h"
+#ifdef __ANDROID__
+#include <system/window.h>
+#include <GceFrameBufferConfig.h>
+#endif
+
#include <algorithm>
#include <vector>
#include <map>
@@ -31,28 +36,30 @@
egl::Display *Display::getPlatformDisplay(EGLenum platform, EGLNativeDisplayType displayId)
{
- 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)
+ #ifndef __ANDROID__
+ if(platform == EGL_UNKNOWN) // Default
{
#if defined(__unix__)
- displayId = XOpenDisplay(NULL);
- #else
- return error(EGL_BAD_PARAMETER, (egl::Display*)EGL_NO_DISPLAY);
+ platform = EGL_PLATFORM_X11_EXT;
#endif
}
- }
- else
- {
- // FIXME: Check if displayId is a valid display device context for <platform>
- }
+
+ if(displayId == EGL_DEFAULT_DISPLAY)
+ {
+ 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())
{
@@ -459,6 +466,18 @@
{
#if defined(_WIN32)
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
if(platform == EGL_PLATFORM_X11_EXT)
{
@@ -467,7 +486,7 @@
return status == True;
}
- #endif
+ #endif
return false;
}
@@ -521,7 +540,12 @@
}
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)
{
Screen *screen = XDefaultScreenOfDisplay(displayId);
diff --git a/src/OpenGL/libEGL/Surface.cpp b/src/OpenGL/libEGL/Surface.cpp
index 7a152aa..7d99988 100644
--- a/src/OpenGL/libEGL/Surface.cpp
+++ b/src/OpenGL/libEGL/Surface.cpp
@@ -118,6 +118,8 @@
GetClientRect(mWindow, &windowRect);
return reset(windowRect.right - windowRect.left, windowRect.bottom - windowRect.top);
+ #elif defined(__ANDROID__)
+ return reset(ANativeWindow_getWidth(mWindow), ANativeWindow_getHeight(mWindow));
#else
XWindowAttributes windowAttributes;
XGetWindowAttributes(mDisplay->getNativeDisplay(), mWindow, &windowAttributes);
@@ -285,6 +287,9 @@
int clientWidth = client.right - client.left;
int clientHeight = client.bottom - client.top;
+ #elif defined(__ANDROID__)
+ int clientWidth = ANativeWindow_getWidth(mWindow);
+ int clientHeight = ANativeWindow_getHeight(mWindow);
#else
XWindowAttributes windowAttributes;
XGetWindowAttributes(mDisplay->getNativeDisplay(), mWindow, &windowAttributes);