docs/superpowers/notes/cheatsheet-parity-audit.md
Source: https://www.raylib.com/cheatsheet/cheatsheet.html (raylib 6.0 cheatsheet)
Audit date: 2026-05-29
Scope: every cheatsheet section EXCEPT Text (rtext) and Files management
(rfilesystem) — Rust std covers those (see memory/skip-std-equivalent-fns.md).
Note on source: the live cheatsheet HTML page is JS-rendered and not
extractable via plain HTTP fetch, and the v6.0 PDF is binary-compressed. The
authoritative function list used for this audit is the vendored
raylib-sys/raylib/src/raylib.h (raylib 6.0, 600 RLAPI declarations),
which is what bindgen actually binds. The cheatsheet is generated from this
header, so the function set is identical modulo presentation order.
In-scope (excluding rtext and the // File system management functions,
// File access custom callbacks, // File operations blocks of rcore):
Genuine gaps further categorized:
Important headline finding: the existing
parity-checklist.mdlists 19[ ]items that are actually already wrapped — 14 inColor/pixel relatedas inherent methods onraylib-sys::Color, 4 inBasic shapes collisionas inherent methods onraylib-sys::Rectangle, andAttachAudioStreamProcessorvia the user-data callback wrapper. The auto-scan infind_unimplemented.pyonly looks atraylib/src/**and atpub fntop-level wrappers, so it misses these. See §5 for the full reconciliation list. The genuine-gap count for the in-scope sections is 5, not 49 — the remaining 30[ ]entries are either reconcile deltas (§5) or live in the out-of-scopertext/ file-system sections.
raylib-sys/raylib/src/raylib.h (the vendored 6.0 header; the cheatsheet
is generated from this).pub fn <fname_snake> in raylib/src/** — top-level safe wrappers.fn <fname_snake>(...) inside impl … blocks (method wrappers).ffi::<FName> direct callsites (proves the symbol is reached).raylib-sys types (raylib-sys/src/color.rs,
raylib-sys/src/math.rs, etc.) — these are reachable from the safe
crate via Color / Rectangle / Vector* re-exports.docs/superpowers/parity-checklist.md (508 wrapped / 43 wont-impl / 49
TODO totals) and noted reconciliation deltas.Out-of-scope sections (still listed for completeness so a reader can verify nothing was missed):
rcore— File system management, File access custom callbacks, File operations (covered bystd::fsandstd::path).- All of
rtext(covered by&str,String,format!, thecharAPI etc.) — Font loading and Text drawing functions stay in scope because they touch the GPU and require the safe binding; the strings helpers do not.
InitWindow — raylib/src/core/window.rsCloseWindow — raylib/src/core/window.rs (via Drop on
RaylibHandle)WindowShouldClose — raylib/src/core/window.rsIsWindowReady — raylib/src/core/window.rsIsWindowFullscreen — raylib/src/core/window.rsIsWindowHidden — raylib/src/core/window.rsIsWindowMinimized — raylib/src/core/window.rsIsWindowMaximized — raylib/src/core/window.rsIsWindowFocused — raylib/src/core/window.rsIsWindowResized — raylib/src/core/window.rsIsWindowState — raylib/src/core/window.rsSetWindowState — raylib/src/core/window.rsClearWindowState — raylib/src/core/window.rsToggleFullscreen — raylib/src/core/window.rsToggleBorderlessWindowed — raylib/src/core/window.rsMaximizeWindow — raylib/src/core/window.rsMinimizeWindow — raylib/src/core/window.rsRestoreWindow — raylib/src/core/window.rsSetWindowIcon — raylib/src/core/window.rsSetWindowIcons — raylib/src/core/window.rsSetWindowTitle — raylib/src/core/window.rsSetWindowPosition — raylib/src/core/window.rsSetWindowMonitor — raylib/src/core/window.rsSetWindowMinSize — raylib/src/core/window.rsSetWindowMaxSize — raylib/src/core/window.rsSetWindowSize — raylib/src/core/window.rsSetWindowOpacity — raylib/src/core/window.rsSetWindowFocused — raylib/src/core/window.rsGetWindowHandle — raylib/src/core/window.rsGetScreenWidth — raylib/src/core/window.rsGetScreenHeight — raylib/src/core/window.rsGetRenderWidth — raylib/src/core/window.rsGetRenderHeight — raylib/src/core/window.rsGetMonitorCount — raylib/src/core/window.rsGetCurrentMonitor — raylib/src/core/window.rsGetMonitorPosition — raylib/src/core/window.rsGetMonitorWidth — raylib/src/core/window.rsGetMonitorHeight — raylib/src/core/window.rsGetMonitorPhysicalWidth — raylib/src/core/window.rsGetMonitorPhysicalHeight — raylib/src/core/window.rsGetMonitorRefreshRate — raylib/src/core/window.rsGetWindowPosition — raylib/src/core/window.rsGetWindowScaleDPI — raylib/src/core/window.rsGetMonitorName — raylib/src/core/window.rsSetClipboardText — raylib/src/core/window.rsGetClipboardText — raylib/src/core/window.rsGetClipboardImage — raylib/src/core/window.rsEnableEventWaiting — raylib/src/core/window.rsDisableEventWaiting — raylib/src/core/window.rsShowCursor — raylib/src/core/window.rsHideCursor — raylib/src/core/window.rsIsCursorHidden — raylib/src/core/window.rsEnableCursor — raylib/src/core/window.rsDisableCursor — raylib/src/core/window.rsIsCursorOnScreen — raylib/src/core/window.rsClearBackground — raylib/src/core/drawing.rsBeginDrawing — raylib/src/core/drawing.rs (RAII via
RaylibDrawHandle)EndDrawing — raylib/src/core/drawing.rs (RAII)BeginMode2D — raylib/src/core/drawing.rs (RAII)EndMode2D — raylib/src/core/drawing.rs (RAII)BeginMode3D — raylib/src/core/drawing.rs (RAII)EndMode3D — raylib/src/core/drawing.rs (RAII)BeginTextureMode — raylib/src/core/drawing.rs (RAII)EndTextureMode — raylib/src/core/drawing.rs (RAII)BeginShaderMode — raylib/src/core/drawing.rs (RAII)EndShaderMode — raylib/src/core/drawing.rs (RAII)BeginBlendMode — raylib/src/core/drawing.rs (RAII)EndBlendMode — raylib/src/core/drawing.rs (RAII)BeginScissorMode — raylib/src/core/drawing.rs (RAII)EndScissorMode — raylib/src/core/drawing.rs (RAII)BeginVrStereoMode — raylib/src/core/vr.rs (RAII)EndVrStereoMode — raylib/src/core/vr.rs (RAII)LoadVrStereoConfig — raylib/src/core/vr.rsUnloadVrStereoConfig — raylib/src/core/vr.rs (via Drop)LoadShader — raylib/src/core/shaders.rsLoadShaderFromMemory — raylib/src/core/shaders.rsIsShaderValid — raylib/src/core/shaders.rsGetShaderLocation — raylib/src/core/shaders.rsGetShaderLocationAttrib — raylib/src/core/shaders.rsSetShaderValue — raylib/src/core/shaders.rsSetShaderValueV — raylib/src/core/shaders.rsSetShaderValueMatrix — raylib/src/core/shaders.rsSetShaderValueTexture — raylib/src/core/shaders.rsUnloadShader — raylib/src/core/shaders.rs (via Drop)GetScreenToWorldRay — raylib/src/core/window.rsGetScreenToWorldRayEx — raylib/src/core/window.rsGetWorldToScreen — raylib/src/core/window.rsGetWorldToScreenEx — raylib/src/core/window.rsGetWorldToScreen2D — raylib/src/core/window.rsGetScreenToWorld2D — raylib/src/core/window.rsGetCameraMatrix — raylib/src/core/camera.rsGetCameraMatrix2D — raylib/src/core/camera.rsSetTargetFPS — raylib/src/core/window.rsGetFrameTime — raylib/src/core/window.rsGetTime — raylib/src/core/window.rsGetFPS — raylib/src/core/window.rsSwapScreenBuffer — raylib/src/core/window.rsPollInputEvents — raylib/src/core/window.rsWaitTime — raylib/src/core/window.rsSetRandomSeed — raylib/src/core/misc.rsGetRandomValue — raylib/src/core/misc.rsLoadRandomSequence — raylib/src/core/misc.rsUnloadRandomSequence — raylib/src/core/misc.rsTakeScreenshot — raylib/src/core/misc.rsSetConfigFlags — raylib/src/core/window.rsOpenURL — raylib/src/core/misc.rsSetTraceLogLevel — raylib/src/core/logging.rsTraceLog — raylib/src/core/logging.rsSetTraceLogCallback — raylib/src/core/callbacks.rs
(implemented via C shim; the auto-scan misses it)MemAlloc — raylib/src/core/data.rs (used internally by
DataBuf/Image/Wave/etc. allocators)MemRealloc — SKIP. Reason: not needed by the safe API; Rust uses
Box/Vec reallocation; wrap on demand.MemFree — raylib/src/core/data.rsLoadAutomationEventList — raylib/src/core/automation.rsUnloadAutomationEventList — raylib/src/core/automation.rs (Drop)ExportAutomationEventList — raylib/src/core/automation.rsSetAutomationEventList — raylib/src/core/automation.rsSetAutomationEventBaseFrame — raylib/src/core/automation.rsStartAutomationEventRecording — raylib/src/core/automation.rsStopAutomationEventRecording — raylib/src/core/automation.rsPlayAutomationEvent — raylib/src/core/automation.rsCompressData — raylib/src/core/data.rsDecompressData — raylib/src/core/data.rsEncodeDataBase64 — raylib/src/core/data.rsDecodeDataBase64 — raylib/src/core/data.rsComputeCRC32 — raylib/src/core/hashes.rs::compute_crc32ComputeMD5 — raylib/src/core/hashes.rs::compute_md5ComputeSHA1 — raylib/src/core/hashes.rs::compute_sha1ComputeSHA256 — raylib/src/core/hashes.rs::compute_sha256IsKeyPressed — raylib/src/core/input.rsIsKeyPressedRepeat — raylib/src/core/input.rsIsKeyDown — raylib/src/core/input.rsIsKeyReleased — raylib/src/core/input.rsIsKeyUp — raylib/src/core/input.rsGetKeyPressed — raylib/src/core/input.rsGetCharPressed — raylib/src/core/input.rsGetKeyName — GAP. Action: fix-now.SetExitKey — raylib/src/core/input.rsIsGamepadAvailable — raylib/src/core/input.rsGetGamepadName — raylib/src/core/input.rsIsGamepadButtonPressed — raylib/src/core/input.rsIsGamepadButtonDown — raylib/src/core/input.rsIsGamepadButtonReleased — raylib/src/core/input.rsIsGamepadButtonUp — raylib/src/core/input.rsGetGamepadButtonPressed — raylib/src/core/input.rsGetGamepadAxisCount — raylib/src/core/input.rsGetGamepadAxisMovement — raylib/src/core/input.rsSetGamepadMappings — raylib/src/core/input.rsSetGamepadVibration — raylib/src/core/input.rsIsMouseButtonPressed — raylib/src/core/input.rsIsMouseButtonDown — raylib/src/core/input.rsIsMouseButtonReleased — raylib/src/core/input.rsIsMouseButtonUp — raylib/src/core/input.rsGetMouseX — raylib/src/core/input.rsGetMouseY — raylib/src/core/input.rsGetMousePosition — raylib/src/core/input.rsGetMouseDelta — raylib/src/core/input.rsSetMousePosition — raylib/src/core/input.rsSetMouseOffset — raylib/src/core/input.rsSetMouseScale — raylib/src/core/input.rsGetMouseWheelMove — raylib/src/core/input.rsGetMouseWheelMoveV — raylib/src/core/input.rsSetMouseCursor — raylib/src/core/input.rsGetTouchX — raylib/src/core/input.rsGetTouchY — raylib/src/core/input.rsGetTouchPosition — raylib/src/core/input.rsGetTouchPointId — raylib/src/core/input.rsGetTouchPointCount — raylib/src/core/input.rsSetGesturesEnabled — raylib/src/core/input.rsIsGestureDetected — raylib/src/core/input.rsGetGestureDetected — raylib/src/core/input.rsGetGestureHoldDuration — raylib/src/core/input.rsGetGestureDragVector — raylib/src/core/input.rsGetGestureDragAngle — raylib/src/core/input.rsGetGesturePinchVector — raylib/src/core/input.rsGetGesturePinchAngle — raylib/src/core/input.rsUpdateCamera — raylib/src/core/camera.rsUpdateCameraPro — raylib/src/core/camera.rsSetShapesTexture — raylib/src/core/drawing.rsGetShapesTexture — raylib/src/core/drawing.rsGetShapesTextureRectangle — raylib/src/core/drawing.rsDrawPixel — raylib/src/core/drawing.rsDrawPixelV — raylib/src/core/drawing.rsDrawLine — raylib/src/core/drawing.rsDrawLineV — raylib/src/core/drawing.rsDrawLineEx — raylib/src/core/drawing.rsDrawLineStrip — raylib/src/core/drawing.rsDrawLineBezier — raylib/src/core/drawing.rsDrawLineDashed — GAP. Action: fix-now.DrawCircle — raylib/src/core/drawing.rsDrawCircleV — raylib/src/core/drawing.rsDrawCircleGradient — raylib/src/core/drawing.rsDrawCircleSector — raylib/src/core/drawing.rsDrawCircleSectorLines — raylib/src/core/drawing.rsDrawCircleLines — raylib/src/core/drawing.rsDrawCircleLinesV — raylib/src/core/drawing.rsDrawEllipse — raylib/src/core/drawing.rsDrawEllipseV — GAP. Action: fix-now.DrawEllipseLines — raylib/src/core/drawing.rsDrawEllipseLinesV — GAP. Action: fix-now.DrawRing — raylib/src/core/drawing.rsDrawRingLines — raylib/src/core/drawing.rsDrawRectangle — raylib/src/core/drawing.rsDrawRectangleV — raylib/src/core/drawing.rsDrawRectangleRec — raylib/src/core/drawing.rsDrawRectanglePro — raylib/src/core/drawing.rsDrawRectangleGradientV — raylib/src/core/drawing.rsDrawRectangleGradientH — raylib/src/core/drawing.rsDrawRectangleGradientEx — raylib/src/core/drawing.rsDrawRectangleLines — raylib/src/core/drawing.rsDrawRectangleLinesEx — raylib/src/core/drawing.rsDrawRectangleRounded — raylib/src/core/drawing.rsDrawRectangleRoundedLines — raylib/src/core/drawing.rsDrawRectangleRoundedLinesEx — raylib/src/core/drawing.rsDrawTriangle — raylib/src/core/drawing.rsDrawTriangleLines — raylib/src/core/drawing.rsDrawTriangleFan — raylib/src/core/drawing.rsDrawTriangleStrip — raylib/src/core/drawing.rsDrawPoly — raylib/src/core/drawing.rsDrawPolyLines — raylib/src/core/drawing.rsDrawPolyLinesEx — raylib/src/core/drawing.rsDrawSplineLinear — raylib/src/core/drawing.rsDrawSplineBasis — raylib/src/core/drawing.rsDrawSplineCatmullRom — raylib/src/core/drawing.rsDrawSplineBezierQuadratic — raylib/src/core/drawing.rsDrawSplineBezierCubic — raylib/src/core/drawing.rsDrawSplineSegmentLinear — raylib/src/core/drawing.rsDrawSplineSegmentBasis — raylib/src/core/drawing.rsDrawSplineSegmentCatmullRom — raylib/src/core/drawing.rsDrawSplineSegmentBezierQuadratic — raylib/src/core/drawing.rsDrawSplineSegmentBezierCubic — raylib/src/core/drawing.rsGetSplinePointLinear — raylib/src/core/math.rsGetSplinePointBasis — raylib/src/core/math.rsGetSplinePointCatmullRom — raylib/src/core/math.rsGetSplinePointBezierQuad — raylib/src/core/math.rsGetSplinePointBezierCubic — raylib/src/core/math.rsCheckCollisionRecs — inherent method
Rectangle::check_collision_recs at raylib-sys/src/math.rs:107.CheckCollisionCircles — raylib/src/core/collision.rs
(check_collision_circles).CheckCollisionCircleRec — inherent method
Rectangle::check_collision_circle_rec at raylib-sys/src/math.rs:116.CheckCollisionCircleLine — raylib/src/core/collision.rs
(check_collision_circle_line).CheckCollisionPointRec — inherent method
Rectangle::check_collision_point_rec at raylib-sys/src/math.rs:148.CheckCollisionPointCircle — raylib/src/core/collision.rs
(check_collision_point_circle).CheckCollisionPointTriangle — raylib/src/core/collision.rs
(check_collision_point_triangle).CheckCollisionPointLine — raylib/src/core/collision.rs
(check_collision_point_line).CheckCollisionPointPoly — raylib/src/core/collision.rs
(check_collision_point_poly).CheckCollisionLines — raylib/src/core/collision.rs
(check_collision_lines).GetCollisionRec — inherent method Rectangle::get_collision_rec at
raylib-sys/src/math.rs:137 (returns Option<Rectangle> — empty
intersection becomes None).LoadImage — raylib/src/core/texture.rsLoadImageRaw — raylib/src/core/texture.rsLoadImageAnim — raylib/src/core/texture.rsLoadImageAnimFromMemory — raylib/src/core/texture.rsLoadImageFromMemory — raylib/src/core/texture.rsLoadImageFromTexture — raylib/src/core/texture.rsLoadImageFromScreen — raylib/src/core/texture.rsIsImageValid — raylib/src/core/texture.rsUnloadImage — raylib/src/core/texture.rs (Drop)ExportImage — raylib/src/core/texture.rsExportImageToMemory — raylib/src/core/texture.rsExportImageAsCode — raylib/src/core/texture.rsGenImageColor — raylib/src/core/texture.rsGenImageGradientLinear — raylib/src/core/texture.rsGenImageGradientRadial — raylib/src/core/texture.rsGenImageGradientSquare — raylib/src/core/texture.rsGenImageChecked — raylib/src/core/texture.rsGenImageWhiteNoise — raylib/src/core/texture.rsGenImagePerlinNoise — raylib/src/core/texture.rsGenImageCellular — raylib/src/core/texture.rsGenImageText — raylib/src/core/texture.rsImageCopy — raylib/src/core/texture.rsImageFromImage — raylib/src/core/texture.rsImageFromChannel — raylib/src/core/texture.rsImageText — raylib/src/core/texture.rsImageTextEx — raylib/src/core/texture.rsImageFormat — raylib/src/core/texture.rsImageToPOT — raylib/src/core/texture.rsImageCrop — raylib/src/core/texture.rsImageAlphaCrop — raylib/src/core/texture.rsImageAlphaClear — raylib/src/core/texture.rsImageAlphaMask — raylib/src/core/texture.rsImageAlphaPremultiply — raylib/src/core/texture.rsImageBlurGaussian — raylib/src/core/texture.rsImageKernelConvolution — raylib/src/core/texture.rsImageResize — raylib/src/core/texture.rsImageResizeNN — raylib/src/core/texture.rsImageResizeCanvas — raylib/src/core/texture.rsImageMipmaps — raylib/src/core/texture.rsImageDither — raylib/src/core/texture.rsImageFlipVertical — raylib/src/core/texture.rsImageFlipHorizontal — raylib/src/core/texture.rsImageRotate — raylib/src/core/texture.rsImageRotateCW — raylib/src/core/texture.rsImageRotateCCW — raylib/src/core/texture.rsImageColorTint — raylib/src/core/texture.rsImageColorInvert — raylib/src/core/texture.rsImageColorGrayscale — raylib/src/core/texture.rsImageColorContrast — raylib/src/core/texture.rsImageColorBrightness — raylib/src/core/texture.rsImageColorReplace — raylib/src/core/texture.rsLoadImageColors — raylib/src/core/texture.rsLoadImagePalette — raylib/src/core/texture.rsUnloadImageColors — raylib/src/core/texture.rs (Drop)UnloadImagePalette — raylib/src/core/texture.rs (Drop)GetImageAlphaBorder — raylib/src/core/texture.rsGetImageColor — raylib/src/core/texture.rsImageClearBackground — raylib/src/core/texture.rsImageDrawPixel — raylib/src/core/texture.rsImageDrawPixelV — raylib/src/core/texture.rsImageDrawLine — raylib/src/core/texture.rsImageDrawLineV — raylib/src/core/texture.rsImageDrawLineEx — raylib/src/core/texture.rsImageDrawCircle — raylib/src/core/texture.rsImageDrawCircleV — raylib/src/core/texture.rsImageDrawCircleLines — raylib/src/core/texture.rsImageDrawCircleLinesV — raylib/src/core/texture.rsImageDrawRectangle — raylib/src/core/texture.rsImageDrawRectangleV — raylib/src/core/texture.rsImageDrawRectangleRec — raylib/src/core/texture.rsImageDrawRectangleLines — raylib/src/core/texture.rs
(raylib 6.0 dropped the …Ex variant; only the single fn remains)ImageDrawTriangle — raylib/src/core/texture.rsImageDrawTriangleEx — raylib/src/core/texture.rs
(renamed from ImageDrawTriangleGradient in 6.0)ImageDrawTriangleLines — raylib/src/core/texture.rsImageDrawTriangleFan — raylib/src/core/texture.rsImageDrawTriangleStrip — raylib/src/core/texture.rsImageDraw — raylib/src/core/texture.rsImageDrawText — raylib/src/core/texture.rsImageDrawTextEx — raylib/src/core/texture.rsLoadTexture — raylib/src/core/texture.rsLoadTextureFromImage — raylib/src/core/texture.rsLoadTextureCubemap — raylib/src/core/texture.rsLoadRenderTexture — raylib/src/core/texture.rsIsTextureValid — raylib/src/core/texture.rsUnloadTexture — raylib/src/core/texture.rs (Drop)IsRenderTextureValid — raylib/src/core/texture.rsUnloadRenderTexture — raylib/src/core/texture.rs (Drop)UpdateTexture — raylib/src/core/texture.rsUpdateTextureRec — raylib/src/core/texture.rsGenTextureMipmaps — raylib/src/core/texture.rsSetTextureFilter — raylib/src/core/texture.rsSetTextureWrap — raylib/src/core/texture.rsDrawTexture — raylib/src/core/drawing.rsDrawTextureV — raylib/src/core/drawing.rsDrawTextureEx — raylib/src/core/drawing.rsDrawTextureRec — raylib/src/core/drawing.rsDrawTexturePro — raylib/src/core/drawing.rsDrawTextureNPatch — raylib/src/core/drawing.rsColorIsEqual — inherent method Color::is_equal at
raylib-sys/src/color.rs:164.Fade — inherent method Color::fade (deprecated alias for alpha)
at raylib-sys/src/color.rs:153.ColorToInt — inherent method Color::color_to_int at
raylib-sys/src/color.rs:96.ColorNormalize — inherent method Color::color_normalize at
raylib-sys/src/color.rs:102.ColorFromNormalized — assoc fn Color::color_from_normalized at
raylib-sys/src/color.rs:120.ColorToHSV — inherent method Color::color_to_hsv at
raylib-sys/src/color.rs:108.ColorFromHSV — assoc fn Color::color_from_hsv at
raylib-sys/src/color.rs:114.ColorTint — inherent method Color::tint at
raylib-sys/src/color.rs:132.ColorBrightness — inherent method Color::brightness at
raylib-sys/src/color.rs:137.ColorContrast — inherent method Color::contrast at
raylib-sys/src/color.rs:142.ColorAlpha — inherent method Color::alpha at
raylib-sys/src/color.rs:147.ColorAlphaBlend — assoc fn Color::color_alpha_blend at
raylib-sys/src/color.rs:159.ColorLerp — inherent method Color::lerp at
raylib-sys/src/color.rs:170.GetColor — assoc fn Color::get_color at
raylib-sys/src/color.rs:126.GetPixelColor — raylib/src/core/pixel.rs::get_pixel_color.SetPixelColor — raylib/src/core/pixel.rs::set_pixel_color.GetPixelDataSize — raylib/src/core/texture.rs:361,1381
(both as method and free fn).DrawLine3D — raylib/src/core/drawing.rsDrawPoint3D — raylib/src/core/drawing.rsDrawCircle3D — raylib/src/core/drawing.rsDrawTriangle3D — raylib/src/core/drawing.rsDrawTriangleStrip3D — raylib/src/core/drawing.rsDrawCube — raylib/src/core/drawing.rsDrawCubeV — raylib/src/core/drawing.rsDrawCubeWires — raylib/src/core/drawing.rsDrawCubeWiresV — raylib/src/core/drawing.rsDrawSphere — raylib/src/core/drawing.rsDrawSphereEx — raylib/src/core/drawing.rsDrawSphereWires — raylib/src/core/drawing.rsDrawCylinder — raylib/src/core/drawing.rsDrawCylinderEx — raylib/src/core/drawing.rsDrawCylinderWires — raylib/src/core/drawing.rsDrawCylinderWiresEx — raylib/src/core/drawing.rsDrawCapsule — raylib/src/core/drawing.rsDrawCapsuleWires — raylib/src/core/drawing.rsDrawPlane — raylib/src/core/drawing.rsDrawRay — raylib/src/core/drawing.rsDrawGrid — raylib/src/core/drawing.rsLoadModel — raylib/src/core/models.rsLoadModelFromMesh — raylib/src/core/models.rsIsModelValid — raylib/src/core/models.rsUnloadModel — raylib/src/core/models.rs (Drop)GetModelBoundingBox — raylib/src/core/models.rsDrawModel — raylib/src/core/drawing.rsDrawModelEx — raylib/src/core/drawing.rsDrawModelWires — raylib/src/core/drawing.rsDrawModelWiresEx — raylib/src/core/drawing.rsDrawBoundingBox — raylib/src/core/drawing.rsDrawBillboard — raylib/src/core/drawing.rsDrawBillboardRec — raylib/src/core/drawing.rsDrawBillboardPro — raylib/src/core/drawing.rsUploadMesh — raylib/src/core/models.rsUpdateMeshBuffer — raylib/src/core/models.rsUnloadMesh — raylib/src/core/models.rs (Drop)DrawMesh — raylib/src/core/drawing.rsDrawMeshInstanced — raylib/src/core/drawing.rsGetMeshBoundingBox — raylib/src/core/models.rsGenMeshTangents — raylib/src/core/models.rsExportMesh — raylib/src/core/models.rsExportMeshAsCode — raylib/src/core/models.rsGenMeshPoly — raylib/src/core/models.rsGenMeshPlane — raylib/src/core/models.rsGenMeshCube — raylib/src/core/models.rsGenMeshSphere — raylib/src/core/models.rsGenMeshHemiSphere — raylib/src/core/models.rsGenMeshCylinder — raylib/src/core/models.rsGenMeshCone — raylib/src/core/models.rsGenMeshTorus — raylib/src/core/models.rsGenMeshKnot — raylib/src/core/models.rsGenMeshHeightmap — raylib/src/core/models.rsGenMeshCubicmap — raylib/src/core/models.rsLoadMaterials — raylib/src/core/models.rsLoadMaterialDefault — raylib/src/core/models.rsIsMaterialValid — raylib/src/core/models.rsUnloadMaterial — raylib/src/core/models.rs (Drop)SetMaterialTexture — raylib/src/core/models.rsSetModelMeshMaterial — raylib/src/core/models.rsLoadModelAnimations — raylib/src/core/models.rs (returns
ModelAnimations RAII container, redesigned in WS3).UpdateModelAnimation — raylib/src/core/models.rsUpdateModelAnimationEx — raylib/src/core/models.rsUnloadModelAnimations — raylib/src/core/models.rs (Drop on the
ModelAnimations container).IsModelAnimationValid — raylib/src/core/models.rsCheckCollisionSpheres — raylib/src/core/collision.rsCheckCollisionBoxes — raylib/src/core/collision.rsCheckCollisionBoxSphere — raylib/src/core/collision.rsGetRayCollisionSphere — raylib/src/core/collision.rsGetRayCollisionBox — raylib/src/core/collision.rsGetRayCollisionMesh — raylib/src/core/collision.rsGetRayCollisionTriangle — raylib/src/core/collision.rsGetRayCollisionQuad — raylib/src/core/collision.rsInitAudioDevice — raylib/src/core/audio.rsCloseAudioDevice — raylib/src/core/audio.rs (Drop on
AudioHandle).IsAudioDeviceReady — raylib/src/core/audio.rsSetMasterVolume — raylib/src/core/audio.rsGetMasterVolume — raylib/src/core/audio.rsLoadWave — raylib/src/core/audio.rsLoadWaveFromMemory — raylib/src/core/audio.rsIsWaveValid — raylib/src/core/audio.rsLoadSound — raylib/src/core/audio.rsLoadSoundFromWave — raylib/src/core/audio.rsLoadSoundAlias — raylib/src/core/audio.rsIsSoundValid — raylib/src/core/audio.rsUpdateSound — raylib/src/core/audio.rsUnloadWave — raylib/src/core/audio.rs (Drop)UnloadSound — raylib/src/core/audio.rs (Drop)UnloadSoundAlias — raylib/src/core/audio.rs (Drop)ExportWave — raylib/src/core/audio.rsExportWaveAsCode — raylib/src/core/audio.rsPlaySound — raylib/src/core/audio.rsStopSound — raylib/src/core/audio.rsPauseSound — raylib/src/core/audio.rsResumeSound — raylib/src/core/audio.rsIsSoundPlaying — raylib/src/core/audio.rsSetSoundVolume — raylib/src/core/audio.rsSetSoundPitch — raylib/src/core/audio.rsSetSoundPan — raylib/src/core/audio.rsWaveCopy — raylib/src/core/audio.rsWaveCrop — raylib/src/core/audio.rsWaveFormat — raylib/src/core/audio.rsLoadWaveSamples — raylib/src/core/audio.rsUnloadWaveSamples — raylib/src/core/audio.rs (Drop)LoadMusicStream — raylib/src/core/audio.rsLoadMusicStreamFromMemory — raylib/src/core/audio.rsIsMusicValid — raylib/src/core/audio.rsUnloadMusicStream — raylib/src/core/audio.rs (Drop)PlayMusicStream — raylib/src/core/audio.rsIsMusicStreamPlaying — raylib/src/core/audio.rsUpdateMusicStream — raylib/src/core/audio.rsStopMusicStream — raylib/src/core/audio.rsPauseMusicStream — raylib/src/core/audio.rsResumeMusicStream — raylib/src/core/audio.rsSeekMusicStream — raylib/src/core/audio.rsSetMusicVolume — raylib/src/core/audio.rsSetMusicPitch — raylib/src/core/audio.rsSetMusicPan — raylib/src/core/audio.rsGetMusicTimeLength — raylib/src/core/audio.rsGetMusicTimePlayed — raylib/src/core/audio.rsLoadAudioStream — raylib/src/core/audio.rsIsAudioStreamValid — raylib/src/core/audio.rsUnloadAudioStream — raylib/src/core/audio.rs (Drop)UpdateAudioStream — raylib/src/core/audio.rsIsAudioStreamProcessed — raylib/src/core/audio.rsPlayAudioStream — raylib/src/core/audio.rsPauseAudioStream — raylib/src/core/audio.rsResumeAudioStream — raylib/src/core/audio.rsIsAudioStreamPlaying — raylib/src/core/audio.rsStopAudioStream — raylib/src/core/audio.rsSetAudioStreamVolume — raylib/src/core/audio.rsSetAudioStreamPitch — raylib/src/core/audio.rsSetAudioStreamPan — raylib/src/core/audio.rsSetAudioStreamBufferSizeDefault — raylib/src/core/audio.rsSetAudioStreamCallback — raylib/src/core/audio.rsAttachAudioStreamProcessor — wrapped via
attach_audio_stream_processor_with_user_data in
raylib/src/core/callbacks/stream_processor_with_user_data_wrapper.rs:142
(closure-driven stream effects).DetachAudioStreamProcessor — GAP. Action: fix-now.
(The user-data wrapper has clear_context but never calls
DetachAudioStreamProcessor, so a detached closure may still receive
one more invocation. Pair the detach with a real FFI call.)AttachAudioMixedProcessor — wrapped at raylib/src/core/callbacks.rs::attach_audio_mixed_processor.DetachAudioMixedProcessor — wrapped via MixedAudioProcessorCallback::Drop in raylib/src/core/callbacks.rs.Distinct rationales used in §1:
MemRealloc. Rust
uses Box/Vec reallocation; nothing in the safe binding needs to call
MemRealloc from C. Wrap on demand if a user case appears.(All other 🟨 entries elsewhere in the parity-checklist fall in the
out-of-scope rtext / file-system sections, where Rust std covers them
— see memory/skip-std-equivalent-fns.md for the locked rationale and
the [~] markers in parity-checklist.md.)
| FFI symbol | Suggested pattern | Estimated diff |
|---|---|---|
DrawLineDashed | Add fn draw_line_dashed(&mut self, start: impl Into<Vector2>, end: impl Into<Vector2>, dash_size: i32, space_size: i32, color: impl Into<Color>) to the RaylibDraw trait in raylib/src/core/drawing.rs. | ~6 lines |
DrawEllipseV | Free-self Vector2 variant of DrawEllipse in raylib/src/core/drawing.rs. | ~5 lines |
DrawEllipseLinesV | Mirror of DrawEllipseLines taking Vector2 instead of (i32, i32). | ~5 lines |
GetKeyName | Add pub fn get_key_name(&self, key: KeyboardKey) -> Option<String> in raylib/src/core/input.rs. The C fn returns a const char* from a static buffer — copy to a String before returning. Handle NULL/empty by returning None. | ~8 lines |
DetachAudioStreamProcessor | Pair the existing clear_context in stream_processor_with_user_data_wrapper.rs with the actual FFI call. Today only the slot is freed, which leaves the C side still iterating the processor list. | ~3 lines |
Five small gaps, ~27 lines total of new safe-wrapper code.
Note: items the existing parity-checklist.md marks [ ] under
Color/pixel related and Basic shapes collision are not gaps —
they are wrapped as inherent methods on raylib-sys::Color and
raylib-sys::Rectangle. See §5 for the reconciliation delta.
All medium-workstream items from this audit are done; see "Done (this audit)" below.
Total: 0 functions across 0 workstreams.
Done (this audit):
GetPixelColor / SetPixelColor were workstream pixel-pointers; now
wrapped at raylib/src/core/pixel.rs::{get_pixel_color, set_pixel_color}
(+ bytes_per_pixel helper and PixelColorError). See the 6.0.0-rc.1
CHANGELOG entry.ComputeCRC32 / ComputeMD5 / ComputeSHA1 / ComputeSHA256 were
workstream hashes; now wrapped at
raylib/src/core/hashes.rs::{compute_crc32, compute_md5, compute_sha1, compute_sha256}. CRC32 is free-thread; the three crypto hashes take
&RaylibThread to eliminate the static-buffer concurrent-call race.
See the 6.0.0-rc.1 CHANGELOG entry.AttachAudioMixedProcessor / DetachAudioMixedProcessor were
workstream mixed-audio; now wrapped at
raylib/src/core/callbacks.rs::attach_audio_mixed_processor with
MixedAudioProcessorCallback as the RAII guard. The guard borrows
&'a RaylibAudio; Drop detaches before clearing the slot
(lifecycle ordering matches the WS8e per-stream-processor fix).
Tier-2 lifecycle tests under software_renderer. See the
6.0.0-rc.1 CHANGELOG entry.Owner-locked ordering (2026-05-29): these workstreams run
before WS9 showcase, alongside four other promoted items:
pixel-pointers ✅ → hashes ✅ → mixed-audio ✅ → raylib-test
delete-or-fix ← NEXT → UBSAN-through-FFI → rustdoc rewrite (remaining
~200 stubs) → safe abstractions for GuiGetIcons/GuiLoadIcons + PR
#296 → WS9 → final-release. See
docs/superpowers/notes/ws8e-checkpoint-review-feedback.md for the full
post-checkpoint workstream queue.
The existing docs/superpowers/parity-checklist.md is generated by
find_unimplemented.py, which only scans the safe crate for top-level
pub fn wrappers and ffi::FName callsites. It misses inherent
methods defined on raylib-sys types (the auto-scan doesn't descend
into raylib-sys/src/**). Below are the 19 [ ] entries that should
actually be [x] when the next reconciliation commit re-runs the
generator (or hand-corrects):
All marked [ ] in parity-checklist.md lines 489-501. All are wrapped
as inherent methods or assoc fns on raylib-sys::Color in
raylib-sys/src/color.rs:
ColorIsEqual → Color::is_equal (line 164)Fade → Color::fade deprecated alias for alpha (line 153)ColorToInt → Color::color_to_int (line 96)ColorNormalize → Color::color_normalize (line 102)ColorFromNormalized → Color::color_from_normalized (line 120)ColorToHSV → Color::color_to_hsv (line 108)ColorFromHSV → Color::color_from_hsv (line 114)ColorTint → Color::tint (line 132)ColorBrightness → Color::brightness (line 137)ColorContrast → Color::contrast (line 142)ColorAlpha → Color::alpha (line 147)ColorAlphaBlend → Color::color_alpha_blend (line 159)ColorLerp → Color::lerp (line 170)GetColor → Color::get_color (line 126)AttachAudioStreamProcessor is marked [ ] in parity-checklist.md
line 754 but is wrapped at
raylib/src/core/callbacks/stream_processor_with_user_data_wrapper.rs:148
via attach_audio_stream_processor_with_user_data (closure-driven stream
effects). The detach side (DetachAudioStreamProcessor) is a genuine
gap — see §3.
All marked [ ] in parity-checklist.md lines 356-366. All are wrapped
as inherent methods on raylib-sys::Rectangle in
raylib-sys/src/math.rs:
CheckCollisionRecs → Rectangle::check_collision_recs (line 107)CheckCollisionCircleRec →
Rectangle::check_collision_circle_rec (line 116)CheckCollisionPointRec →
Rectangle::check_collision_point_rec (line 148)GetCollisionRec → Rectangle::get_collision_rec (line 137) — returns
Option<Rectangle> (empty-intersection becomes None, slightly
different from C's "empty rect" sentinel — document this in the
parity-checklist if useful).AttachAudioStreamProcessor is wrapped via the user-data
callback wrapper (1 more delta = 19 total):
std): 17 — should
arguably be re-marked [~] in the parity-checklist with the same
"Rust std covers" rationale used elsewhere in the file. Specifically:
FileRename, FileRemove, FileCopy, FileMove,
FileTextReplace, FileTextFindIndex, GetDirectoryFileCount,
GetDirectoryFileCountEx, MeasureTextCodepoints, LoadTextLines,
UnloadTextLines, TextRemoveSpaces, GetTextBetween,
TextReplaceAlloc, TextReplaceBetween, TextReplaceBetweenAlloc,
TextInsertAlloc — but a separate audit should classify each. The
"files" group does NOT have direct Rust equivalents (e.g. atomic
cross-volume FileMove, FileTextReplace) — those are arguably
genuine gaps even though Rust std handles the easy cases. Defer.MemRealloc is the only in-scope
skip).parity-checklist.md
(14 Color + 4 Rectangle).<N> placeholders remain; all counts filled.docs/superpowers/notes/cheatsheet-parity-audit.md,
NOT committed.