GroveEngine/tests/visual/test_bgfx_minimal_win.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

92 lines
2.2 KiB
C++

/**
* Minimal bgfx test for Windows - no DLL, just renders a red screen
*/
#include <SDL.h>
#include <SDL_syswm.h>
#include <bgfx/bgfx.h>
#include <bgfx/platform.h>
#include <iostream>
int main(int argc, char* argv[]) {
std::cout << "=== Minimal bgfx test ===\n";
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
std::cerr << "SDL_Init failed: " << SDL_GetError() << "\n";
return 1;
}
SDL_Window* window = SDL_CreateWindow(
"bgfx minimal test",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
800, 600,
SDL_WINDOW_SHOWN
);
if (!window) {
std::cerr << "SDL_CreateWindow failed\n";
SDL_Quit();
return 1;
}
// Get native window handle
SDL_SysWMinfo wmi;
SDL_VERSION(&wmi.version);
SDL_GetWindowWMInfo(window, &wmi);
// Setup bgfx
bgfx::Init init;
init.type = bgfx::RendererType::Direct3D11;
init.resolution.width = 800;
init.resolution.height = 600;
init.resolution.reset = BGFX_RESET_VSYNC;
#ifdef _WIN32
init.platformData.nwh = wmi.info.win.window;
#endif
std::cout << "Initializing bgfx with D3D11...\n";
if (!bgfx::init(init)) {
std::cerr << "bgfx::init failed\n";
SDL_DestroyWindow(window);
SDL_Quit();
return 1;
}
const bgfx::Caps* caps = bgfx::getCaps();
std::cout << "Renderer: " << bgfx::getRendererName(caps->rendererType) << "\n";
// Set bright red clear color
bgfx::setViewClear(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0xFF0000FF, 1.0f, 0);
bgfx::setViewRect(0, 0, 0, 800, 600);
std::cout << "Running for 3 seconds...\n";
Uint32 start = SDL_GetTicks();
bool running = true;
int frames = 0;
while (running && (SDL_GetTicks() - start) < 3000) {
SDL_Event e;
while (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)) {
running = false;
}
}
bgfx::touch(0);
bgfx::frame();
frames++;
}
std::cout << "Rendered " << frames << " frames\n";
bgfx::shutdown();
SDL_DestroyWindow(window);
SDL_Quit();
std::cout << "=== Test complete ===\n";
return 0;
}