Files
mirage/example/test_thread/main.cpp
daiqingshuang 5a8d62f841 Refactor Push Constants and Add Dual Stage Support
- Removed legacy push constant structures and functions for better clarity and maintainability.
- Introduced new `text_push_constants_t` structure for text rendering with optimized layout.
- Implemented dual stage push constant analysis to support separate layouts for vertex and fragment shaders.
- Added functions to generate push constant structures and fill functions based on shader reflection.
- Enhanced static checks for push constant layouts to ensure compatibility and correctness.
- Updated templates to accommodate new dual stage push constant generation.
- Added support detection for procedural vertex shaders based on push constant layout.
2025-12-25 21:04:39 +08:00

101 lines
4.0 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/text_widget.h"
#include "ui/widgets/text_input/text_input.h"
// 新的后效 widget 系统
#include "ui/widgets/effects/effects.h"
#include "ui/widgets/custom_shader/basic_mask_widget.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<basic_mask_widget>()[
new_widget<blur_widget>()->set_radius(40.0f)
// ] | 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();
}