From 0e6d4525809987ecdb41008fef3da1a7157f6037 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Mon, 15 Dec 2025 11:04:17 -0500 Subject: [PATCH] Working fastgltf build, but had to manually include the headers. --- .gitignore | 2 ++ Makefile | 5 ++++- basicmesh.glb.gz | Bin 0 -> 33597 bytes meson.build | 8 ++++++-- vk_loader.cpp | 19 +++++++++++++++++++ vk_loader.h | 22 ++++++++++++++++++++++ vk_types.h | 1 + wraps/fastgltf.wrap | 9 +++++++++ 8 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 basicmesh.glb.gz create mode 100644 vk_loader.cpp create mode 100644 vk_loader.h create mode 100644 wraps/fastgltf.wrap diff --git a/.gitignore b/.gitignore index ca37570..8e5e5f8 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,5 @@ backup coverage coverage/* .venv +*.glb +imgui.ini diff --git a/Makefile b/Makefile index 99a8005..0e6f65d 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,10 @@ shaders: %.png: %.dot dot -Tpng $< -o $@ -build: +%.glb: %.glb.gz + gunzip $< + +build: basicmesh.glb meson compile -j 10 -C $(ROOT_DIR)/builddir release_build: diff --git a/basicmesh.glb.gz b/basicmesh.glb.gz new file mode 100644 index 0000000000000000000000000000000000000000..5898895bc5261fb1090f4f76ff06dd3dca60f82a GIT binary patch literal 33597 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틳?a#P?DHoT1POjV)#JJ> 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 literal 0 HcmV?d00001 diff --git a/meson.build b/meson.build index 64df191..0346d16 100644 --- a/meson.build +++ b/meson.build @@ -69,7 +69,6 @@ elif build_machine.system() == 'darwin' endif vma = subproject('vulkan-memory-allocator').get_variable('vma_allocator_dep') -# vulkan_headers = subproject('vulkan-headers').get_variable('vulkan_headers_dep') imgui = subproject('imgui', default_options: { @@ -79,7 +78,7 @@ imgui = subproject('imgui', ).get_variable('imgui_dep') sdl2 = subproject('sdl2').get_variable('sdl2_dep') - +fastgltf = subproject('fastgltf').get_variable('fastgltf_dep') glm_opts = cmake.subproject_options() glm_opts.add_cmake_defines({ @@ -121,16 +120,21 @@ sources = [ 'vk_images.cpp', 'vk_descriptors.cpp', 'vk_pipelines.cpp', + 'vk_loader.cpp', 'vk_gui.cpp', 'main.cpp', ] +# have to force this here for...cmake reasons +include_dirs = include_directories('subprojects/fastgltf/include') + tests = [ ] executable('hellovulk', sources, cpp_args: cpp_args, link_args: link_args, + include_directories: include_dirs, win_subsystem: 'windows', override_options: exe_defaults, dependencies: dependencies) diff --git a/vk_loader.cpp b/vk_loader.cpp new file mode 100644 index 0000000..a5249f1 --- /dev/null +++ b/vk_loader.cpp @@ -0,0 +1,19 @@ +#include "vk_loader.h" +#include "vendor/stb_image.h" +#include + +#include "vk_engine.h" +#include "vk_initializers.h" +#include "vk_types.h" +#include + +#include +#include +#include + + +std::optional>> loadGltfMeshes(VulkanEngine* engine, std::filesystem::path filePath) +{ + + return std::nullopt; +} diff --git a/vk_loader.h b/vk_loader.h new file mode 100644 index 0000000..7e553f1 --- /dev/null +++ b/vk_loader.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include +#include + +struct GeoSurface { + uint32_t startIndex; + uint32_t count; +}; + +struct MeshAsset { + std::string name; + + std::vector surfaces; + GPUMeshBuffers meshBuffers; +}; + +class VulkanEngine; + +std::optional>> loadGltfMeshes(VulkanEngine* engine, std::filesystem::path filePath); + diff --git a/vk_types.h b/vk_types.h index 4f93e18..d491e6f 100644 --- a/vk_types.h +++ b/vk_types.h @@ -18,6 +18,7 @@ #include +#define GLM_ENABLE_EXPERIMENTAL 1 #include #include diff --git a/wraps/fastgltf.wrap b/wraps/fastgltf.wrap new file mode 100644 index 0000000..abac338 --- /dev/null +++ b/wraps/fastgltf.wrap @@ -0,0 +1,9 @@ +[wrap-git] +directory=fastgltf +url=https://github.com/spnda/fastgltf.git +revision=v0.9.x +depth=1 +method=cmake + +[provide] +fastgltf = fastgltf_dep