#include "fg_init.h"
#include "egl/fg_init_egl.h"
#include <bps/bps.h>
+#include <screen/screen.h>
void fgPlatformInitialize()
{
- bps_initialize();
+ bps_initialize();
- fghPlatformInitializeEGL();
+ fghPlatformInitializeEGL();
- /* Get start time */
- fgState.Time = fgSystemTime();
+ /* Prepare for screen events */
+ fgDisplay.pDisplay.event = NULL;
+ fgDisplay.pDisplay.screenContext = NULL;
- fgState.Initialised = GL_TRUE;
+ /* Create window */
+ if (screen_create_context(&fgDisplay.pDisplay.screenContext, 0)) {
+ fgError("Could not create screen context");
+ return;
+ }
+
+ /* Get screen size */
+ int displayCount;
+ screen_display_t* displays;
+ int vals[2];
+ if(screen_get_context_property_iv(fgDisplay.pDisplay.screenContext, SCREEN_PROPERTY_DISPLAY_COUNT, &displayCount)) {
+ fgWarning("Could not get display count. Screen size not determined and will be left at default values");
+ } else if(displayCount >= 1) {
+ displays = (screen_display_t*)calloc(displayCount, sizeof(screen_display_t));
+ if(screen_get_context_property_pv(fgDisplay.pDisplay.screenContext, SCREEN_PROPERTY_DISPLAYS, (void**)displays)) {
+ fgWarning("Could not get displays. Screen size not determined and will be left at default values");
+ } else {
+ /* We only care about the first one, which is the device display */
+ if(screen_get_display_property_iv(displays[0], SCREEN_PROPERTY_SIZE, vals)) {
+ fgWarning("Could not get display size. Values will be left at default");
+ } else {
+ if(screen_get_display_property_iv(displays[0], SCREEN_PROPERTY_ROTATION, &displayCount) || (displayCount == 0 || displayCount == 180)) {
+ fgDisplay.ScreenWidth = vals[0];
+ fgDisplay.ScreenHeight = vals[1];
+ } else {
+ fgDisplay.ScreenWidth = vals[1];
+ fgDisplay.ScreenHeight = vals[0];
+ }
+ }
+ if(screen_get_display_property_iv(displays[0], SCREEN_PROPERTY_PHYSICAL_SIZE, vals)) {
+ fgWarning("Could not get physical display size. Values will be left at default");
+ } else {
+ fgDisplay.ScreenWidthMM = vals[0];
+ fgDisplay.ScreenHeightMM = vals[1];
+ }
+ }
+ free(displays);
+ }
+
+ /* Get start time */
+ fgState.Time = fgSystemTime();
+
+ fgState.Initialised = GL_TRUE;
}
void fgPlatformCloseDisplay()
{
- fghPlatformCloseDisplayEGL();
+ fghPlatformCloseDisplayEGL();
+
+ screen_destroy_context(fgDisplay.pDisplay.screenContext);
+ fgDisplay.pDisplay.screenContext = NULL;
- bps_shutdown();
+ bps_shutdown();
}
/**