Files
mirage/example/test_thread/main.cpp
daiqingshuang 91dc9a119b feat: Optimize rendering commands and visibility management
- Implemented binary search optimization for rendering commands in HStack and VStack to improve performance when rendering child widgets.
- Enhanced ScrollBox to only tick child widgets that are within the viewport, reducing unnecessary updates.
- Introduced a viewport cache to manage visibility states of widgets, allowing for efficient visibility checks and updates.
- Updated dirty state management in widget states to use a more structured approach with a new dirty_state enum, improving clarity and functionality.
- Added methods to invalidate and manage viewport cache, ensuring that visibility states are accurately maintained during layout changes.
- Marked widgets for re-rendering when their properties change, ensuring visual updates are reflected correctly.
2025-12-08 14:08:13 +08:00

66 lines
2.3 KiB
C++

#include "application.h"
#include "modifier_helper.h"
#include "containers/overlay.h"
#include "containers/scroll_box.h"
#include "image/texture_manager.h"
#include "widgets/imager.h"
#include "widgets/mask.h"
#include "widgets/post_process.h"
using namespace mirage;
int main(int argc, char* argv[]) {
app::application app;
app::application_config config;
config.title = "Test Thread";
config.width = 800;
config.height = 600;
config.enable_multithreading = true;
config.target_fps = 240;
config.enable_validation = true;
config.vsync = true;
if (!app.initialize(config)) {
return -1;
}
// auto texture_id = app.texture_mgr()->load_texture("D:\\G2uY1fJa8AAOucs.jpg").value();
auto texture_id = app.texture_mgr()->load_texture("D:\\screenshot-20251128-165627.png").value();
auto tex_size = app.texture_mgr()->get_texture(texture_id)->size().cast<float>();
auto root_widget = new_widget<scroll_box>()[
new_widget<overlay>()[
new_widget<imager>()->texture(texture_id).source_size(tex_size).scale(scale_mode::contain),
// 圆形遮罩
new_widget<mask>()[
// 模糊效果 (blur)
new_widget<post_process>()->blur(40.0f)
]->circle() | align(alignment::center_left)
],
new_widget<overlay>()[
new_widget<imager>()->texture(texture_id).source_size(tex_size).scale(scale_mode::contain),
new_widget<post_process>()->vignette()
],
new_widget<overlay>()[
new_widget<imager>()->texture(texture_id).source_size(tex_size).scale(scale_mode::contain),
new_widget<post_process>()->chromatic_aberration(10, 1)
],
new_widget<overlay>()[
new_widget<imager>()->texture(texture_id).source_size(tex_size).scale(scale_mode::contain),
new_widget<post_process>()->noise(20.0f, 1.f, true)
],
new_widget<overlay>()[
new_widget<imager>()->texture(texture_id).source_size(tex_size).scale(scale_mode::contain),
new_widget<post_process>()->color_adjust(0.1f, 1.5f, 1.5f, 2.2f)
],
new_widget<overlay>()[
new_widget<imager>()->texture(texture_id).source_size(tex_size).scale(scale_mode::contain),
new_widget<post_process>()->color_tint(color::from_rgba(255, 100, 100, 255), 0.3f, blend_mode::overlay)
]
];
app.set_root_widget(root_widget.ptr());
app.run();
}