- 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.
101 lines
4.0 KiB
C++
101 lines
4.0 KiB
C++
#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();
|
||
}
|