rayjs/CHANGELOG_5.5.md

4.1 KiB

Changelog: raylib 4.5 → 5.5 Migration

Overview

This changelog documents all changes made during the migration of rayjs from raylib 4.5 to 5.5 (stable), including raygui 3.64.0.

Git

  • Branch: update-raylib
  • Commit: 52be0e6 — "switch raylib to v5.5 and raygui to v4.0 stable releases"

Submodules Updated

Submodule From To
thirdparty/raylib dbc56a8 (6.0-dev) c1ab645 (tag 5.5)
thirdparty/raygui aa81c16 (tag 3.6) 25c8c65 (tag 4.0)

Files Modified

src/quickjs.c

  • Removed #include <GLFW/glfw3.h> and GLFWwindow-specific F5 reload code (now uses IsKeyPressed(KEY_F5) only, platform-agnostic)

bindings/src/quickjs.ts

  • jsToC() — Added type conversions:
    • char → first char of JS string
    • short, int *, long
    • unsigned short, unsigned long
    • const float *
    • bool * → local bool variable
    • char * (both const char * and non-const)
  • jsToJs() — Fixed pointer return types:
    • unsigned int *, unsigned char **ptr ? JS_NewUint32(ctx, *ptr) : JS_NULL
    • int *JS_NewInt32
    • Separated non-pointer unsigned types from pointer versions

bindings/src/index.ts

  • Removed ignore() calls for functions that no longer exist in 5.5:
    • IsAudioStreamReady, Vector3OrthoNormalize, Vector3ToFloatV, MatrixToFloatV, QuaternionToAxisAngle
  • Fixed VrDeviceInfo struct — removed non-existent field vScreenCenter (not present in 5.5)
  • Fixed GuiListView — added second out-parameter active at index 3 (raygui 4.0 has scrollIndex at 2 + active at 3)
  • Fixed GuiTextInputBox — ignored secretViewActive (bool*) parameter, wrote custom body without setOutParamString conflict
  • Added LoadRandomSequence to ignore() (returns int*)
  • Added auto-ignore filter — automatically ignores functions with unsupported parameter/return types (supportedTypes set with all raylib types + aliases like Texture2D, Camera, Quaternion, ModelSkeleton, GestureEvent)
  • Added needsBufferReturn() handler — special codegen for 5 functions that return unsigned char * + int * size param (produces JS_NewArrayBufferCopy instead of JS_NewUint32):
    • LoadFileData, CompressData, DecompressData, DecodeDataBase64, ExportImageToMemory

src/bindings/js_raylib_core.h

  • Fully regenerated (718 functions bound, 105 ignored)
  • 0 JavaScript errors

examples/lib.raylib.d.ts

  • Fully regenerated TypeScript declarations

thirdparty/raylib/parser/output/raylib_api.json

  • Regenerated from raylib 5.5 (12,137 lines)

generate-bindings.js

  • Rebuilt via webpack from updated sources

New Files

File Description
examples/textures/bunnymark_opt.js Optimized bunnymark benchmark (Float32Array, no GC pressure)
MIGRATION_TABLE.md Full function-by-function migration table (581 functions)
CHANGELOG_5.5.md This file

Deleted/Failed Build Directories

Path Reason
build-sdl/ Unsuccessful SDL backend build (GLFW symbols not available)

Build & Runtime Status

  • Build: [100%] Built target rayjs — 0 errors, 1 warning (LoadFileData unsigned int *int * sign mismatch — safe)
  • Runtime: raylib 5.5 initializes successfully, OpenGL 4.1 on Apple M2
  • Examples tested: main.js, bunnymark.js, bunnymark_opt.js — all run without errors

Known Issues / Future Work

  1. LoadFileData warningunsigned int* passed where int* expected (cosmetic, runtime-safe)
  2. SDL backend — needs #ifdef-separated GLFW/SDL code in quickjs.c
  3. GPU SkinningMesh struct missing boneMatrices and boneCount fields in binding (P1 — silent runtime misalignment)
  4. Model animations — still ignore()'d as in 4.5 (can be un-ignored if needed)
  5. GetScreenToWorldRay — available but no JS-side alias for old GetMouseRay
  6. Auto-ignore audit — 105 ignored functions, some may be bindable