Files
mirage/example/test_thread/main.cpp
nanako 8a8ec6e4a8 Refactor render tree executor and custom shader widget renderer for dynamic descriptor layouts
- Removed debug output statements from render_tree_executor.cpp to clean up the code.
- Updated custom_shader_widget_renderer.cpp to prevent placeholder allocation for uniform buffers, ensuring correct descriptor updates.
- Simplified effect rectangle setting in custom_shader_widget_base.cpp by removing debug outputs.
- Adjusted descriptor binding logic in post_process_shader_widget.h for clarity and consistency.
- Introduced a comprehensive design document for dynamic descriptor layout creation, addressing existing limitations and outlining a new architecture for descriptor management.
2025-12-24 22:38:53 +08:00

101 lines
3.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "core/application.h"
#include "core/vulkan_context_provider.h"
#include "core/common/modifier_helper.h"
#include "ui/widgets/containers/overlay.h"
#include "ui/widgets/containers/scroll_box/scroll_box.h"
#include "ui/window/render_window.h"
#include "ui/tooltip/tooltip_types.h"
#include "render/image/texture_manager.h"
#include "render/text/font_manager.h"
#include "ui/widgets/imager.h"
#include "ui/widgets/mask.h"
#include "ui/widgets/text_widget.h"
#include "ui/widgets/text_input/text_input.h"
// 新的后效 widget 系统
#include "ui/widgets/custom_shader/effects/effects.h"
using namespace mirage;
int main(int argc, char* argv[]) {
application app;
// 应用程序配置Vulkan 相关)
application_config config;
config.app_name = "Test Thread";
config.enable_validation = true;
// 主窗口配置
main_window_config window_config;
window_config.title = "Test Thread";
window_config.width = 800;
window_config.height = 600;
window_config.vsync = true;
if (!app.initialize(config, window_config)) {
return -1;
}
// 获取上下文提供者来访问资源管理器
auto* ctx = app.get_context_provider();
uint32_t texture_id;
if (auto t = ctx->get_texture_manager()->load_texture("D:\\G2uY1fJa8AAOucs.jpg"))
texture_id = t.value();
else
texture_id = ctx->get_texture_manager()->load_texture("D:\\screenshot-20251128-165627.png").value();
const auto text_size_i = ctx->get_texture_manager()->get_texture(texture_id)->size();
const auto tex_size = text_size_i.cast<float>();
// 加载字体
const auto font_result = ctx->get_font_manager()->load_font(R"(C:\Windows\Fonts\msyh.ttc)");
if (!font_result.has_value())
throw std::runtime_error("加载字体失败");
const auto font_id = font_result.value();
// 设置 tooltip 默认字体
tooltip_config tooltip_cfg;
tooltip_cfg.default_font_id = font_id;
app.get_main_window()->set_tooltip_config(tooltip_cfg);
const auto root_widget = new_widget<scroll_box>()[
new_widget<text_widget>()->font_id(font_id).text("你好,我们在此相遇").font_size(24).tooltip("测试tooltip"),
new_widget<text_input>()->font_id(font_id).font_size(24),
new_widget<overlay>()[
new_widget<imager>()->texture_id(texture_id).source_size(tex_size).scale(scale_mode::contain),
// 圆形遮罩 + 模糊效果 (使用新的 blur_widget)
// new_widget<mask>()[
new_widget<blur_widget>()->set_radius(40.0f)
// ]->circle() | align(alignment::center_left)
],
new_widget<overlay>()[
new_widget<imager>()->texture_id(texture_id).source_size(tex_size).scale(scale_mode::contain),
// 暗角效果 (使用新的 vignette_widget)
new_widget<vignette_widget>()->set_radius(0.5f).set_softness(0.5f)
],
new_widget<overlay>()[
new_widget<imager>()->texture_id(texture_id).source_size(tex_size).scale(scale_mode::contain),
// 色差效果 (使用新的 chromatic_aberration_widget)
new_widget<chromatic_aberration_widget>()->set_offset(vec2f_t{0.01f, 0.0f})
],
new_widget<overlay>()[
new_widget<imager>()->texture_id(texture_id).source_size(tex_size).scale(scale_mode::contain),
// 噪点效果 (使用新的 noise_widget)
new_widget<noise_widget>()->set_amount(0.2f).set_grain_size(1.0f)
],
new_widget<overlay>()[
new_widget<imager>()->texture_id(texture_id).source_size(tex_size).scale(scale_mode::contain),
// 颜色调整效果 (使用新的 color_adjust_widget)
new_widget<color_adjust_widget>()->set_brightness(0.1f).set_contrast(1.5f).set_saturation(1.5f).set_gamma(2.2f)
],
new_widget<overlay>()[
new_widget<imager>()->texture_id(texture_id).source_size(tex_size).scale(scale_mode::contain),
// 色调效果 (使用新的 color_tint_widget)
new_widget<color_tint_widget>()->set_tint_color(color{1.0f, 0.4f, 0.4f, 0.3f}).set_blend_mode(4) // Overlay 模式
]
];
// 通过主窗口设置根控件
app.get_main_window()->set_root_widget(root_widget.ptr());
app.run();
}