GroveEngine/tests/visual/test_bgfx_device_only.cpp
StillHammer 5cef0e25b0 fix: UIModule button interaction + JsonDataNode array children support
- 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>
2026-01-05 18:23:16 +07:00

91 lines
2.2 KiB
C++

/**
* Test using BgfxDevice directly via IRHIDevice::create()
* No ShaderManager, no RenderGraph - just init + frame
*/
#include <SDL.h>
#include <SDL_syswm.h>
#include <iostream>
#include <memory>
#include "RHI/RHIDevice.h"
#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>
using namespace grove::rhi;
int main(int argc, char* argv[]) {
auto logger = spdlog::stdout_color_mt("Main");
spdlog::set_level(spdlog::level::info);
logger->info("=== BgfxDevice Direct Test ===");
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
logger->error("SDL_Init failed: {}", SDL_GetError());
return 1;
}
SDL_Window* window = SDL_CreateWindow(
"BgfxDevice Direct Test",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
800, 600,
SDL_WINDOW_SHOWN
);
if (!window) {
logger->error("SDL_CreateWindow failed");
SDL_Quit();
return 1;
}
SDL_SysWMinfo wmi;
SDL_VERSION(&wmi.version);
SDL_GetWindowWMInfo(window, &wmi);
logger->info("Window handle: {}", (void*)wmi.info.win.window);
// Create BgfxDevice via factory
auto device = IRHIDevice::create();
logger->info("Initializing BgfxDevice...");
if (!device->init(wmi.info.win.window, nullptr, 800, 600)) {
logger->error("BgfxDevice init failed");
SDL_DestroyWindow(window);
SDL_Quit();
return 1;
}
logger->info("BgfxDevice initialized, starting loop...");
bool running = true;
int frameCount = 0;
while (running && frameCount < 60) {
logger->info("Frame {} start", frameCount);
spdlog::default_logger()->flush();
SDL_Event e;
while (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)) {
running = false;
}
}
// Just frame() - exactly like test_bgfx_minimal_win
device->frame();
logger->info("Frame {} complete", frameCount);
frameCount++;
}
logger->info("Rendered {} frames", frameCount);
device->shutdown();
SDL_DestroyWindow(window);
SDL_Quit();
logger->info("=== Test complete ===");
return 0;
}