From 6f5cabf60ceb60c44e7c7b5f1b1db9e89f1da9a3 Mon Sep 17 00:00:00 2001 From: Kaluub <60589762+Kaluub@users.noreply.github.com> Date: Sun, 14 Dec 2025 11:43:54 -0500 Subject: [PATCH 1/5] Fix misleading example text. (#5409) --- examples/core/core_2d_camera.c | 4 ++-- examples/core/core_2d_camera.png | Bin 21470 -> 8530 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/core/core_2d_camera.c b/examples/core/core_2d_camera.c index b752a9640..7e5a14a70 100644 --- a/examples/core/core_2d_camera.c +++ b/examples/core/core_2d_camera.c @@ -125,8 +125,8 @@ int main(void) DrawRectangle( 10, 10, 250, 113, Fade(SKYBLUE, 0.5f)); DrawRectangleLines( 10, 10, 250, 113, BLUE); - DrawText("Free 2d camera controls:", 20, 20, 10, BLACK); - DrawText("- Right/Left to move Offset", 40, 40, 10, DARKGRAY); + DrawText("Free 2D camera controls:", 20, 20, 10, BLACK); + DrawText("- Right/Left to move player", 40, 40, 10, DARKGRAY); DrawText("- Mouse Wheel to Zoom in-out", 40, 60, 10, DARKGRAY); DrawText("- A / S to Rotate", 40, 80, 10, DARKGRAY); DrawText("- R to reset Zoom and Rotation", 40, 100, 10, DARKGRAY); diff --git a/examples/core/core_2d_camera.png b/examples/core/core_2d_camera.png index d2f9e634f6fc1798e8466900973fb961f0133c9a..a0fdabb497a870bf7abd19a273b0d57b984d57a6 100644 GIT binary patch literal 8530 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 literal 21470 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 From 50250098608897e7daa78b7d58da281dbb83eb59 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 14 Dec 2025 19:45:28 +0100 Subject: [PATCH 2/5] REVIEWED: Make sure all variables are initialized on definition, prioritize one line per variable definitions --- src/external/rlsw.h | 8 ++--- src/platforms/rcore_desktop_glfw.c | 3 +- src/platforms/rcore_memory.c | 2 +- src/rmodels.c | 8 ++--- src/rtext.c | 14 +++++++-- src/rtextures.c | 48 ++++++++++++++++++++---------- 6 files changed, 55 insertions(+), 28 deletions(-) diff --git a/src/external/rlsw.h b/src/external/rlsw.h index 025216e39..80fb02c4f 100644 --- a/src/external/rlsw.h +++ b/src/external/rlsw.h @@ -2217,7 +2217,7 @@ static inline bool sw_triangle_face_culling(void) const float *h2 = RLSW.vertexBuffer[2].homogeneous; // Compute a value proportional to the signed area in the projected 2D plane, - // calculated directly using homogeneous coordinates BEFORE division by w. + // calculated directly using homogeneous coordinates BEFORE division by w // This is the determinant of the matrix formed by the (x, y, w) components // of the vertices, which correctly captures the winding order in homogeneous // space and its relationship to the projected 2D winding order, even with @@ -2235,13 +2235,13 @@ static inline bool sw_triangle_face_culling(void) // Discard the triangle if its winding order (determined by the sign // of the homogeneous area/determinant) matches the culled direction // A positive hSgnArea typically corresponds to a counter-clockwise - // winding in the projected space when all w > 0. + // winding in the projected space when all w > 0 // This test is robust for points with w > 0 or w < 0, correctly // capturing the change in orientation when crossing the w=0 plane // The culling logic remains the same based on the signed area/determinant // A value of 0 for hSgnArea means the points are collinear in (x, y, w) - // space, which corresponds to a degenerate triangle projection. + // space, which corresponds to a degenerate triangle projection // Such triangles are typically not culled by this test (0 < 0 is false, 0 > 0 is false) // and should be handled by the clipper if necessary return (RLSW.cullFace == SW_FRONT)? (hSgnArea < 0) : (hSgnArea > 0); // Cull if winding is "clockwise" : "counter-clockwise" @@ -2602,7 +2602,7 @@ static inline bool sw_quad_face_culling(void) // space, which corresponds to a degenerate triangle projection // Such quads might also be degenerate or non-planar. They are typically // not culled by this test (0 < 0 is false, 0 > 0 is false) - // and should be handled by the clipper if necessary. + // and should be handled by the clipper if necessary return (RLSW.cullFace == SW_FRONT)? (hSgnArea < 0.0f) : (hSgnArea > 0.0f); // Cull if winding is "clockwise" : "counter-clockwise" } diff --git a/src/platforms/rcore_desktop_glfw.c b/src/platforms/rcore_desktop_glfw.c index 8bd4b3a69..d6ed11c2f 100644 --- a/src/platforms/rcore_desktop_glfw.c +++ b/src/platforms/rcore_desktop_glfw.c @@ -894,7 +894,8 @@ Vector2 GetMonitorPosition(int monitor) if ((monitor >= 0) && (monitor < monitorCount)) { - int x, y; + int x = 0; + int y = 0; glfwGetMonitorPos(monitors[monitor], &x, &y); return (Vector2){ (float)x, (float)y }; diff --git a/src/platforms/rcore_memory.c b/src/platforms/rcore_memory.c index 5a3947561..1b7a55fd8 100644 --- a/src/platforms/rcore_memory.c +++ b/src/platforms/rcore_memory.c @@ -428,7 +428,7 @@ void SetMouseCursor(int cursor) TRACELOG(LOG_WARNING, "SetMouseCursor() not implemented on target platform"); } -// Get physical key name. +// Get physical key name const char *GetKeyName(int key) { TRACELOG(LOG_WARNING, "GetKeyName() not implemented on target platform"); diff --git a/src/rmodels.c b/src/rmodels.c index 1502e46af..883f98660 100644 --- a/src/rmodels.c +++ b/src/rmodels.c @@ -3655,7 +3655,7 @@ void GenMeshTangents(Mesh *mesh) for (int t = 0; t < mesh->triangleCount; t++) { // Get triangle vertex indices - int i0, i1, i2; + int i0 = 0, i1 = 0, i2 = 0; if (mesh->indices != NULL) { @@ -4150,7 +4150,7 @@ RayCollision GetRayCollisionMesh(Ray ray, Mesh mesh, Matrix transform) // Test against all triangles in mesh for (int i = 0; i < triangleCount; i++) { - Vector3 a, b, c; + Vector3 a = 0, b = 0, c = 0; Vector3 *vertdata = (Vector3 *)mesh.vertices; if (mesh.indices) @@ -4193,8 +4193,8 @@ RayCollision GetRayCollisionTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3 RayCollision collision = { 0 }; Vector3 edge1 = { 0 }; Vector3 edge2 = { 0 }; - Vector3 p, q, tv; - float det, invDet, u, v, t; + Vector3 p = 0, q = 0, tv = 0; + float det = 0.0f, invDet = 0.0f, u = 0.0f, v = 0.0f, t = 0.0f; // Find vectors for two edges sharing V1 edge1 = Vector3Subtract(p2, p1); diff --git a/src/rtext.c b/src/rtext.c index 0efd7504b..f04f9ade4 100644 --- a/src/rtext.c +++ b/src/rtext.c @@ -649,7 +649,9 @@ GlyphInfo *LoadFontData(const unsigned char *fileData, int dataSize, int fontSiz // Calculate font basic metrics // NOTE: ascent is equivalent to font baseline - int ascent, descent, lineGap; + int ascent = 0; + int descent = 0; + int lineGap = 0; stbtt_GetFontVMetrics(&fontInfo, &ascent, &descent, &lineGap); // In case no chars count provided, default to 95 @@ -2483,7 +2485,15 @@ static Font LoadBMFont(const char *fileName) font.glyphs = (GlyphInfo *)RL_MALLOC(glyphCount*sizeof(GlyphInfo)); font.recs = (Rectangle *)RL_MALLOC(glyphCount*sizeof(Rectangle)); - int charId, charX, charY, charWidth, charHeight, charOffsetX, charOffsetY, charAdvanceX, pageID; + int charId = 0; + int charX = 0; + int charY = 0; + int charWidth = 0; + int charHeight = 0; + int charOffsetX = 0; + int charOffsetY = 0; + int charAdvanceX = 0; + int pageID = 0; for (int i = 0; i < glyphCount; i++) { diff --git a/src/rtextures.c b/src/rtextures.c index 02a9ff1a5..4208b40bd 100644 --- a/src/rtextures.c +++ b/src/rtextures.c @@ -1727,7 +1727,8 @@ void ImageResizeNN(Image *image, int newWidth, int newHeight) int xRatio = (int)((image->width << 16)/newWidth) + 1; int yRatio = (int)((image->height << 16)/newHeight) + 1; - int x2, y2; + int x2 = 0; + int y2 = 0; for (int y = 0; y < newHeight; y++) { for (int x = 0; x < newWidth; x++) @@ -2488,8 +2489,13 @@ void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp) Color oldPixel = WHITE; Color newPixel = WHITE; - int rError, gError, bError; - unsigned short rPixel, gPixel, bPixel, aPixel; // Used for 16bit pixel composition + int rError = 0; + int gError = 0; + int bError = 0; + unsigned short rPixel = 0; // Used for 16bit pixel composition + unsigned short gPixel = 0; + unsigned short bPixel = 0; + unsigned short aPixel = 0; #define MIN(a,b) (((a)<(b))?(a):(b)) @@ -4006,7 +4012,9 @@ void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec, Color // [-] GetPixelColor(): Get Vector4 instead of Color, easier for ColorAlphaBlend() // [ ] TODO: Support 16bit and 32bit (float) channels drawing - Color colSrc, colDst, blend; + Color colSrc = { 0 }; + Color colDst = { 0 }; + Color blend = { 0 }; bool blendRequired = true; // Fast path: Avoid blend if source has no alpha to blend @@ -4681,17 +4689,23 @@ void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, bottomBorder = patchHeight - topBorder; } - Vector2 vertA, vertB, vertC, vertD; - vertA.x = 0.0f; // outer left - vertA.y = 0.0f; // outer top - vertB.x = leftBorder; // inner left - vertB.y = topBorder; // inner top - vertC.x = patchWidth - rightBorder; // inner right - vertC.y = patchHeight - bottomBorder; // inner bottom - vertD.x = patchWidth; // outer right - vertD.y = patchHeight; // outer bottom - - Vector2 coordA, coordB, coordC, coordD; + Vector2 vertA = { 0 }; + Vector2 vertB = { 0 }; + Vector2 vertC = { 0 }; + Vector2 vertD = { 0 }; + vertA.x = 0.0f; // Outer left + vertA.y = 0.0f; // Outer top + vertB.x = leftBorder; // Inner left + vertB.y = topBorder; // Inner top + vertC.x = patchWidth - rightBorder; // Inner right + vertC.y = patchHeight - bottomBorder; // Inner bottom + vertD.x = patchWidth; // Outer right + vertD.y = patchHeight; // Outer bottom + + Vector2 coordA = { 0 }; + Vector2 coordB = { 0 }; + Vector2 coordC = { 0 }; + Vector2 coordD = { 0 }; coordA.x = nPatchInfo.source.x/width; coordA.y = nPatchInfo.source.y/height; coordB.x = (nPatchInfo.source.x + leftBorder)/width; @@ -4907,7 +4921,9 @@ Vector3 ColorToHSV(Color color) { Vector3 hsv = { 0 }; Vector3 rgb = { (float)color.r/255.0f, (float)color.g/255.0f, (float)color.b/255.0f }; - float min, max, delta; + float min = 0.0f; + float max = 0.0f; + float delta = 0.0f; min = rgb.x < rgb.y? rgb.x : rgb.y; min = min < rgb.z? min : rgb.z; From 9a337f3b3b6c8208574fea3eebd0bd46bc9a386e Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 14 Dec 2025 19:52:18 +0100 Subject: [PATCH 3/5] ADDED: Support software renderer on Web, blitting framebuffer data directly to a 2d canvas This improvement is just a prove of concept, at this moment `PLATFORM_WEB` is limited in terms of software rendering by `GLFW` that only allows creating a WebGL canvas context with `glfwCreateWindow()`. We can skip that call but then some GLFW functionality is not available (windowing, inputs). The best solution is replacing GLFW completely by a pure Emscripten implementation for `PLATFORM_WEB`. --- src/platforms/rcore_web.c | 52 ++++++++++++++++++++++++++++++++++++--- src/rcore.c | 2 +- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/platforms/rcore_web.c b/src/platforms/rcore_web.c index dc779d0fb..934f778c3 100644 --- a/src/platforms/rcore_web.c +++ b/src/platforms/rcore_web.c @@ -78,6 +78,11 @@ typedef struct { int unmaximizedHeight; // Internal var to store the unmaximized window (canvas) height char canvasId[64]; // Keep current canvas id where wasm app is running + // NOTE: Useful when trying to run multiple wasms in different canvases in same webpage + +#if defined(GRAPHICS_API_OPENGL_11_SOFTWARE) + unsigned int *pixels; // Pointer to pixel data buffer (RGBA 32bit format) +#endif } PlatformData; //---------------------------------------------------------------------------------- @@ -264,7 +269,8 @@ void ToggleFullscreen(void) }; emscripten_enter_soft_fullscreen(platform.canvasId, &strategy); - int width, height; + int width = 0; + int height = 0; emscripten_get_canvas_element_size(platform.canvasId, &width, &height); TRACELOG(LOG_WARNING, "Emscripten: Enter fullscreen: Canvas size: %i x %i", width, height); @@ -883,7 +889,32 @@ void DisableCursor(void) // Swap back buffer with front buffer (screen drawing) void SwapScreenBuffer(void) { +#if defined(GRAPHICS_API_OPENGL_11_SOFTWARE) + // Update framebuffer + rlCopyFramebuffer(0, 0, CORE.Window.render.width, CORE.Window.render.height, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, platform.pixels); + + // Copy framebuffer data into canvas + EM_ASM({ + const width = $0; + const height = $1; + const ptr = $2; + + // Get canvas and 2d context created + const canvas = Module.canvas; + const ctx = canvas.getContext('2d'); + + if (!Module.__img || (Module.__img.width !== width) || (Module.__img.height !== height)) { + Module.__img = ctx.createImageData(width, height); + } + + const src = HEAPU8.subarray(ptr, ptr + width*height*4); // RGBA (4 bytes) + Module.__img.data.set(src); + ctx.putImageData(Module.__img, 0, 0); + + }, CORE.Window.screen.width, CORE.Window.screen.height, platform.pixels); +#else glfwSwapBuffers(platform.handle); +#endif } //---------------------------------------------------------------------------------- @@ -974,7 +1005,7 @@ void SetMouseCursor(int cursor) } } -// Get physical key name. +// Get physical key name const char *GetKeyName(int key) { TRACELOG(LOG_WARNING, "GetKeyName() not implemented on target platform"); @@ -1214,7 +1245,21 @@ int InitPlatform(void) // Init fullscreen toggle required var: platform.ourFullscreen = false; - + +#if defined(GRAPHICS_API_OPENGL_11_SOFTWARE) + // Avoid creating a WebGL canvas, avoid calling glfwCreateWindow() + emscripten_set_canvas_element_size(platform.canvasId, CORE.Window.screen.width, CORE.Window.screen.height); + EM_ASM({ + const canvas = document.getElementById("canvas"); + Module.canvas = canvas; + }); + + // Load memory framebuffer with desired screen size + // NOTE: Despite using a software framebuffer for blitting, GLFW still creates a WebGL canvas, + // but it is not being used, on SwapScreenBuffer() the pure software renderer is used + // TODO: Consider requesting another type of canvas, not a WebGL one --> Replace GLFW-web by Emscripten? + platform.pixels = (unsigned int *)RL_CALLOC(CORE.Window.screen.width*CORE.Window.screen.height, sizeof(unsigned int)); +#else if (CORE.Window.fullscreen) { // remember center for switchinging from fullscreen to window @@ -1289,6 +1334,7 @@ int InitPlatform(void) TRACELOG(LOG_WARNING, "GLFW: Failed to initialize Window"); return -1; } +#endif // WARNING: glfwCreateWindow() title doesn't work with emscripten emscripten_set_window_title((CORE.Window.title != 0)? CORE.Window.title : " "); diff --git a/src/rcore.c b/src/rcore.c index 24ebb6dec..19228cc8e 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -117,7 +117,7 @@ #include // Required for: time() [Used in InitTimer()] #include // Required for: tan() [Used in BeginMode3D()], atan2f() [Used in LoadVrStereoConfig()] -#if defined(PLATFORM_MEMORY) +#if defined(PLATFORM_MEMORY) || defined(PLATFORM_WEB) #define SW_GL_FRAMEBUFFER_COPY_BGRA false #endif #define RLGL_IMPLEMENTATION From a0fd5ab1d90e0c34d9e6e173b08f23453f7561ff Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 14 Dec 2025 19:59:12 +0100 Subject: [PATCH 4/5] Update rmodels.c --- src/rmodels.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/rmodels.c b/src/rmodels.c index 883f98660..2347ca0e6 100644 --- a/src/rmodels.c +++ b/src/rmodels.c @@ -4150,7 +4150,9 @@ RayCollision GetRayCollisionMesh(Ray ray, Mesh mesh, Matrix transform) // Test against all triangles in mesh for (int i = 0; i < triangleCount; i++) { - Vector3 a = 0, b = 0, c = 0; + Vector3 a = { 0 }; + Vector3 b = { 0 }; + Vector3 c = { 0 }; Vector3 *vertdata = (Vector3 *)mesh.vertices; if (mesh.indices) @@ -4193,7 +4195,9 @@ RayCollision GetRayCollisionTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3 RayCollision collision = { 0 }; Vector3 edge1 = { 0 }; Vector3 edge2 = { 0 }; - Vector3 p = 0, q = 0, tv = 0; + Vector3 p = { 0 }; + Vector3 q = { 0 }; + Vector3 tv = { 0 }; float det = 0.0f, invDet = 0.0f, u = 0.0f, v = 0.0f, t = 0.0f; // Find vectors for two edges sharing V1 From 8d246fdaff8ae5f23593f70c827029d3e8d43a7c Mon Sep 17 00:00:00 2001 From: ALONZO Robin Date: Mon, 15 Dec 2025 00:03:31 +0100 Subject: [PATCH 5/5] Fix EXTERNAL_CONFIG_FLAGS being defined even when no custom config is used when building with zig (#5410) --- build.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.zig b/build.zig index 4e06ca757..5d2902111 100644 --- a/build.zig +++ b/build.zig @@ -155,9 +155,9 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std. ); } - // Sets a flag indicating the use of a custom `config.h` - try raylib_flags_arr.append(b.allocator, "-DEXTERNAL_CONFIG_FLAGS"); if (options.config.len > 0) { + // Sets a flag indicating the use of a custom `config.h` + try raylib_flags_arr.append(b.allocator, "-DEXTERNAL_CONFIG_FLAGS"); // Splits a space-separated list of config flags into multiple flags // // Note: This means certain flags like `-x c++` won't be processed properly.