summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorRay <[email protected]>2023-10-09 09:45:57 +0200
committerRay <[email protected]>2023-10-09 09:45:57 +0200
commit682992e868ffd97fa25d432e15ec209a161c26d9 (patch)
tree2c19b1e5087f2d23b894b1117a6ec74b9856fb48 /src
parent5ed7717f0d9e524b72f1bddc6fcd3e2e5f32e217 (diff)
downloadraylib-682992e868ffd97fa25d432e15ec209a161c26d9.tar.gz
raylib-682992e868ffd97fa25d432e15ec209a161c26d9.zip
REVIEWED: Reorganize functions
`TakeScreenshot()` moved to `rcore.c`
Diffstat (limited to 'src')
-rw-r--r--src/rcore.c23
-rw-r--r--src/rcore_android.c44
-rw-r--r--src/rcore_desktop.c42
-rw-r--r--src/rcore_drm.c90
-rw-r--r--src/rcore_web.c46
5 files changed, 97 insertions, 148 deletions
diff --git a/src/rcore.c b/src/rcore.c
index 69b5e1a8..a3075aac 100644
--- a/src/rcore.c
+++ b/src/rcore.c
@@ -2329,6 +2329,29 @@ void WaitTime(double seconds)
#endif
}
+// Takes a screenshot of current screen (saved a .png)
+void TakeScreenshot(const char *fileName)
+{
+#if defined(SUPPORT_MODULE_RTEXTURES)
+ // Security check to (partially) avoid malicious code
+ if (strchr(fileName, '\'') != NULL) { TRACELOG(LOG_WARNING, "SYSTEM: Provided fileName could be potentially malicious, avoid [\'] character"); return; }
+
+ Vector2 scale = GetWindowScaleDPI();
+ unsigned char *imgData = rlReadScreenPixels((int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y));
+ Image image = { imgData, (int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y), 1, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 };
+
+ char path[512] = { 0 };
+ strcpy(path, TextFormat("%s/%s", CORE.Storage.basePath, fileName));
+
+ ExportImage(image, path); // WARNING: Module required: rtextures
+ RL_FREE(imgData);
+
+ TRACELOG(LOG_INFO, "SYSTEM: [%s] Screenshot taken successfully", path);
+#else
+ TRACELOG(LOG_WARNING,"IMAGE: ExportImage() requires module: rtextures");
+#endif
+}
+
// Scan all files and directories in a base path
// WARNING: files.paths[] must be previously allocated and
// contain enough space to store all required paths
diff --git a/src/rcore_android.c b/src/rcore_android.c
index ad7a905c..a7c8f330 100644
--- a/src/rcore_android.c
+++ b/src/rcore_android.c
@@ -133,6 +133,10 @@ struct android_app *GetAndroidApp(void)
return platform.app;
}
+//----------------------------------------------------------------------------------
+// Module Functions Definition: Window and Graphics Device
+//----------------------------------------------------------------------------------
+
// Initialize window and OpenGL context
// NOTE: data parameter could be used to pass any kind of required data to the initialization
void InitWindow(int width, int height, const char *title)
@@ -563,6 +567,16 @@ void DisableCursor(void)
CORE.Input.Mouse.cursorHidden = true;
}
+// Swap back buffer with front buffer (screen drawing)
+void SwapScreenBuffer(void)
+{
+ eglSwapBuffers(platform.device, platform.surface);
+}
+
+//----------------------------------------------------------------------------------
+// Module Functions Definition: Misc
+//----------------------------------------------------------------------------------
+
// Get elapsed time measure in seconds since InitTimer()
double GetTime(void)
{
@@ -576,29 +590,6 @@ double GetTime(void)
return time;
}
-// Takes a screenshot of current screen (saved a .png)
-void TakeScreenshot(const char *fileName)
-{
-#if defined(SUPPORT_MODULE_RTEXTURES)
- // Security check to (partially) avoid malicious code on PLATFORM_ANDROID
- if (strchr(fileName, '\'') != NULL) { TRACELOG(LOG_WARNING, "SYSTEM: Provided fileName could be potentially malicious, avoid [\'] character"); return; }
-
- Vector2 scale = GetWindowScaleDPI();
- unsigned char *imgData = rlReadScreenPixels((int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y));
- Image image = { imgData, (int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y), 1, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 };
-
- char path[2048] = { 0 };
- strcpy(path, TextFormat("%s/%s", CORE.Storage.basePath, fileName));
-
- ExportImage(image, path); // WARNING: Module required: rtextures
- RL_FREE(imgData);
-
- TRACELOG(LOG_INFO, "SYSTEM: [%s] Screenshot taken successfully", path);
-#else
- TRACELOG(LOG_WARNING,"IMAGE: ExportImage() requires module: rtextures");
-#endif
-}
-
// Open URL with default system browser (if available)
// NOTE: This function is only safe to use if you control the URL given.
// A user could craft a malicious string performing another action.
@@ -726,12 +717,6 @@ Vector2 GetTouchPosition(int index)
return position;
}
-// Swap back buffer with front buffer (screen drawing)
-void SwapScreenBuffer(void)
-{
- eglSwapBuffers(platform.device, platform.surface);
-}
-
// Register all input events
void PollInputEvents(void)
{
@@ -787,6 +772,7 @@ void PollInputEvents(void)
}
}
+
//----------------------------------------------------------------------------------
// Module Internal Functions Definition
//----------------------------------------------------------------------------------
diff --git a/src/rcore_desktop.c b/src/rcore_desktop.c
index 33a4aab0..dcd71ef1 100644
--- a/src/rcore_desktop.c
+++ b/src/rcore_desktop.c
@@ -137,7 +137,7 @@ static void CursorEnterCallback(GLFWwindow *window, int enter);
// NOTE: Functions declaration is provided by raylib.h
//----------------------------------------------------------------------------------
-// Module Functions Definition
+// Module Functions Definition: Window and Graphics Device
//----------------------------------------------------------------------------------
// Initialize window and OpenGL context
@@ -1168,6 +1168,16 @@ void DisableCursor(void)
CORE.Input.Mouse.cursorHidden = true;
}
+// Swap back buffer with front buffer (screen drawing)
+void SwapScreenBuffer(void)
+{
+ glfwSwapBuffers(platform.handle);
+}
+
+//----------------------------------------------------------------------------------
+// Module Functions Definition: Misc
+//----------------------------------------------------------------------------------
+
// Get elapsed time measure in seconds since InitTimer()
double GetTime(void)
{
@@ -1175,30 +1185,6 @@ double GetTime(void)
return time;
}
-// Takes a screenshot of current screen (saved a .png)
-// WARNING: This function requires [rtextures] module functionality
-void TakeScreenshot(const char *fileName)
-{
-#if defined(SUPPORT_MODULE_RTEXTURES)
- // Security check to (partially) avoid malicious code
- if (strchr(fileName, '\'') != NULL) { TRACELOG(LOG_WARNING, "SYSTEM: Provided fileName could be potentially malicious, avoid [\'] character"); return; }
-
- Vector2 scale = GetWindowScaleDPI();
- unsigned char *imgData = rlReadScreenPixels((int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y));
- Image image = { imgData, (int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y), 1, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 };
-
- char path[2048] = { 0 };
- strcpy(path, TextFormat("%s/%s", CORE.Storage.basePath, fileName));
-
- ExportImage(image, path); // WARNING: Module required: rtextures
- RL_FREE(imgData);
-
- TRACELOG(LOG_INFO, "SYSTEM: [%s] Screenshot taken successfully", path);
-#else
- TRACELOG(LOG_WARNING,"IMAGE: ExportImage() requires module: rtextures");
-#endif
-}
-
// Open URL with default system browser (if available)
// NOTE: This function is only safe to use if you control the URL given.
// A user could craft a malicious string performing another action.
@@ -1341,12 +1327,6 @@ Vector2 GetTouchPosition(int index)
return position;
}
-// Swap back buffer with front buffer (screen drawing)
-void SwapScreenBuffer(void)
-{
- glfwSwapBuffers(platform.handle);
-}
-
// Register all input events
void PollInputEvents(void)
{
diff --git a/src/rcore_drm.c b/src/rcore_drm.c
index 8c63b63d..aadf0f47 100644
--- a/src/rcore_drm.c
+++ b/src/rcore_drm.c
@@ -166,7 +166,7 @@ static int FindNearestConnectorMode(const drmModeConnector *connector, uint widt
// NOTE: Functions declaration is provided by raylib.h
//----------------------------------------------------------------------------------
-// Module Functions Definition
+// Module Functions Definition: Window and Graphics Device
//----------------------------------------------------------------------------------
// Initialize window and OpenGL context
@@ -675,6 +675,40 @@ void DisableCursor(void)
CORE.Input.Mouse.cursorHidden = true;
}
+// Swap back buffer with front buffer (screen drawing)
+void SwapScreenBuffer(void)
+{
+ eglSwapBuffers(platform.device, platform.surface);
+
+ if (!platform.gbmSurface || (-1 == platform.fd) || !platform.connector || !platform.crtc) TRACELOG(LOG_ERROR, "DISPLAY: DRM initialization failed to swap");
+
+ struct gbm_bo *bo = gbm_surface_lock_front_buffer(platform.gbmSurface);
+ if (!bo) TRACELOG(LOG_ERROR, "DISPLAY: Failed GBM to lock front buffer");
+
+ uint32_t fb = 0;
+ int result = drmModeAddFB(platform.fd, platform.connector->modes[platform.modeIndex].hdisplay, platform.connector->modes[platform.modeIndex].vdisplay, 24, 32, gbm_bo_get_stride(bo), gbm_bo_get_handle(bo).u32, &fb);
+ if (result != 0) TRACELOG(LOG_ERROR, "DISPLAY: drmModeAddFB() failed with result: %d", result);
+
+ result = drmModeSetCrtc(platform.fd, platform.crtc->crtc_id, fb, 0, 0, &platform.connector->connector_id, 1, &platform.connector->modes[platform.modeIndex]);
+ if (result != 0) TRACELOG(LOG_ERROR, "DISPLAY: drmModeSetCrtc() failed with result: %d", result);
+
+ if (platform.prevFB)
+ {
+ result = drmModeRmFB(platform.fd, platform.prevFB);
+ if (result != 0) TRACELOG(LOG_ERROR, "DISPLAY: drmModeRmFB() failed with result: %d", result);
+ }
+
+ platform.prevFB = fb;
+
+ if (platform.prevBO) gbm_surface_release_buffer(platform.gbmSurface, platform.prevBO);
+
+ platform.prevBO = bo;
+}
+
+//----------------------------------------------------------------------------------
+// Module Functions Definition: Misc
+//----------------------------------------------------------------------------------
+
// Get elapsed time measure in seconds since InitTimer()
double GetTime(void)
{
@@ -688,29 +722,6 @@ double GetTime(void)
return time;
}
-// Takes a screenshot of current screen (saved a .png)
-void TakeScreenshot(const char *fileName)
-{
-#if defined(SUPPORT_MODULE_RTEXTURES)
- // Security check to (partially) avoid malicious code on PLATFORM_WEB
- if (strchr(fileName, '\'') != NULL) { TRACELOG(LOG_WARNING, "SYSTEM: Provided fileName could be potentially malicious, avoid [\'] character"); return; }
-
- Vector2 scale = GetWindowScaleDPI();
- unsigned char *imgData = rlReadScreenPixels((int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y));
- Image image = { imgData, (int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y), 1, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 };
-
- char path[2048] = { 0 };
- strcpy(path, TextFormat("%s/%s", CORE.Storage.basePath, fileName));
-
- ExportImage(image, path); // WARNING: Module required: rtextures
- RL_FREE(imgData);
-
- TRACELOG(LOG_INFO, "SYSTEM: [%s] Screenshot taken successfully", path);
-#else
- TRACELOG(LOG_WARNING,"IMAGE: ExportImage() requires module: rtextures");
-#endif
-}
-
// Open URL with default system browser (if available)
// NOTE: This function is only safe to use if you control the URL given.
// A user could craft a malicious string performing another action.
@@ -833,36 +844,6 @@ Vector2 GetTouchPosition(int index)
return position;
}
-// Swap back buffer with front buffer (screen drawing)
-void SwapScreenBuffer(void)
-{
- eglSwapBuffers(platform.device, platform.surface);
-
- if (!platform.gbmSurface || (-1 == platform.fd) || !platform.connector || !platform.crtc) TRACELOG(LOG_ERROR, "DISPLAY: DRM initialization failed to swap");
-
- struct gbm_bo *bo = gbm_surface_lock_front_buffer(platform.gbmSurface);
- if (!bo) TRACELOG(LOG_ERROR, "DISPLAY: Failed GBM to lock front buffer");
-
- uint32_t fb = 0;
- int result = drmModeAddFB(platform.fd, platform.connector->modes[platform.modeIndex].hdisplay, platform.connector->modes[platform.modeIndex].vdisplay, 24, 32, gbm_bo_get_stride(bo), gbm_bo_get_handle(bo).u32, &fb);
- if (result != 0) TRACELOG(LOG_ERROR, "DISPLAY: drmModeAddFB() failed with result: %d", result);
-
- result = drmModeSetCrtc(platform.fd, platform.crtc->crtc_id, fb, 0, 0, &platform.connector->connector_id, 1, &platform.connector->modes[platform.modeIndex]);
- if (result != 0) TRACELOG(LOG_ERROR, "DISPLAY: drmModeSetCrtc() failed with result: %d", result);
-
- if (platform.prevFB)
- {
- result = drmModeRmFB(platform.fd, platform.prevFB);
- if (result != 0) TRACELOG(LOG_ERROR, "DISPLAY: drmModeRmFB() failed with result: %d", result);
- }
-
- platform.prevFB = fb;
-
- if (platform.prevBO) gbm_surface_release_buffer(platform.gbmSurface, platform.prevBO);
-
- platform.prevBO = bo;
-}
-
// Register all input events
void PollInputEvents(void)
{
@@ -931,6 +912,7 @@ void PollInputEvents(void)
#endif
}
+
//----------------------------------------------------------------------------------
// Module Internal Functions Definition
//----------------------------------------------------------------------------------
diff --git a/src/rcore_web.c b/src/rcore_web.c
index fa296b90..249f0db4 100644
--- a/src/rcore_web.c
+++ b/src/rcore_web.c
@@ -122,7 +122,7 @@ static EM_BOOL EmscriptenGamepadCallback(int eventType, const EmscriptenGamepadE
// NOTE: Functions declaration is provided by raylib.h
//----------------------------------------------------------------------------------
-// Module Functions Definition
+// Module Functions Definition: Window and Graphics Device
//----------------------------------------------------------------------------------
// Initialize window and OpenGL context
@@ -664,6 +664,16 @@ void DisableCursor(void)
CORE.Input.Mouse.cursorHidden = true;
}
+// Swap back buffer with front buffer (screen drawing)
+void SwapScreenBuffer(void)
+{
+ glfwSwapBuffers(platform.handle);
+}
+
+//----------------------------------------------------------------------------------
+// Module Functions Definition: Misc
+//----------------------------------------------------------------------------------
+
// Get elapsed time measure in seconds since InitTimer()
double GetTime(void)
{
@@ -671,33 +681,6 @@ double GetTime(void)
return time;
}
-// Takes a screenshot of current screen (saved a .png)
-void TakeScreenshot(const char *fileName)
-{
-#if defined(SUPPORT_MODULE_RTEXTURES)
- // Security check to (partially) avoid malicious code on PLATFORM_WEB
- if (strchr(fileName, '\'') != NULL) { TRACELOG(LOG_WARNING, "SYSTEM: Provided fileName could be potentially malicious, avoid [\'] character"); return; }
-
- Vector2 scale = GetWindowScaleDPI();
- unsigned char *imgData = rlReadScreenPixels((int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y));
- Image image = { imgData, (int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y), 1, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 };
-
- char path[2048] = { 0 };
- strcpy(path, TextFormat("%s/%s", CORE.Storage.basePath, fileName));
-
- ExportImage(image, path); // WARNING: Module required: rtextures
- RL_FREE(imgData);
-
- // Download file from MEMFS (emscripten memory filesystem)
- // saveFileFromMEMFSToDisk() function is defined in raylib/src/shell.html
- emscripten_run_script(TextFormat("saveFileFromMEMFSToDisk('%s','%s')", GetFileName(path), GetFileName(path)));
-
- TRACELOG(LOG_INFO, "SYSTEM: [%s] Screenshot taken successfully", path);
-#else
- TRACELOG(LOG_WARNING,"IMAGE: ExportImage() requires module: rtextures");
-#endif
-}
-
// Open URL with default system browser (if available)
// NOTE: This function is only safe to use if you control the URL given.
// A user could craft a malicious string performing another action.
@@ -822,12 +805,6 @@ Vector2 GetTouchPosition(int index)
return position;
}
-// Swap back buffer with front buffer (screen drawing)
-void SwapScreenBuffer(void)
-{
- glfwSwapBuffers(platform.handle);
-}
-
// Register all input events
void PollInputEvents(void)
{
@@ -944,6 +921,7 @@ void PollInputEvents(void)
}
}
+
//----------------------------------------------------------------------------------
// Module Internal Functions Definition
//----------------------------------------------------------------------------------