Files
mirage/example/test_thread/main.cpp
nanako 023f8099f0 Refactor shader widget system and add new post-processing effects
- Removed the existing procedural_shader_widget.h file and re-added it with minor adjustments.
- Introduced new blur_widget.h for Gaussian blur effects with customizable parameters.
- Added chromatic_aberration_widget.h to implement chromatic aberration effects.
- Created color_adjust_widget.h for color adjustments including brightness, contrast, saturation, and gamma.
- Implemented color_tint_widget.h for tint mapping effects with various blending modes.
- Added noise_widget.h for film grain noise effects, supporting static and animated modes.
- Introduced vignette_widget.h for vignette effects with adjustable radius, softness, and tint color.
- Created effects.h to consolidate all new effect widgets for easier inclusion.
2025-12-25 03:43:38 +08:00

102 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/mask.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();
}