COMPREHENSIVE DOCUMENTATION CLEANUP:
DEVELOPER_GUIDE.md:
- Add prominent warning at top (development-ready, NOT production-ready)
- New 'Current Limitations' section with detailed warnings:
* Non-deterministic execution
* Single-threaded only
* Not suitable for networked games
* No error recovery, limited optimizations
- Change all 'Production Ready' → 'Development Ready' status tags
- BgfxRenderer: Phase 8 complete | Experimental
- UIModule: Phase 7 complete | Experimental
- InputModule: Phase 1-3 complete | Gamepad Phase 2 TODO
- Add 'What GroveEngine IS Good For' section (prototyping, learning, AI-assisted dev)
- Add Production Roadmap section
USER_GUIDE.md:
- Add experimental/development warning with link to README
Module READMEs:
- BgfxRenderer/README.md: Add development stage warning
- InputModule/README.md: Clarify Phase 1-3 complete, gamepad TODO
- UIModule/README.md: Add experimental warning, clarify thread-safe design is for future
All documentation now consistently reflects that GroveEngine is:
✅ Excellent for rapid prototyping and experimentation
⚠️ NOT ready for production games
⚠️ Non-deterministic execution
⚠️ Single-threaded only (for now)
Total changes: 5 files, 62 insertions, 13 deletions
UI Widget Enhancements:
- Add texture support to UICheckbox (box and checkmark textures)
- Add texture support to UISlider (track and handle textures)
- Add texture support to UIPanel (background texture)
- Add texture support to UIProgressBar (background and fill textures)
- Add texture support to UIScrollPanel (background and scrollbar textures)
- All widgets now support textureId with tint color for flexible styling
BgfxRenderer:
- Add texture loading helpers for widget texturing
- Update RHI device for texture management
- Add ResourceCache texture ID support
Maintenance:
- Add tmpclaude-* to .gitignore (temporary Claude Code directories)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed three critical bugs preventing UITextInput from working:
1. **hitTest() missing textinput handler**: The hit test function only checked
for button, slider, and checkbox types. Clicks on text input fields were
never detected.
FIX: Added textinput case to hitTest() in UIContext.cpp
2. **dispatchMouseButton() missing textinput handler**: Even if hit test worked,
mouse button events were not dispatched to text input widgets.
FIX: Added textinput case to dispatchMouseButton() in UIContext.cpp
3. **Keyboard event collision**: SDL_KEYDOWN was publishing events for printable
characters with char=0, which were rejected by UITextInput. Printable chars
should only come from SDL_TEXTINPUT.
FIX: Only publish SDL_KEYDOWN for special keys (Backspace, Delete, arrows, etc.)
Printable characters come exclusively from SDL_TEXTINPUT events.
Changes:
- UIContext.cpp: Added textinput handlers to hitTest() and dispatchMouseButton()
- UITextInput.cpp: Added debug logging for gainFocus() and render()
- UIModule.cpp: Added debug logging for widget clicks
- test_ui_showcase.cpp: Fixed keyboard event handling (KEYDOWN vs TEXTINPUT)
Tested: Text input now gains focus (border turns blue), accepts keyboard input,
and displays typed text correctly.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed two critical bugs preventing multiple textured sprites from rendering correctly:
1. **setState consumed by submit**: Render state was set once at the beginning,
but bgfx consumes state at each submit(). Batches 2+ had no state → invisible.
FIX: Call setState() before EACH batch, not once globally.
2. **Buffer overwrite race condition**: updateBuffer() is immediate but submit()
is deferred. When batch 2 called updateBuffer(), it overwrote batch 1's data
BEFORE bgfx executed the draw calls. All batches used the last batch's data
→ all sprites rendered at the same position (superimposed).
FIX: Use transient buffers (one per batch, frame-local) instead of reusing
the same dynamic buffer. Each batch gets its own isolated memory.
Changes:
- SpritePass: setState before each batch + transient buffer allocation per batch
- UIRenderer: Retained mode rendering (render:sprite:add/update/remove)
- test_ui_showcase: Added 3 textured buttons demo section
- test_3buttons_minimal: Minimal test case for multi-texture debugging
Tested: 3 textured buttons now render at correct positions with correct textures.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Fix JsonDataNode::getChildReadOnly() to handle JSON array access by numeric index
- Fix test_ui_showcase to use JSON array for children (matching test_single_button pattern)
- Add visual test files: test_single_button, test_ui_showcase, test_sprite_debug
- Clean up debug logging from SpritePass, SceneCollector, UIButton, BgfxDevice
The root cause was that UITree couldn't access array children in JSON layouts.
UIButton hover/click now works correctly in both test files.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Add BGFX_CONFIG_MULTITHREADED=0 to fix TLS crash when bgfx runs from DLL
- Add -include stdint.h for MinGW GCC 15+ compatibility with bgfx third-party code
- Guard SDL2-dependent visual tests with if(SDL2_FOUND)
- Clean up debug logging in BgfxDevice::frame() and BgfxRendererModule::process()
- Re-enable all modules in test_full_stack_interactive.cpp
- Add grove::fs namespace for cross-platform filesystem operations
- Add InputModule C export for feedEvent across DLL boundary
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>