Skip to content

Infernux 0.1.3

Choose a tag to compare

@ChenlizheMe ChenlizheMe released this 10 Apr 12:49
· 620 commits to master since this release

Release date: April 2026

Highlights

  • Rendering CPU overhead slashed — A comprehensive optimization pass across the entire C++ render pipeline eliminates ~5 ms/frame of CPU overhead for 14,400-object scenes, bringing frame times down to the ~4 ms range. Optimizations include DrawCall caching, zero-copy shadow passes, shared_ptr elimination, and EndFrameCache fast-path.
  • O(N²) startup stall fixedProcessPendingStarts was quadratic; 10,000 objects caused a ~15 s stall. Now O(N) with integer ID + bulk pre-allocation.
  • Physics batch optimization — Deferred body creation, batch broadphase insertion, and snprintf-based GUID generation cut physics setup costs significantly.
  • Player build 67 MB lighterav/ffmpeg are now excluded from standalone player builds when unused.
  • Large-scale code quality pass — Silent except Exception: pass blocks removed across the Python layer; bootstrap/undo/inspector modules split into focused packages; C++ quick-win quality improvements applied.

Performance

C++ Renderer Pipeline

  • Eliminate shared_ptr copy storm in DrawCall pipeline — all hot-path signatures now take const& or raw pointers.
  • Renderable/draw-call caching with dirty flags — skip full rebuild when scene is stable.
  • EndFrameCache fast-path — avoid redundant end-of-frame copies; const& matrices in loop bodies.
  • Merged single-pass rendering where separate passes were unnecessary.
  • Zero-copy game shadow — shadow draw lists reference existing data instead of copying.
  • Skip stale draw-call writes for objects whose transforms haven't changed.
  • Eliminate redundant per-frame copies; static-object memcmp fast-path.
  • Skip editor culling when only game prepare is needed.
  • Reduce render submission and cleanup overhead.
  • Cache shadow filter + sort results; is_sorted early-out; skip EnsureObjectBuffers for stable scenes.

C++ Scene & Physics

  • ProcessPendingStarts O(N²) → O(N) — eliminates ~15 s stall on 10,000 objects.
  • Integer ID + bulk pre-allocation for creation hot path.
  • Physics batch optimization + deferred body creation.
  • snprintf-based GUID generation replacing string stream.
  • TransformBatchHandle, m_anyWorldMatrixDirty flag, ComputeWorldBounds cache.
  • Batch creation with shared mesh deduplication.

Python Editor

  • i18n, build_settings_panel, inspector_components optimized (complexity scores < 500).
  • Editor performance and Python stability improvements.

Improvements

Build & Packaging

  • Exclude av/ffmpeg from player builds (~67 MB saved).
  • No-JIT mode fixes — csv stdlib import, numba requirement stripping, JIT default off.
  • BuildSettings JIT toggle UI.

Editor

  • Texture picker Assets-only filter with popup height limits.
  • ProjectPanel keyboard shortcuts.
  • Minor editor UI theme/icon/ImGui updates.

Code Quality

  • Silent exception removal — Batch removal of except Exception: pass patterns across the Python codebase, replaced with proper error handling or explicit logging.
  • Module splitbootstrap_inspector, bootstrap_hierarchy, and undo extracted into focused packages.
  • C++ Phase 1 quick-wins — magic number extraction, const-correctness, naming consistency.
  • Phase 2 shared helpers — extracted shared scene and inspector helpers to reduce duplication and coupling.
  • Deduplicated undo py-component commands, inspector UI helpers, and tooltip boilerplate.
  • Extracted bootstrap wiring modules and table-driven undo snapshots.
  • Engine renderer duplicate helper definitions consolidated.

Bug Fixes

  • Fix editor panel bugs, UI prefab canvas tracking, and drag-drop improvements.
  • Fix begin_child border argument and BuildSettings JIT toggle.
  • Fix transform undo, enum iteration, Engine.instance singleton access, and texture search scope.
  • Fix no-JIT mode build — csv stdlib, numba requirement stripping, default JIT off.
  • Fix test file hotfix.

Upgrade Notes

  • No breaking API changes. This release is fully backward-compatible with 0.1.2.
  • JIT default changed: JIT is now off by default in build settings. Toggle it on explicitly in BuildSettings if your project uses @njit.
  • Player builds smaller: If your deployment pipeline relies on av/ffmpeg being bundled, add them back explicitly in your build configuration.

Contributors