aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2015-01-21 00:13:17 +0100
committerRay <raysan5@gmail.com>2015-01-21 00:13:17 +0100
commita9e045a1a882e1b4eec85c90b4dc04e803fe4b3f (patch)
tree4520f32dfd93bd6c2361b39c06950cf04d661d21 /src
parent7d0407c6a21e4fab566fd5a8f4d3edda6911f2ec (diff)
downloadraylib-a9e045a1a882e1b4eec85c90b4dc04e803fe4b3f.tar.gz
raylib-a9e045a1a882e1b4eec85c90b4dc04e803fe4b3f.zip
Pause loop execution on window minimized
Diffstat (limited to 'src')
-rw-r--r--src/core.c50
-rw-r--r--src/raylib.h1
2 files changed, 45 insertions, 6 deletions
diff --git a/src/core.c b/src/core.c
index 574de334..2c5bad74 100644
--- a/src/core.c
+++ b/src/core.c
@@ -104,6 +104,7 @@
//----------------------------------------------------------------------------------
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
static GLFWwindow *window; // Native window (graphic device)
+static bool windowMinimized = false;
#elif defined(PLATFORM_ANDROID)
static struct android_app *app; // Android activity
static struct android_poll_source *source; // Android events polling source
@@ -243,6 +244,7 @@ static void CharCallback(GLFWwindow *window, unsigned int key);
static void ScrollCallback(GLFWwindow *window, double xoffset, double yoffset); // GLFW3 Srolling Callback, runs on mouse wheel
static void CursorEnterCallback(GLFWwindow *window, int enter); // GLFW3 Cursor Enter Callback, cursor enters client area
static void WindowSizeCallback(GLFWwindow *window, int width, int height); // GLFW3 WindowSize Callback, runs when window is resized
+static void WindowIconifyCallback(GLFWwindow* window, int iconified); // GLFW3 WindowIconify Callback, runs when window is minimized/restored
#endif
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI)
@@ -397,8 +399,11 @@ void CloseWindow(void)
// Detect if KEY_ESCAPE pressed or Close icon pressed
bool WindowShouldClose(void)
-{
+{
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
+ // While window minimized, stop loop execution
+ while (windowMinimized) glfwPollEvents();
+
return (glfwWindowShouldClose(window));
#elif defined(PLATFORM_ANDROID) || defined(PLATFORM_RPI)
return windowShouldClose;
@@ -962,7 +967,12 @@ static void InitDisplay(int width, int height)
if (rlGetVersion() == OPENGL_33)
{
- //glfwWindowHint(GLFW_SAMPLES, 4); // Enables multisampling x4 (MSAA), default is 0
+ if (configFlags & FLAG_MSAA_4X_HINT)
+ {
+ glfwWindowHint(GLFW_SAMPLES, 4); // Enables multisampling x4 (MSAA), default is 0
+ TraceLog(INFO, "Enabled MSAA x4");
+ }
+
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // Choose OpenGL major version (just hint)
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // Choose OpenGL minor version (just hint)
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // Profiles Hint: Only 3.2 and above!
@@ -1009,12 +1019,18 @@ static void InitDisplay(int width, int height)
glfwSetMouseButtonCallback(window, MouseButtonCallback);
glfwSetCharCallback(window, CharCallback);
glfwSetScrollCallback(window, ScrollCallback);
+ glfwSetWindowIconifyCallback(window, WindowIconifyCallback);
glfwMakeContextCurrent(window);
- //glfwSwapInterval(0); // Disables GPU v-sync (if set), so frames are not limited to screen refresh rate (60Hz -> 60 FPS)
- // If not set, swap interval uses GPU v-sync configuration
- // Framerate can be setup using SetTargetFPS()
+ // Enables GPU v-sync, so frames are not limited to screen refresh rate (60Hz -> 60 FPS)
+ // If not set, swap interval uses GPU v-sync configuration
+ // Framerate can be setup using SetTargetFPS()
+ if (configFlags & FLAG_VSYNC_HINT)
+ {
+ glfwSwapInterval(1);
+ TraceLog(INFO, "Trying to enable VSYNC");
+ }
//glfwGetFramebufferSize(window, &renderWidth, &renderHeight); // Get framebuffer size of current window
@@ -1036,6 +1052,7 @@ static void InitDisplay(int width, int height)
VC_RECT_T srcRect;
#endif
+ // TODO: if (configFlags & FLAG_MSAA_4X_HINT) activate (EGL_SAMPLES, 4)
const EGLint framebufferAttribs[] =
{
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, // Type of context support -> Required on RPI?
@@ -1242,6 +1259,25 @@ static void WindowSizeCallback(GLFWwindow *window, int width, int height)
// Background must be also re-cleared
ClearBackground(RAYWHITE);
}
+
+// GLFW3 WindowIconify Callback, runs when window is minimized/restored
+static void WindowIconifyCallback(GLFWwindow* window, int iconified)
+{
+ if (iconified)
+ {
+ // The window was iconified
+ PauseMusicStream();
+
+ windowMinimized = true;
+ }
+ else
+ {
+ // The window was restored
+ ResumeMusicStream();
+
+ windowMinimized = false;
+ }
+}
#endif
#if defined(PLATFORM_ANDROID)
@@ -1643,7 +1679,7 @@ static void PollInputEvents(void)
// Register previous mouse states
for (int i = 0; i < 3; i++) previousMouseState[i] = currentMouseState[i];
- glfwPollEvents(); // Register keyboard/mouse events
+ glfwPollEvents(); // Register keyboard/mouse events... and window events!
#elif defined(PLATFORM_ANDROID)
// TODO: Check virtual keyboard (?)
@@ -1654,6 +1690,8 @@ static void PollInputEvents(void)
drag = false;
// Poll Events (registered events)
+ // TODO: Enable/disable activityMinimized to block activity if minimized
+ //while ((ident = ALooper_pollAll(activityMinimized ? 0 : -1, NULL, &events,(void**)&source)) >= 0)
while ((ident = ALooper_pollAll(0, NULL, &events,(void**)&source)) >= 0)
{
// Process this event
diff --git a/src/raylib.h b/src/raylib.h
index 14590d04..ef487a30 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -90,6 +90,7 @@
#define FLAG_SHOW_MOUSE_CURSOR 4
#define FLAG_CENTERED_MODE 8
#define FLAG_MSAA_4X_HINT 16
+#define FLAG_VSYNC_HINT 32
// Keyboard Function Keys
#define KEY_SPACE 32