|
|
@ -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 l">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 |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|