new UI system

This commit is contained in:
Jorijn van der Graaf 2026-05-01 23:35:37 +02:00
commit 216972e73a
82 changed files with 4837 additions and 3243 deletions

View file

@ -47,49 +47,50 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
cfg.cFiles.push_back("lib/viewporter");
}
// Renderer: --vulkan opts in (clones Vulkan-Headers + Vulkan-Utility-Libraries
// for headers and links libvulkan); default is the software path.
if (opts.Has("--vulkan")) {
cfg.defines.push_back({"CRAFTER_GRAPHICS_RENDERER_VULKAN", ""});
ExternalDependency& vkHeaders = cfg.externalDependencies.emplace_back();
vkHeaders.name = "Vulkan-Headers";
vkHeaders.source.url = "https://github.com/KhronosGroup/Vulkan-Headers.git";
vkHeaders.builder = ExternalBuilder::None;
vkHeaders.includeDirs = { "include" };
ExternalDependency& vkUtility = cfg.externalDependencies.emplace_back();
vkUtility.name = "Vulkan-Utility-Libraries";
vkUtility.source.url = "https://github.com/KhronosGroup/Vulkan-Utility-Libraries.git";
vkUtility.builder = ExternalBuilder::None;
vkUtility.includeDirs = { "include" };
cfg.linkFlags.push_back(windows ? "-lvulkan-1" : "-lvulkan");
} else {
cfg.defines.push_back({"CRAFTER_GRAPHICS_RENDERER_SOFTWARE", ""});
}
// Vulkan is the only renderer. Software fallback is provided externally
// via the Vulkan loader (e.g. llvmpipe / lavapipe) — no separate code path.
ExternalDependency& vkHeaders = cfg.externalDependencies.emplace_back();
vkHeaders.name = "Vulkan-Headers";
vkHeaders.source.url = "https://github.com/KhronosGroup/Vulkan-Headers.git";
vkHeaders.builder = ExternalBuilder::None;
vkHeaders.includeDirs = { "include" };
ExternalDependency& vkUtility = cfg.externalDependencies.emplace_back();
vkUtility.name = "Vulkan-Utility-Libraries";
vkUtility.source.url = "https://github.com/KhronosGroup/Vulkan-Utility-Libraries.git";
vkUtility.builder = ExternalBuilder::None;
vkUtility.includeDirs = { "include" };
cfg.linkFlags.push_back(windows ? "-lvulkan-1" : "-lvulkan");
if (opts.Has("--timing")) cfg.defines.push_back({"CRAFTER_TIMING", ""});
std::array<fs::path, 24> ifaces = {
std::array<fs::path, 30> ifaces = {
"interfaces/Crafter.Graphics",
"interfaces/Crafter.Graphics-Animation",
"interfaces/Crafter.Graphics-DescriptorHeapVulkan",
"interfaces/Crafter.Graphics-Device",
"interfaces/Crafter.Graphics-Font",
"interfaces/Crafter.Graphics-ForwardDeclarations",
"interfaces/Crafter.Graphics-GridElement",
"interfaces/Crafter.Graphics-ImageVulkan",
"interfaces/Crafter.Graphics-Mesh",
"interfaces/Crafter.Graphics-MouseElement",
"interfaces/Crafter.Graphics-PipelineRTVulkan",
"interfaces/Crafter.Graphics-RenderingElement2D",
"interfaces/Crafter.Graphics-RenderingElement2DBase",
"interfaces/Crafter.Graphics-RenderingElement2DVulkan",
"interfaces/Crafter.Graphics-RenderingElement3D",
"interfaces/Crafter.Graphics-Rendertarget",
"interfaces/Crafter.Graphics-RenderPass",
"interfaces/Crafter.Graphics-RTPass",
"interfaces/Crafter.Graphics-SamplerVulkan",
"interfaces/Crafter.Graphics-ShaderBindingTableVulkan",
"interfaces/Crafter.Graphics-ShaderVulkan",
"interfaces/Crafter.Graphics-Transform2D",
"interfaces/Crafter.Graphics-Types",
"interfaces/Crafter.Graphics-UI",
"interfaces/Crafter.Graphics-UIAtlas",
"interfaces/Crafter.Graphics-UIDrawList",
"interfaces/Crafter.Graphics-UIHit",
"interfaces/Crafter.Graphics-UILayout",
"interfaces/Crafter.Graphics-UILength",
"interfaces/Crafter.Graphics-UIRenderer",
"interfaces/Crafter.Graphics-UIScene",
"interfaces/Crafter.Graphics-UITheme",
"interfaces/Crafter.Graphics-UIWidget",
"interfaces/Crafter.Graphics-UIWidgets",
"interfaces/Crafter.Graphics-VulkanBuffer",
"interfaces/Crafter.Graphics-VulkanTransition",
"interfaces/Crafter.Graphics-Window",
@ -98,13 +99,15 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
"implementations/Crafter.Graphics-Device",
"implementations/Crafter.Graphics-Font",
"implementations/Crafter.Graphics-Mesh",
"implementations/Crafter.Graphics-MouseElement",
"implementations/Crafter.Graphics-Rendertarget",
"implementations/Crafter.Graphics-RenderingElement3D",
"implementations/Crafter.Graphics-Transform2D",
"implementations/Crafter.Graphics-UIAtlas",
"implementations/Crafter.Graphics-UIRenderer",
"implementations/Crafter.Graphics-UIScene",
"implementations/Crafter.Graphics-Window",
};
cfg.GetInterfacesAndImplementations(ifaces, impls);
cfg.shaders.emplace_back(fs::path("shaders/ui.comp.glsl"), std::string("main"), ShaderType::Compute);
return cfg;
}