diff --git a/BINDINGS.md b/BINDINGS.md index d6fd107bd..7d1c43ca8 100644 --- a/BINDINGS.md +++ b/BINDINGS.md @@ -105,7 +105,8 @@ Some people ported raylib to other languages in the form of bindings or wrappers | [raylib-jai](https://github.com/ahmedqarmout2/raylib-jai) | **5.5** | [Jai](https://github.com/BSVino/JaiPrimer/blob/master/JaiPrimer.md) | MIT | | [fnl-raylib](https://github.com/0riginaln0/fnl-raylib) | **5.5** | [Fennel](https://fennel-lang.org/) | MIT | | [Rayua](https://github.com/uiua-lang/rayua) | **5.5** | [Uiua](https://www.uiua.org/) | **???** | -| [Target](https://github.com/FinnDemonCat/Target/tree/main/libs/raylib) | **5.5** | [Dart](https://dart.dev/) | Apache-2.0 license | +| [Target](https://github.com/FinnDemonCat/Target/tree/main/libs/raylib) | **5.5** | [Dart](https://dart.dev/) | Apache-2.0 license | +| [gclang-raylib](https://github.com/gnuchanos/gcLang_Compiler/tree/main/windows_version/raylib_version)| **6.0** | [gclang](https://github.com/gnuchanos/gcLang_Compiler) | AGPL-3.0 | ### Utility Wrapers diff --git a/CMakeOptions.txt b/CMakeOptions.txt index 55375116e..5eff4c311 100644 --- a/CMakeOptions.txt +++ b/CMakeOptions.txt @@ -29,11 +29,15 @@ option(GLFW_BUILD_WAYLAND "Build the bundled GLFW with Wayland support" OFF) option(GLFW_BUILD_X11 "Build the bundled GLFW with X11 support" ON) option(INCLUDE_EVERYTHING "Include everything disabled by default (for CI usage)" OFF) -set(OFF ${INCLUDE_EVERYTHING} CACHE INTERNAL "Replace any OFF by default with \${OFF} to have it covered by this option") include(ParseConfigHeader) foreach(FLAG IN LISTS CONFIG_HEADER_FLAGS) string(REGEX MATCH "([^=]+)=(.+)" _ ${FLAG}) - cmake_dependent_option(${CMAKE_MATCH_1} "" ${CMAKE_MATCH_2} CUSTOMIZE_BUILD ${CMAKE_MATCH_2}) + set(CONFIG_HEADER_FLAG_DEFAULT ${CMAKE_MATCH_2}) + if (INCLUDE_EVERYTHING AND "${CONFIG_HEADER_FLAG_DEFAULT}" STREQUAL "OFF") + set(CONFIG_HEADER_FLAG_DEFAULT ON) + endif() + + cmake_dependent_option(${CMAKE_MATCH_1} "" ${CONFIG_HEADER_FLAG_DEFAULT} CUSTOMIZE_BUILD ${CONFIG_HEADER_FLAG_DEFAULT}) endforeach() diff --git a/cmake/LibraryConfigurations.cmake b/cmake/LibraryConfigurations.cmake index 18680491d..ad026474f 100644 --- a/cmake/LibraryConfigurations.cmake +++ b/cmake/LibraryConfigurations.cmake @@ -7,6 +7,30 @@ if(POLICY CMP0072) cmake_policy(SET CMP0072 NEW) endif() +include(CheckCSourceCompiles) +include(CMakePushCheckState) + +function(raylib_check_libatomic_required result) + set(_atomic_test_source " +int main(void) +{ + volatile long long value = 0; + return (int)__atomic_fetch_add(&value, 1, __ATOMIC_SEQ_CST); +}") + + check_c_source_compiles("${_atomic_test_source}" RAYLIB_ATOMICS_WITHOUT_LIBATOMIC) + + if (RAYLIB_ATOMICS_WITHOUT_LIBATOMIC) + set(${result} FALSE PARENT_SCOPE) + else () + cmake_push_check_state() + list(APPEND CMAKE_REQUIRED_LIBRARIES atomic) + check_c_source_compiles("${_atomic_test_source}" RAYLIB_ATOMICS_WITH_LIBATOMIC) + cmake_pop_check_state() + set(${result} ${RAYLIB_ATOMICS_WITH_LIBATOMIC} PARENT_SCOPE) + endif () +endfunction() + set(RAYLIB_DEPENDENCIES "include(CMakeFindDependencyMacro)") if (${PLATFORM} STREQUAL "Desktop") @@ -222,6 +246,14 @@ endif () set(LIBS_PRIVATE ${LIBS_PRIVATE} ${OPENAL_LIBRARY}) +if (SUPPORT_MODULE_RAUDIO AND UNIX AND NOT APPLE) + raylib_check_libatomic_required(RAYLIB_LIBATOMIC_REQUIRED) + if (RAYLIB_LIBATOMIC_REQUIRED) + message(STATUS "64-bit atomics require libatomic") + list(APPEND LIBS_PRIVATE atomic) + endif () +endif () + if (${PLATFORM} MATCHES "Desktop") set(LIBS_PRIVATE ${LIBS_PRIVATE} glfw) endif () diff --git a/cmake/ParseConfigHeader.cmake b/cmake/ParseConfigHeader.cmake index 797eea3cd..6a4b96145 100644 --- a/cmake/ParseConfigHeader.cmake +++ b/cmake/ParseConfigHeader.cmake @@ -10,7 +10,9 @@ string(REGEX MATCHALL ${MACRO_REGEX} MACRO_LIST ${CONFIG_HEADER_CONTENT}) set(CONFIG_HEADER_FLAGS ${MACRO_LIST}) list(FILTER CONFIG_HEADER_FLAGS INCLUDE REGEX "^.+SUPPORT_") list(TRANSFORM CONFIG_HEADER_FLAGS REPLACE ${MACRO_REGEX} [[\2=OFF]] REGEX "^//") -list(TRANSFORM CONFIG_HEADER_FLAGS REPLACE ${MACRO_REGEX} [[\2=ON]]) +list(TRANSFORM CONFIG_HEADER_FLAGS REPLACE ${MACRO_REGEX} [[\2=\3]] REGEX "^[^/]") +list(TRANSFORM CONFIG_HEADER_FLAGS REPLACE [[=0$]] [[=OFF]]) +list(TRANSFORM CONFIG_HEADER_FLAGS REPLACE [[=1$]] [[=ON]]) set(CONFIG_HEADER_VALUES ${MACRO_LIST}) list(FILTER CONFIG_HEADER_VALUES EXCLUDE REGEX "(^.+SUPPORT_)|(^//)") diff --git a/src/Makefile b/src/Makefile index 13f132707..f3c7d5d61 100644 --- a/src/Makefile +++ b/src/Makefile @@ -117,9 +117,8 @@ RAYLIB_MODULE_RAYGUI_PATH ?= $(RAYLIB_SRC_PATH)/../../raygui/src # Use external GLFW library instead of rglfw module USE_EXTERNAL_GLFW ?= FALSE -# Enable support for X11 by default on Linux when using GLFW -# NOTE: Wayland is disabled by default, only enable if you are sure -GLFW_LINUX_ENABLE_WAYLAND ?= FALSE +# Enable support for Wayland and X11 by default on Linux when using GLFW +GLFW_LINUX_ENABLE_WAYLAND ?= TRUE GLFW_LINUX_ENABLE_X11 ?= TRUE # Enable support for X11 by default on Linux when using RGFW diff --git a/src/external/jar_mod.h b/src/external/jar_mod.h index 7ecf9f437..12b8101c4 100644 --- a/src/external/jar_mod.h +++ b/src/external/jar_mod.h @@ -1538,10 +1538,10 @@ mulong jar_mod_load_file(jar_mod_context_t * modctx, const char* filename) modctx->modfile = (muchar *) JARMOD_MALLOC(fsize); modctx->modfilesize = fsize; memset(modctx->modfile, 0, fsize); - fread(modctx->modfile, fsize, 1, f); + if(fread(modctx->modfile, fsize, 1, f) != 1) fsize = 0; fclose(f); - if(!jar_mod_load(modctx, (void *)modctx->modfile, fsize)) fsize = 0; + if(fsize && !jar_mod_load(modctx, (void *)modctx->modfile, fsize)) fsize = 0; } else fsize = 0; } return fsize; diff --git a/src/external/rlsw.h b/src/external/rlsw.h index 852f78ff7..cc786750c 100644 --- a/src/external/rlsw.h +++ b/src/external/rlsw.h @@ -213,6 +213,7 @@ typedef double GLclampd; #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C //#define GL_ATTRIB_STACK_DEPTH 0x0BB0 //#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 @@ -520,6 +521,7 @@ typedef enum { SW_RENDERER = GL_RENDERER, SW_VERSION = GL_VERSION, SW_EXTENSIONS = GL_EXTENSIONS, + SW_SHADING_LANGUAGE_VERSION = GL_SHADING_LANGUAGE_VERSION, SW_COLOR_CLEAR_VALUE = GL_COLOR_CLEAR_VALUE, SW_DEPTH_CLEAR_VALUE = GL_DEPTH_CLEAR_VALUE, SW_CURRENT_COLOR = GL_CURRENT_COLOR, @@ -4279,6 +4281,7 @@ const char *swGetString(SWget name) case SW_RENDERER: result = "RLSW OpenGL Software Renderer"; break; case SW_VERSION: result = RLSW_VERSION; break; case SW_EXTENSIONS: result = "None"; break; + case SW_SHADING_LANGUAGE_VERSION: result = "Not supported"; break; default: RLSW.errCode = SW_INVALID_ENUM; break; } @@ -5517,7 +5520,9 @@ static void SW_RASTER_TRIANGLE_SPAN(const sw_vertex_t *start, const sw_vertex_t } #endif + #ifdef SW_ENABLE_DEPTH_TEST discard: + #endif srcColor[0] += dSrcColordx[0]; srcColor[1] += dSrcColordx[1]; srcColor[2] += dSrcColordx[2]; @@ -5562,9 +5567,10 @@ static void SW_RASTER_TRIANGLE(const sw_vertex_t *v0, const sw_vertex_t *v1, con if (v0->position[1] > v1->position[1]) { const sw_vertex_t *tmp = v0; v0 = v1; v1 = tmp; } // Extracting coordinates from the sorted vertices - float x0 = v0->position[0], y0 = v0->position[1]; - float x1 = v1->position[0], y1 = v1->position[1]; - float x2 = v2->position[0], y2 = v2->position[1]; + // Put x away for safe keeping. Only y is used right now. Silences warnings. + float y0 = v0->position[1]; + float y1 = v1->position[1]; + float y2 = v2->position[1]; // Compute height differences float h02 = y2 - y0; @@ -5774,7 +5780,9 @@ static void SW_RASTER_QUAD(const sw_vertex_t *a, const sw_vertex_t *b, } #endif + #ifdef SW_ENABLE_DEPTH_TEST discard: + #endif color[0] += dCdx[0]; color[1] += dCdx[1]; color[2] += dCdx[2]; @@ -5927,7 +5935,9 @@ static void SW_RASTER_LINE(const sw_vertex_t *v0, const sw_vertex_t *v1) } #endif + #ifdef SW_ENABLE_DEPTH_TEST discard: + #endif x += xInc; y += yInc; #ifdef SW_ENABLE_DEPTH_TEST diff --git a/src/external/win32_clipboard.h b/src/external/win32_clipboard.h index 5c30fbd2e..ea0a34bd3 100644 --- a/src/external/win32_clipboard.h +++ b/src/external/win32_clipboard.h @@ -4,14 +4,14 @@ #ifndef WIN32_CLIPBOARD_ #define WIN32_CLIPBOARD_ -unsigned char *Win32GetClipboardImageData(int *width, int *height, unsigned long long int *dataSize); +unsigned char *Win32GetClipboardImageData(int *width, int *height, unsigned int *dataSize); #endif // WIN32_CLIPBOARD_ #ifdef WIN32_CLIPBOARD_IMPLEMENTATION #include #include #include -#include +#include // NOTE: These search for architecture is taken from "windows.h", and it's necessary to avoid including windows.h // and still make it compile on msvc, because import indirectly importing "winnt.h" (e.g. ) can cause problems is these are not defined @@ -213,7 +213,7 @@ static int GetPixelDataOffset(BITMAPINFOHEADER bih); // Get pixel data offset fr //---------------------------------------------------------------------------------- // Module Functions Definition //---------------------------------------------------------------------------------- -unsigned char *Win32GetClipboardImageData(int *width, int *height, unsigned long long int *dataSize) +unsigned char *Win32GetClipboardImageData(int *width, int *height, unsigned int *dataSize) { unsigned char *bmpData = NULL; @@ -228,7 +228,7 @@ unsigned char *Win32GetClipboardImageData(int *width, int *height, unsigned long *width = bmpInfoHeader->biWidth; *height = bmpInfoHeader->biHeight; SIZE_T clipDataSize = GlobalSize(clipHandle); - if (clipDataSize >= sizeof(BITMAPINFOHEADER)) + if ((clipDataSize >= sizeof(BITMAPINFOHEADER)) && (clipDataSize < INT_MAX)) { int pixelOffset = GetPixelDataOffset(*bmpInfoHeader); @@ -236,7 +236,7 @@ unsigned char *Win32GetClipboardImageData(int *width, int *height, unsigned long //------------------------------------------------------------------------ BITMAPFILEHEADER bmpFileHeader = { 0 }; SIZE_T bmpFileSize = sizeof(bmpFileHeader) + clipDataSize; - *dataSize = bmpFileSize; + *dataSize = (unsigned int)bmpFileSize; bmpFileHeader.bfType = 0x4D42; // BMP fil type constant bmpFileHeader.bfSize = (DWORD)bmpFileSize; // Up to 4GB works fine @@ -254,7 +254,7 @@ unsigned char *Win32GetClipboardImageData(int *width, int *height, unsigned long } else { - TRACELOG(LOG_WARNING, "Clipboard data is malformed"); + TRACELOG(LOG_WARNING, "Clipboard data is not supported (>2GB?)"); GlobalUnlock(clipHandle); CloseClipboard(); } diff --git a/src/platforms/rcore_android.c b/src/platforms/rcore_android.c index c427d7a58..ca0de7239 100644 --- a/src/platforms/rcore_android.c +++ b/src/platforms/rcore_android.c @@ -656,9 +656,9 @@ double GetTime(void) double time = 0.0; struct timespec ts = { 0 }; clock_gettime(CLOCK_MONOTONIC, &ts); - unsigned long long int nanoSeconds = (unsigned long long int)ts.tv_sec*1000000000LLU + (unsigned long long int)ts.tv_nsec; + unsigned long long nanoSeconds = (unsigned long long)ts.tv_sec*1000000000LLU + (unsigned long long)ts.tv_nsec; - time = (double)(nanoSeconds - CORE.Time.base)*1e-9; // Elapsed time since InitTimer() + time = (double)(nanoSeconds - CORE.Time.base)*1e-9; // Elapsed time since InitTimer() return time; } diff --git a/src/platforms/rcore_desktop_glfw.c b/src/platforms/rcore_desktop_glfw.c index 191a3130e..b1e100cf4 100644 --- a/src/platforms/rcore_desktop_glfw.c +++ b/src/platforms/rcore_desktop_glfw.c @@ -1054,12 +1054,13 @@ Image GetClipboardImage(void) #if SUPPORT_CLIPBOARD_IMAGE && SUPPORT_MODULE_RTEXTURES #if defined(_WIN32) - unsigned long long int dataSize = 0; + + unsigned int dataSize = 0; void *bmpData = NULL; int width = 0; int height = 0; - bmpData = (void *)Win32GetClipboardImageData(&width, &height, &dataSize); + bmpData = (void *)Win32GetClipboardImageData(&width, &height, &dataSize); if (bmpData == NULL) TRACELOG(LOG_WARNING, "Clipboard image: Couldn't get clipboard data."); else image = LoadImageFromMemory(".bmp", (const unsigned char *)bmpData, (int)dataSize); @@ -1112,7 +1113,7 @@ Image GetClipboardImage(void) XCloseDisplay(dpy); #else TRACELOG(LOG_WARNING, "GetClipboardImage() not implemented on target platform"); -#endif // defined(_WIN32) +#endif // _WIN32 #else TRACELOG(LOG_WARNING, "Clipboard image: SUPPORT_CLIPBOARD_IMAGE requires SUPPORT_MODULE_RTEXTURES to work properly"); #endif // SUPPORT_CLIPBOARD_IMAGE diff --git a/src/platforms/rcore_desktop_rgfw.c b/src/platforms/rcore_desktop_rgfw.c index 43d80c77d..a71dbb15e 100755 --- a/src/platforms/rcore_desktop_rgfw.c +++ b/src/platforms/rcore_desktop_rgfw.c @@ -178,12 +178,12 @@ typedef struct { RGFW_monitor *monitor; mg_gamepads minigamepad; - #if defined(GRAPHICS_API_OPENGL_SOFTWARE) - RGFW_surface *surface; - u8 *surfacePixels; - i32 surfaceWidth; - i32 surfaceHeight; - #endif +#if defined(GRAPHICS_API_OPENGL_SOFTWARE) + RGFW_surface *surface; + u8 *surfacePixels; + i32 surfaceWidth; + i32 surfaceHeight; +#endif } PlatformData; //---------------------------------------------------------------------------------- @@ -1024,15 +1024,15 @@ Image GetClipboardImage(void) #if SUPPORT_CLIPBOARD_IMAGE && SUPPORT_MODULE_RTEXTURES #if defined(_WIN32) - unsigned long long int dataSize = 0; // moved into _WIN32 scope until other platforms gain support - void *fileData = NULL; // moved into _WIN32 scope until other platforms gain support + unsigned int dataSize = 0; + void *fileData = NULL; int width = 0; int height = 0; - fileData = (void *)Win32GetClipboardImageData(&width, &height, &dataSize); + fileData = (void *)Win32GetClipboardImageData(&width, &height, &dataSize); if (fileData == NULL) TRACELOG(LOG_WARNING, "Clipboard image: Couldn't get clipboard data"); - else image = LoadImageFromMemory(".bmp", (const unsigned char *)fileData, dataSize); + else image = LoadImageFromMemory(".bmp", (const unsigned char *)fileData, (int)dataSize); #elif defined(__linux__) && defined(DRGFW_X11) @@ -1082,7 +1082,7 @@ Image GetClipboardImage(void) XCloseDisplay(dpy); #else TRACELOG(LOG_WARNING, "Clipboard image: PLATFORM_DESKTOP_RGFW doesn't implement GetClipboardImage() for this OS"); -#endif // defined(_WIN32) +#endif // _WIN32 #else TRACELOG(LOG_WARNING, "Clipboard image: SUPPORT_CLIPBOARD_IMAGE requires SUPPORT_MODULE_RTEXTURES to work properly"); #endif // SUPPORT_CLIPBOARD_IMAGE @@ -1352,7 +1352,7 @@ void PollInputEvents(void) { // set flag that the window was resized CORE.Window.resizedLastFrame = true; - + #if defined(__APPLE__) if (FLAG_IS_SET(CORE.Window.flags, FLAG_WINDOW_HIGHDPI)) { diff --git a/src/platforms/rcore_desktop_win32.c b/src/platforms/rcore_desktop_win32.c index 86a6c01c0..a797234ba 100644 --- a/src/platforms/rcore_desktop_win32.c +++ b/src/platforms/rcore_desktop_win32.c @@ -1526,7 +1526,6 @@ int InitPlatform(void) if (hr < 0) TRACELOG(LOG_ERROR, "%s failed, hresult=0x%lx", "SetProcessDpiAwareness", (DWORD)hr); } */ - HINSTANCE hInstance = GetModuleHandleW(0); // Define window class @@ -1775,9 +1774,9 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpara // WARNING: Don't trust the docs, they say this message can not be obtained if not calling DefWindowProc() // in response to WM_WINDOWPOSCHANGED but looks like when a window is created, // this message can be obtained without getting WM_WINDOWPOSCHANGED - + #if defined(GRAPHICS_API_OPENGL_SOFTWARE) - // WARNING: Waiting two frames before resizing because software-renderer backend is initilized with swInit() later + // WARNING: Waiting two frames before resizing because software-renderer backend is initilized with swInit() later // than InitPlatform(), that triggers WM_SIZE, so avoid crashing if (CORE.Time.frameCounter > 2) HandleWindowResize(hwnd, &platform.appScreenWidth, &platform.appScreenHeight); #else diff --git a/src/platforms/rcore_drm.c b/src/platforms/rcore_drm.c index da53223ef..659c80011 100644 --- a/src/platforms/rcore_drm.c +++ b/src/platforms/rcore_drm.c @@ -266,9 +266,12 @@ static void PollKeyboardEvents(void); // Process evdev keyboard events static void PollGamepadEvents(void); // Process evdev gamepad events static void PollMouseEvents(void); // Process evdev mouse events +// Not used by software rendering. +#if !defined(GRAPHICS_API_OPENGL_SOFTWARE) static int FindMatchingConnectorMode(const drmModeConnector *connector, const drmModeModeInfo *mode); // Search matching DRM mode in connector's mode list static int FindExactConnectorMode(const drmModeConnector *connector, uint width, uint height, uint fps, bool allowInterlaced); // Search exactly matching DRM connector mode in connector's list static int FindNearestConnectorMode(const drmModeConnector *connector, uint width, uint height, uint fps, bool allowInterlaced); // Search the nearest matching DRM connector mode in connector's list +#endif static void SetupFramebuffer(int width, int height); // Setup main framebuffer (required by InitPlatform()) @@ -1003,9 +1006,9 @@ double GetTime(void) double time = 0.0; struct timespec ts = { 0 }; clock_gettime(CLOCK_MONOTONIC, &ts); - unsigned long long int nanoSeconds = (unsigned long long int)ts.tv_sec*1000000000LLU + (unsigned long long int)ts.tv_nsec; + unsigned long long nanoSeconds = (unsigned long long)ts.tv_sec*1000000000LLU + (unsigned long long)ts.tv_nsec; - time = (double)(nanoSeconds - CORE.Time.base)*1e-9; // Elapsed time since InitTimer() + time = (double)(nanoSeconds - CORE.Time.base)*1e-9; // Elapsed time since InitTimer() return time; } @@ -2560,6 +2563,7 @@ static void PollMouseEvents(void) } } +#if !defined(GRAPHICS_API_OPENGL_SOFTWARE) // Search matching DRM mode in connector's mode list static int FindMatchingConnectorMode(const drmModeConnector *connector, const drmModeModeInfo *mode) { @@ -2648,6 +2652,7 @@ static int FindNearestConnectorMode(const drmModeConnector *connector, uint widt return nearestIndex; } +#endif // Compute framebuffer size relative to screen size and display size // NOTE: Global variables CORE.Window.render.width/CORE.Window.render.height and CORE.Window.renderOffset.x/CORE.Window.renderOffset.y can be modified diff --git a/src/platforms/rcore_memory.c b/src/platforms/rcore_memory.c index b06187018..6926d8f4e 100644 --- a/src/platforms/rcore_memory.c +++ b/src/platforms/rcore_memory.c @@ -364,14 +364,16 @@ double GetTime(void) { double time = 0.0; #if defined(_WIN32) - LARGE_INTEGER now = { 0 }; - QueryPerformanceCounter(&now); - return (double)(now.QuadPart - CORE.Time.base)/(double)platform.timerFrequency.QuadPart; + LARGE_INTEGER currentTicks = { 0 }; + QueryPerformanceCounter(¤tTicks); + + time = (double)(currentTicks.QuadPart - CORE.Time.base)/(double)platform.timerFrequency.QuadPart; #elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__EMSCRIPTEN__) struct timespec ts = { 0 }; clock_gettime(CLOCK_MONOTONIC, &ts); - unsigned long long int nanoSeconds = (unsigned long long int)ts.tv_sec*1000000000LLU + (unsigned long long int)ts.tv_nsec; - time = (double)(nanoSeconds - CORE.Time.base)*1e-9; // Elapsed time since InitTimer() + unsigned long long nanoSeconds = (unsigned long long)ts.tv_sec*1000000000LLU + (unsigned long long)ts.tv_nsec; + + time = (double)(nanoSeconds - CORE.Time.base)*1e-9; // Elapsed time since InitTimer() #endif return time; } diff --git a/src/platforms/rcore_template.c b/src/platforms/rcore_template.c index ee766867a..353d32d11 100644 --- a/src/platforms/rcore_template.c +++ b/src/platforms/rcore_template.c @@ -341,10 +341,12 @@ void SwapScreenBuffer(void) double GetTime(void) { double time = 0.0; + struct timespec ts = { 0 }; clock_gettime(CLOCK_MONOTONIC, &ts); - unsigned long long int nanoSeconds = (unsigned long long int)ts.tv_sec*1000000000LLU + (unsigned long long int)ts.tv_nsec; - time = (double)(nanoSeconds - CORE.Time.base)*1e-9; // Elapsed time since InitTimer() + unsigned long long nanoSeconds = (unsigned long long)ts.tv_sec*1000000000LLU + (unsigned long long)ts.tv_nsec; + + time = (double)(nanoSeconds - CORE.Time.base)*1e-9; // Elapsed time since InitTimer() return time; } diff --git a/src/raudio.c b/src/raudio.c index a007a1092..e4d36611c 100644 --- a/src/raudio.c +++ b/src/raudio.c @@ -858,7 +858,7 @@ Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int else if ((strcmp(fileType, ".mp3") == 0) || (strcmp(fileType, ".MP3") == 0)) { drmp3_config config = { 0 }; - unsigned long long int totalFrameCount = 0; + unsigned long long totalFrameCount = 0; // NOTE: Forcing conversion to 32bit float sample size on reading wave.data = drmp3_open_memory_and_read_pcm_frames_f32(fileData, dataSize, &config, &totalFrameCount, NULL); @@ -868,7 +868,7 @@ Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int { wave.channels = config.channels; wave.sampleRate = config.sampleRate; - wave.frameCount = (int)totalFrameCount; + wave.frameCount = (unsigned int)totalFrameCount; // WARNING: Potential loss of data } else TRACELOG(LOG_WARNING, "WAVE: Failed to load MP3 data"); @@ -896,13 +896,13 @@ Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int #if SUPPORT_FILEFORMAT_FLAC else if ((strcmp(fileType, ".flac") == 0) || (strcmp(fileType, ".FLAC") == 0)) { - unsigned long long int totalFrameCount = 0; + unsigned long long totalFrameCount = 0; // NOTE: Forcing conversion to 16bit sample size on reading wave.data = drflac_open_memory_and_read_pcm_frames_s16(fileData, dataSize, &wave.channels, &wave.sampleRate, &totalFrameCount, NULL); wave.sampleSize = 16; - if (wave.data != NULL) wave.frameCount = (unsigned int)totalFrameCount; + if (wave.data != NULL) wave.frameCount = (unsigned int)totalFrameCount; // WARNING: Potential loss of data else TRACELOG(LOG_WARNING, "WAVE: Failed to load FLAC data"); } #endif diff --git a/src/rcore.c b/src/rcore.c index 61bb10386..0dad0cd96 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -385,7 +385,7 @@ typedef struct CoreData { double draw; // Time measure for frame draw (seconds) double frame; // Time measure for one frame (seconds) double target; // Desired time for one frame, if 0 not applied (seconds) - unsigned long long int base; // Base time measure for hi-res timer (ticks or nanoseconds) + unsigned long long base; // Base time measure for hi-res timer (ticks or nanoseconds) unsigned int frameCounter; // Frame counter (frames) } Time; @@ -442,18 +442,6 @@ typedef enum AutomationEventType { ACTION_SETTARGETFPS // param[0]: fps } AutomationEventType; -// Event type to config events flags -// WARNING: Not used at the moment -typedef enum { - EVENT_INPUT_KEYBOARD = 0, - EVENT_INPUT_MOUSE = 1, - EVENT_INPUT_GAMEPAD = 2, - EVENT_INPUT_TOUCH = 4, - EVENT_INPUT_GESTURE = 8, - EVENT_WINDOW = 16, - EVENT_CUSTOM = 32 -} EventType; - // Event type name strings, required for export static const char *autoEventTypeName[] = { "EVENT_NONE", @@ -482,16 +470,6 @@ static const char *autoEventTypeName[] = { "ACTION_SETTARGETFPS" }; -/* -// Automation event (24 bytes) -// NOTE: Opaque struct, internal to raylib -struct AutomationEvent { - unsigned int frame; // Event frame - unsigned int type; // Event type (AutomationEventType) - int params[4]; // Event parameters (if required) -}; -*/ - static AutomationEventList *currentEventList = NULL; // Current automation events list, set by user, keep internal pointer static bool automationEventRecording = false; // Recording automation events flag //static short automationEventEnabled = 0b0000001111111111; // TODO: Automation events enabled for recording/playing @@ -1992,7 +1970,7 @@ unsigned char *LoadFileData(const char *fileName, int *dataSize) size_t count = fread(data, sizeof(unsigned char), size, file); // WARNING: fread() returns a size_t value, usually 'unsigned int' (32bit compilation) and 'unsigned long long' (64bit compilation) - // dataSize is unified along raylib as a 'int' type, so, for file-sizes > INT_MAX (2147483647 bytes) there is a limitation + // dataSize is unified along raylib as a 'int' type, so, for file-sizes >INT_MAX (2147483647 bytes) there is a limitation if (count > 2147483647) { TRACELOG(LOG_WARNING, "FILEIO: [%s] File is bigger than 2147483647 bytes, avoid using LoadFileData()", fileName); @@ -3358,15 +3336,15 @@ unsigned int *ComputeSHA1(const unsigned char *data, int dataSize) memcpy(msg, data, dataSize); msg[dataSize] = 128; // Write the '1' bit - unsigned long long bitsLen = 8ULL * dataSize; - msg[newDataSize-1] = (unsigned char)(bitsLen); - msg[newDataSize-2] = (unsigned char)(bitsLen >> 8); - msg[newDataSize-3] = (unsigned char)(bitsLen >> 16); - msg[newDataSize-4] = (unsigned char)(bitsLen >> 24); - msg[newDataSize-5] = (unsigned char)(bitsLen >> 32); - msg[newDataSize-6] = (unsigned char)(bitsLen >> 40); - msg[newDataSize-7] = (unsigned char)(bitsLen >> 48); - msg[newDataSize-8] = (unsigned char)(bitsLen >> 56); + unsigned long long bitsLen = 8ULL*dataSize; + msg[newDataSize - 1] = (unsigned char)(bitsLen); + msg[newDataSize - 2] = (unsigned char)(bitsLen >> 8); + msg[newDataSize - 3] = (unsigned char)(bitsLen >> 16); + msg[newDataSize - 4] = (unsigned char)(bitsLen >> 24); + msg[newDataSize - 5] = (unsigned char)(bitsLen >> 32); + msg[newDataSize - 6] = (unsigned char)(bitsLen >> 40); + msg[newDataSize - 7] = (unsigned char)(bitsLen >> 48); + msg[newDataSize - 8] = (unsigned char)(bitsLen >> 56); // Process the message in successive 512-bit chunks for (int offset = 0; offset < newDataSize; offset += (512/8)) @@ -3475,8 +3453,8 @@ unsigned int *ComputeSHA256(const unsigned char *data, int dataSize) hash[6] = 0x1f83d9ab; hash[7] = 0x5be0cd19; - const unsigned long long int bitLen = ((unsigned long long int)dataSize)*8; - unsigned long long int paddedSize = dataSize + sizeof(dataSize); + const unsigned long long bitLen = 8ULL*dataSize; + unsigned long long paddedSize = dataSize + sizeof(dataSize); paddedSize += (64 - (paddedSize%64)); unsigned char *buffer = (unsigned char *)RL_CALLOC(paddedSize, sizeof(unsigned char)); @@ -3487,7 +3465,7 @@ unsigned int *ComputeSHA256(const unsigned char *data, int dataSize) buffer[(paddedSize - sizeof(bitLen)) + (i - 1)] = (bitLen >> (8*(sizeof(bitLen) - i))) & 0xFF; } - for (unsigned long long int blockN = 0; blockN < paddedSize/64; blockN++) + for (unsigned long long blockN = 0; blockN < paddedSize/64; blockN++) { unsigned int a = hash[0]; unsigned int b = hash[1]; @@ -3509,7 +3487,7 @@ unsigned int *ComputeSHA256(const unsigned char *data, int dataSize) } for (int t = 16; t < 64; t++) w[t] = SHA256_A1(w[t - 2]) + w[t - 7] + SHA256_A0(w[t - 15]) + w[t - 16]; - for (unsigned long long int t = 0; t < 64; t++) + for (int t = 0; t < 64; t++) { unsigned int e1 = (SHA256_ROTATE_RIGHT(e, 6) ^ SHA256_ROTATE_RIGHT(e, 11) ^ SHA256_ROTATE_RIGHT(e, 25)); unsigned int ch = ((e & f) ^ (~e & g)); @@ -4241,7 +4219,7 @@ void InitTimer(void) if (clock_gettime(CLOCK_MONOTONIC, &now) == 0) // Success { - CORE.Time.base = (unsigned long long int)now.tv_sec*1000000000LLU + (unsigned long long int)now.tv_nsec; + CORE.Time.base = (unsigned long long)now.tv_sec*1000000000LLU + (unsigned long long)now.tv_nsec; } else TRACELOG(LOG_WARNING, "TIMER: Hi-resolution timer not available"); #endif diff --git a/src/rgestures.h b/src/rgestures.h index 734d33f0f..248e1f71a 100644 --- a/src/rgestures.h +++ b/src/rgestures.h @@ -157,8 +157,8 @@ float GetGesturePinchAngle(void); // Get gesture pinch ang extern "C" { // Prevents name mangling of functions #endif // Functions required to query time on Windows - int __stdcall QueryPerformanceCounter(unsigned long long int *lpPerformanceCount); - int __stdcall QueryPerformanceFrequency(unsigned long long int *lpFrequency); + int __stdcall QueryPerformanceCounter(unsigned long long *lpPerformanceCount); + int __stdcall QueryPerformanceFrequency(unsigned long long *lpFrequency); #if defined(__cplusplus) } #endif @@ -518,37 +518,36 @@ static double rgGetCurrentTime(void) time = GetTime(); #else #if defined(_WIN32) - unsigned long long int clockFrequency, currentTime; + unsigned long long clockFrequency = 0; + unsigned long long currentClockTicks = 0; QueryPerformanceFrequency(&clockFrequency); // BE CAREFUL: Costly operation! - QueryPerformanceCounter(¤tTime); + QueryPerformanceCounter(¤tClockTicks); - time = (double)currentTime/clockFrequency; // Time in seconds + time = (double)currentClockTicks/clockFrequency; // Time in seconds #endif - #if defined(__linux__) // NOTE: Only for Linux-based systems - struct timespec now; + struct timespec now = { 0 }; clock_gettime(CLOCK_MONOTONIC, &now); - unsigned long long int nowTime = (unsigned long long int)now.tv_sec*1000000000LLU + (unsigned long long int)now.tv_nsec; // Time in nanoseconds + unsigned long long nanoSeconds = (unsigned long long)now.tv_sec*1000000000LLU + (unsigned long long)now.tv_nsec; - time = ((double)nowTime*1e-9); // Time in seconds + time = ((double)nanoSeconds*1e-9); // Time in seconds #endif - #if defined(__APPLE__) //#define CLOCK_REALTIME CALENDAR_CLOCK // returns UTC time since 1970-01-01 //#define CLOCK_MONOTONIC SYSTEM_CLOCK // returns the time since boot time - clock_serv_t cclock; - mach_timespec_t now; + clock_serv_t cclock = { 0 }; + mach_timespec_t now = { 0 }; host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock); // NOTE: OS X does not have clock_gettime(), using clock_get_time() clock_get_time(cclock, &now); mach_port_deallocate(mach_task_self(), cclock); - unsigned long long int nowTime = (unsigned long long int)now.tv_sec*1000000000LLU + (unsigned long long int)now.tv_nsec; // Time in nanoseconds + unsigned long long nanoSeconds = (unsigned long long)now.tv_sec*1000000000LLU + (unsigned long long)now.tv_nsec; - time = ((double)nowTime*1e-9); // Time in seconds + time = ((double)nanoSeconds*1e-9); // Time in seconds #endif #endif diff --git a/src/rlgl.h b/src/rlgl.h index e8db37b01..b9cddb616 100644 --- a/src/rlgl.h +++ b/src/rlgl.h @@ -3747,7 +3747,7 @@ void rlGetGlTextureFormats(int format, unsigned int *glInternalFormat, unsigned case RL_PIXELFORMAT_UNCOMPRESSED_R16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_LUMINANCE; *glFormat = GL_LUMINANCE; *glType = GL_HALF_FLOAT_ARB; break; case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_RGB; *glFormat = GL_RGB; *glType = GL_HALF_FLOAT_ARB; break; case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_HALF_FLOAT_ARB; break; - #else // defined(GRAPHICS_API_OPENGL_ES2) + #else // GRAPHICS_API_OPENGL_ES2 case RL_PIXELFORMAT_UNCOMPRESSED_R16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_LUMINANCE; *glFormat = GL_LUMINANCE; *glType = GL_HALF_FLOAT_OES; break; // NOTE: Requires extension OES_texture_half_float case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_RGB; *glFormat = GL_RGB; *glType = GL_HALF_FLOAT_OES; break; // NOTE: Requires extension OES_texture_half_float case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_HALF_FLOAT_OES; break; // NOTE: Requires extension OES_texture_half_float diff --git a/src/rshapes.c b/src/rshapes.c index fa7f2cf2f..c06f20462 100644 --- a/src/rshapes.c +++ b/src/rshapes.c @@ -1434,7 +1434,7 @@ void DrawTriangleGradient(Vector2 v1, Vector2 v2, Vector2 v3, Color c1, Color c2 rlBegin(RL_QUADS); rlNormal3f(0.0f, 0.0f, 1.0f); - + rlColor4ub(c1.r, c1.g, c1.b, c1.a); rlTexCoord2f(shapeRect.x/texShapes.width, shapeRect.y/texShapes.height); rlVertex2f(v1.x, v1.y);