Skip to content

v6.0.0

Choose a tag to compare

@brettchalupa brettchalupa released this 24 Apr 19:57
· 23 commits to main since this release
Immutable release. Only release title and notes can be modified.
b0e05e7

Upgrade to raylib 6.0 and raygui 5. sola-raylib's major version tracks
raylib's, so 6.x binds raylib 6.0. See raylib's 6.0 release notes
for the full upstream story.

Breaking

  • raylib 6.0 — upstream redesigned skeletal animation, fullscreen modes, the
    build-config system, and more. Most safe wrappers are unchanged; the
    exceptions are below.
  • RaylibModel::bind_pose and bind_pose_mut now return Option<&[Transform]>
    (was Option<&Transform>). The underlying field is an array sized by
    boneCount, so the old signature read garbage past the first bone.
  • Removed RaylibMesh::indicies / indicies_mut. The typo'd aliases were
    deprecated in 5.5.3 with a "removed in 6.0" note — use indices /
    indices_mut.
  • DrawModelPoints / DrawModelPointsEx removed — raylib 6.0 dropped these
    from its public API.
  • Removed the rlImGui / imgui integration. The imgui feature, the
    raylib::imgui module, the RayImGUITrait and friends, the rlImGui
    submodule, and the imgui example are all gone. sola-raylib is focused on
    raylib + raygui; if you want imgui-in-raylib, use a community bridge crate or
    roll a small integration crate against sola-raylib-sys.
  • Removed the physac status row from the README. There was no actual physac
    binding in the safe crate; the row was aspirational. Physac itself is a
    separate raylib-extras library — a real binding would live in its own crate.

Added

New API wrappers for raylib 6.0 additions:

  • Models: update_model_animation_ex (animation blending).
  • Input: get_key_name.
  • Hashing: compute_sha256, compute_sha1, compute_md5, compute_crc32.
  • Shapes (RaylibDraw): draw_line_dashed, draw_ellipse_v,
    draw_ellipse_lines_v.
  • Text: measure_text_codepoints.
  • Math: Vector2::cross_product, Matrix::multiply_value, Matrix::compose.
  • Pixel helpers in core::texture: get_pixel_color and set_pixel_color
    (take a PixelFormat enum and byte slice, validate slice length).

Fixed

  • RaylibMesh::tangents / tangents_mut return &[Vector4] /
    &mut [Vector4]
    (was Vector3). Raylib stores tangents as
    float[4 * vertexCount] (XYZW where W is the bitangent sign), but the
    previous cast sliced 3 of every 4 floats and produced misaligned reads.
    Covered by a new unit test in raylib/src/core/models.rs.
  • CMake USE_WAYLAND flag updated to GLFW_BUILD_WAYLAND. Upstream renamed
    the knob in 6.0; our wayland feature was silently a no-op until this fix.
  • Removed two long-silent no-op CMake defines (SUPPORT_BUSY_WAIT_LOOP=OFF,
    SUPPORT_FILEFORMAT_JPG=ON). raylib 6.0 ignores SUPPORT_* overrides unless
    CUSTOMIZE_BUILD=ON is also set; experimentally turning that on caused
    unresponsive windows (black screen + "window is not responding") on Linux/X11.
    Keeping raylib's config.h defaults is the safe choice for 6.0.0.
    custom_frame_control, noscreenshot, and nogif features still activate
    CUSTOMIZE_BUILD=ON locally when enabled, so those paths keep working.
  • Audio: Wave::export_as_code. Raw audio-thread processor hooks as
    unsafe fns that take extern "C" fn(*mut c_void, u32) pointers:
    AudioStream::attach_audio_stream_processor /
    detach_audio_stream_processor, and
    RaylibAudio::attach_audio_mixed_processor / detach_audio_mixed_processor.
    Ergonomic closure wrapping is future work; the raw pointer interface is honest
    about the audio-thread risk.

New examples exercising the new surface: animation_blending, shapes_new,
borderless_fullscreen, pixel_color (HSV wheel painted via set_pixel_color,
read back under the cursor with get_pixel_color). The input example now also
displays get_key_name.

Other

  • raylib-sys/README.md rewritten to reflect the current build-time bindgen
    flow; the old doc described a workflow that no longer exists.
  • DEVELOPING.md gains a "Bumping raylib" checklist.
  • New opt-in feature flags for raylib 6.0's new platform backends. All three
    are experimental upstream and may not work well yet.
    Raylib 6.0 shipped them
    as new backends with known gaps. We expose the flags so you can opt in; what
    actually renders or links is whatever upstream supports today.
    • software_render: build raylib with the CPU rlsw backend
      (OPENGL_VERSION=Software). rlsw is not compatible with the default GLFW
      desktop backend
      per upstream (raylib#5664), so use it via
      --features "sdl,software_render" on Linux/macOS (requires SDL2 dev
      headers). just example-sw <name> and just examples-sw wire that combo
      for you. Windows would need the rcore_desktop_win32 native backend, which
      sola-raylib does not wire yet.
    • platform_memory: build raylib with the headless PLATFORM=Memory backend.
      The feature compiles the backend, but reading the framebuffer requires
      rlsw.h APIs (e.g. swGetColorBuffer) that are not yet wrapped in the
      safe crate. Post-release work.
    • platform_web_rgfw: use raylib's RGFW-based web backend
      (PLATFORM=WebRGFW) when cross-compiling to wasm32-unknown-emscripten. No
      local demo path. Requires an emscripten build loop.

Dependencies

  • Bumped thiserror from 1.x to 2.x in the public dep graph. Our public
    Error type still implements std::error::Error, so no API change for users.
    Only matters if you pin thiserror = "1" elsewhere in your Cargo.toml;
    cargo will resolve both versions side by side, or you can bump your own pin.
  • Dev-deps (rand 0.8 → 0.10) and build-deps (cmake, cc, bindgen patch
    updates) refreshed to current versions. These are not in the downstream user's
    dep graph.
  • Patch/minor refresh via cargo update across cfg-if, paste, seq-macro,
    serde, serde_json, ringbuf.