From 5845642965a1eebaec3a1d1126445ecb459688b8 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Wed, 8 Jan 2025 22:26:07 -0500 Subject: first-pass replace cmake with make --- .gitignore | 2 +- .gitmodules | 12 ++ CMakeLists.txt | 251 ------------------------------------------ Makefile | 267 +++++++++++++++++++++++++++++++++++++++++++++ assets/shaders/vert.vert | 31 ------ assets/shaders/vertex.vert | 31 ++++++ config.def.h | 0 config.mk | 38 +++++++ dead.CMakeLists.txt | 251 ++++++++++++++++++++++++++++++++++++++++++ editor/editor.cpp | 2 +- src/asset-manager.cpp | 2 +- src/player-input.hpp | 4 +- src/window.cpp | 66 +++++------ sub/bullet3 | 1 + sub/cgltf | 1 + sub/imgui | 1 + sub/stb | 1 + 17 files changed, 642 insertions(+), 319 deletions(-) create mode 100644 .gitmodules delete mode 100644 CMakeLists.txt create mode 100644 Makefile delete mode 100644 assets/shaders/vert.vert create mode 100644 assets/shaders/vertex.vert create mode 100644 config.def.h create mode 100644 config.mk create mode 100644 dead.CMakeLists.txt create mode 160000 sub/bullet3 create mode 160000 sub/cgltf create mode 160000 sub/imgui create mode 160000 sub/stb diff --git a/.gitignore b/.gitignore index e65ceeb..fa1b4ec 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ #compiled shaders: *.spv - +config.h diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..73a00e6 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,12 @@ +[submodule "sub/imgui"] + path = sub/imgui + url = https://github.com/ocornut/imgui.git +[submodule "sub/stb"] + path = sub/stb + url = https://github.com/nothings/stb.git +[submodule "sub/cgltf"] + path = sub/cgltf + url = https://github.com/jkuhlmann/cgltf.git +[submodule "sub/bullet3"] + path = sub/bullet3 + url = https://github.com/bulletphysics/bullet3.git diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index ec40e9f..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,251 +0,0 @@ - -cmake_minimum_required(VERSION 3.27) - -cmake_policy(SET CMP0135 NEW) - -project(pke VERSION 0.0) -set(PKE_VERSION ${PROJECT_VERSION}) - -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED True) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -pthread") - -set(PKE_SOURCE_FILES - src/vendor/pk.h - src/vendor/pkh_include.cpp - src/arg-handler.hpp - src/arg-handler.cpp - src/array.hpp - src/bucketed-array.hpp - src/camera.hpp - src/camera.cpp - src/components.hpp - src/ecs.hpp - src/ecs.cpp - src/entities.hpp - src/entities.cpp - src/event.hpp - src/event.cpp - src/game.hpp - src/game.cpp - src/game-settings.hpp - src/game-settings.cpp - src/game-type-defs.hpp - src/helpers.hpp - src/helpers.cpp - src/level-types.hpp - src/level-types.cpp - src/level.hpp - src/level.cpp - src/math-helpers.hpp - src/math-helpers.cpp - src/dynamic-array.hpp - src/dynamic-array.cpp - src/asset-manager.hpp - src/asset-manager.cpp - src/physics.hpp - src/physics.cpp - src/player-input.hpp - src/player-input.cpp - src/plugins.hpp - src/plugins.cpp - src/plugin-types.hpp - src/project.hpp - src/project.cpp - src/project-settings.hpp - src/project-settings.cpp - src/static/cube.hpp - src/static/cube.cpp - src/static/missing-texture.hpp - src/thread_pool.hpp - src/thread_pool.cpp - src/vendor/cgltf-include.hpp - src/vendor/cgltf-include.cpp - src/vendor/glm_include.hpp - src/vendor/stb_image_include.hpp - src/vendor/stb_image_include.cpp - src/vendor/tinyfiledialogs/tinyfiledialogs.h - src/vendor/tinyfiledialogs/tinyfiledialogs.c - src/window.hpp - src/window.cpp - src/window-types.hpp -) - -include(FetchContent) -FetchContent_Declare( - imguidocked - URL https://github.com/ocornut/imgui/archive/762ec445e63a95c1545b18b28d528f8ce38a9afd.zip -) - -FetchContent_GetProperties(imguidocked) -if(NOT imguidocked_POPULATED) - FetchContent_Populate(imguidocked) -endif() - -set(ImGuiDockedFiles - ${imguidocked_SOURCE_DIR}/imconfig.h - ${imguidocked_SOURCE_DIR}/imgui.cpp - ${imguidocked_SOURCE_DIR}/imgui.h - ${imguidocked_SOURCE_DIR}/imgui_demo.cpp - ${imguidocked_SOURCE_DIR}/imgui_draw.cpp - ${imguidocked_SOURCE_DIR}/imgui_internal.h - ${imguidocked_SOURCE_DIR}/imgui_tables.cpp - ${imguidocked_SOURCE_DIR}/imgui_widgets.cpp - ${imguidocked_SOURCE_DIR}/imstb_rectpack.h - ${imguidocked_SOURCE_DIR}/imstb_textedit.h - ${imguidocked_SOURCE_DIR}/imstb_truetype.h - ${imguidocked_SOURCE_DIR}/backends/imgui_impl_glfw.cpp - ${imguidocked_SOURCE_DIR}/backends/imgui_impl_glfw.h - ${imguidocked_SOURCE_DIR}/backends/imgui_impl_vulkan.cpp - ${imguidocked_SOURCE_DIR}/backends/imgui_impl_vulkan.h - ${imguidocked_SOURCE_DIR}/misc/cpp/imgui_stdlib.cpp - ${imguidocked_SOURCE_DIR}/misc/cpp/imgui_stdlib.h -) -add_library(imguidocked ${ImGuiDockedFiles}) -target_include_directories(imguidocked PUBLIC ${imguidocked_SOURCE_DIR}) -install( - TARGETS imguidocked - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib -) - -find_package(Vulkan REQUIRED) -if (Vulkan_FOUND) - message(STATUS "Vulkan found: " ${Vulkan_INCLUDE_DIR}) -endif (Vulkan_FOUND) - -add_library(pke - ${PKE_SOURCE_FILES} -) - -if (Vulkan_FOUND) - target_link_libraries(pke PUBLIC ${Vulkan_LIBRARIES}) - target_include_directories(pke PUBLIC ${Vulkan_INCLUDE_DIR}) -endif (Vulkan_FOUND) - -set(SHADER_OUTPUT_DIR ${PROJECT_BINARY_DIR}/assets/shaders) -set(SHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/assets/shaders) -file(MAKE_DIRECTORY ${SHADER_OUTPUT_DIR}) -set(SHADERS - ${SHADER_DIR}/present.vert - ${SHADER_DIR}/present.frag - ${SHADER_DIR}/vert.vert - ${SHADER_DIR}/texture.frag -) - -foreach(SHADER IN LISTS SHADERS) - get_filename_component(FILENAME ${SHADER} NAME) - message(STATUS "Before Shader Compile: ${FILENAME}") - add_custom_command(OUTPUT ${SHADER_OUTPUT_DIR}/${FILENAME}.spv - COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${SHADER} -o ${SHADER_OUTPUT_DIR}/${FILENAME}.spv - DEPENDS ${SHADER} - COMMENT "Compiling ${FILENAME}") - list(APPEND SPV_SHADERS ${SHADER_OUTPUT_DIR}/${FILENAME}.spv) -endforeach() - -add_custom_target(shaders ALL DEPENDS ${SPV_SHADERS}) - -find_package(PkgConfig REQUIRED) -pkg_search_module(GLFW REQUIRED glfw3) -if (GLFW_FOUND) - message(STATUS "GLFW found: " ${GLFW_INCLUDE_DIR}) - target_link_libraries(pke PUBLIC ${GLFW_LIBRARIES}) - target_include_directories(pke PUBLIC ${GLFW_INCLUDE_DIR}) -endif (GLFW_FOUND) - -find_package(glm REQUIRED) -if (glm_FOUND) - message(STATUS "glm found: " ${glm_INCLUDE_DIR}) - target_link_libraries(pke PUBLIC ${glm_LIBRARIES}) - target_include_directories(pke PUBLIC ${glm_INCLUDE_DIR}) -endif (glm_FOUND) - -FetchContent_Declare(stb URL https://github.com/nothings/stb/archive/5736b15f7ea0ffb08dd38af21067c314d6a3aae9.zip) -FetchContent_MakeAvailable(stb) -target_include_directories(pke PUBLIC "${PROJECT_BINARY_DIR}/_deps/stb-src") - -FetchContent_Declare(cgltf URL https://github.com/jkuhlmann/cgltf/archive/271614ce5fa8bed6daf3bc824d12a3a652ebdb15.zip) -FetchContent_MakeAvailable(cgltf) -target_include_directories(pke PUBLIC "${PROJECT_BINARY_DIR}/_deps/cgltf-src") - -FetchContent_Declare(bullet - GIT_REPOSITORY https://github.com/bulletphysics/bullet3.git - GIT_TAG 3.25 - OVERRIDE_FIND_PACKAGE -) -FetchContent_GetProperties(bullet) -if(NOT bullet_POPULATED) - set(BUILD_BULLET2_DEMOS 0 CACHE STRING "" FORCE) - set(BUILD_CPU_DEMOS 0 CACHE STRING "" FORCE) - set(BUILD_UNIT_TESTS 0 CACHE STRING "" FORCE) - set(BUILD_OPENGL3_DEMOS 0 CACHE STRING "" FORCE) - set(BUILD_EXTRAS 0 CACHE STRING "" FORCE) - set(INSTALL_EXTRA_LIBS 0 CACHE STRING "" FORCE) - set(INSTALL_LIBS 1 CACHE STRING "" FORCE) - set(INSTALL_CMAKE_FILES 0 CACHE STRING "" FORCE) - set(POSITION_INDEPENDENT_CODE O CACHE BOOL "" FORCE) - FetchContent_Populate(bullet) - add_subdirectory(${bullet_SOURCE_DIR} ${bullet_BINARY_DIR}) - target_include_directories(pke PUBLIC BEFORE ${bullet_SOURCE_DIR}/src) - target_link_libraries(pke PUBLIC BulletDynamics BulletCollision LinearMath Bullet3Common) - message(STATUS "Bullet vars: " ${bullet_SOURCE_DIR} " - " ${bullet_BINARY_DIR}) -endif() -find_package(Bullet REQUIRED - PATHS ${bullet_BINARY_DIR} -) - -target_include_directories(pke PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src") - -target_link_libraries(pke PUBLIC imguidocked) - -add_dependencies(pke shaders) - -# install libs -set(LIB_DESTINATION "lib") -set(INCLUDE_INSTALL_DIR "include/pke") -set(PKGCONFIG_INSTALL_PREFIX "lib/pkgconfig") -IF(NOT MSVC) - configure_file("src/cmake/pke.pc.cmake" ${CMAKE_CURRENT_BINARY_DIR}/pke.pc @ONLY) - install( - FILES - ${CMAKE_CURRENT_BINARY_DIR}/pke.pc - DESTINATION - ${PKGCONFIG_INSTALL_PREFIX} - ) -ENDIF() -install( - DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/ - DESTINATION ${INCLUDE_INSTALL_DIR} - FILES_MATCHING - PATTERN "*.h" - PATTERN "*.hpp" - PATTERN "cmake" EXCLUDE -) -install( - TARGETS pke - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib -) - -# install cmake files -set (PKE_CONFIG_CMAKE_PATH lib/cmake/pke ) -# list (APPEND PKE_DEFINITIONS "SOME_VAL") -list(APPEND PKE_DEFINITIONS "") -list(APPEND PKE_LIBRARIES pke) -set(PKE_USE_FILE src/cmake/Usepke.cmake) -configure_file(src/cmake/pkeConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/pkeConfig.cmake - @ONLY ESCAPE_QUOTES -) -install(FILES - src/cmake/Usepke.cmake - ${CMAKE_CURRENT_BINARY_DIR}/pkeConfig.cmake - DESTINATION ${PKE_CONFIG_CMAKE_PATH} -) - -add_subdirectory(editor) -add_subdirectory(runtime) -add_subdirectory(test) -add_subdirectory(example) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..cfef1ea --- /dev/null +++ b/Makefile @@ -0,0 +1,267 @@ +# pikul_two + +PROJ=pikul_two + +include config.mk + +#echo $@ : $(@F) : $< : $^ +define cc-bin-command + $(CC) -std=c2x -c -o $@ -DNDEBUG -O0 $(CFLAGS) $(INCS) $< +endef +define cc-dbg-command + $(CC) -std=c2x -c -o $@ -DDEBUG -g -O0 $(CFLAGS) $(INCS) $< +endef +define cxx-bin-command + $(CXX) -std=c++23 -c -o $@ -DNDEBUG -O0 $(CXXFLAGS) $(INCS) $< +endef +define cxx-dbg-command + $(CXX) -std=c++23 -c -o $@ -DDEBUG -g -O0 $(CXXFLAGS) $(INCS) $< +endef + +FLG_PKE = -Isub/imgui -Isub/stb -Isub/cgltf -Isub/bullet3/src +FLG_EDT = $(FLG_PKE) -Isrc + +DIR_OBJ=obj +DIR_BIN=bin +DIR_DBG=dbg +DIR_SCR=scratch + +SRC = \ + src/vendor/pkh_include.cpp \ + src/arg-handler.cpp \ + src/camera.cpp \ + src/ecs.cpp \ + src/entities.cpp \ + src/event.cpp \ + src/game.cpp \ + src/game-settings.cpp \ + src/helpers.cpp \ + src/level-types.cpp \ + src/level.cpp \ + src/math-helpers.cpp \ + src/dynamic-array.cpp \ + src/asset-manager.cpp \ + src/physics.cpp \ + src/player-input.cpp \ + src/plugins.cpp \ + src/project.cpp \ + src/project-settings.cpp \ + src/static/cube.cpp \ + src/thread_pool.cpp \ + src/vendor/cgltf-include.cpp \ + src/vendor/stb_image_include.cpp \ + src/vendor/tinyfiledialogs/tinyfiledialogs.c \ + src/window.cpp \ + +DST_SHADERS = \ + $(DIR_OBJ)/vertex.vert.spv \ + $(DIR_OBJ)/present.vert.spv \ + $(DIR_OBJ)/texture.frag.spv \ + $(DIR_OBJ)/present.frag.spv \ + +# Bullet3Collision/libBullet3Collision.a \ + Bullet3Dynamics/libBullet3Dynamics.a \ + Bullet3Geometry/libBullet3Geometry.a \ + Bullet3OpenCL/libBullet3OpenCL_clew.a \ + Bullet3Serialize/Bullet2FileLoader/libBullet2FileLoader.a \ + BulletInverseDynamics/libBulletInverseDynamics.a \ + BulletSoftBody/libBulletSoftBody.a \ + +# DST_BULLET = \ + BulletDynamics/libBulletDynamics.so.3.25 \ + BulletCollision/libBulletCollision.so.3.25 \ + LinearMath/libLinearMath.so.3.25 \ + Bullet3Common/libBullet3Common.so.3.25 \ + +# TMP_BULLET = $(notdir $(DST_BULLET)) +# DST_BULLET_BIN = $(TMP_BULLET:%.so.3.25=$(DIR_BIN)/%.so.3.25) +# DST_BULLET_DBG = $(TMP_BULLET:%.so.3.25=$(DIR_DBG)/%.so.3.25) + +DST_BULLET = \ + BulletDynamics/libBulletDynamics.a \ + BulletCollision/libBulletCollision.a \ + LinearMath/libLinearMath.a \ + Bullet3Common/libBullet3Common.a \ + +DST_BULLET_BIN = $(TMP_BULLET:%.a=$(DIR_BIN)/src/bullet3/%.a) +DST_BULLET_DBG = $(TMP_BULLET:%.a=$(DIR_DBG)/src/bullet3/%.a) + +SRC_C = $(filter %.c,$(SRC)) +SRC_CXX = $(filter %.cpp,$(SRC)) +OBJ = $(SRC_C:%.c=%.o) +SOBJ = $(SRC_C:%.c=%.so) +CXXOBJ = $(SRC_CXX:%.cpp=%.o) +CXXSOBJ = $(SRC_CXX:%.cpp=%.so) +TMP_OUT_OBJ = $(notdir $(OBJ)) +TMP_OUT_SOBJ = $(notdir $(SOBJ)) +TMP_OUT_CXXOBJ = $(notdir $(CXXOBJ)) +TMP_OUT_CXXSOBJ = $(notdir $(CXXSOBJ)) +OUT_OBJ = $(TMP_OUT_OBJ:%.o=$(DIR_OBJ)/%.o) +OUT_SOBJ = $(TMP_OUT_SOBJ:%.so=$(DIR_OBJ)/%.so) +OUT_CXXOBJ = $(TMP_OUT_CXXOBJ:%.o=$(DIR_OBJ)/%.o) +OUT_CXXSOBJ = $(TMP_OUT_CXXSOBJ:%.so=$(DIR_OBJ)/%.so) + +.PHONY: prepare +prepare: + mkdir -p $(DIR_BIN) $(DIR_DBG) $(DIR_OBJ) $(DIR_DBG)/bullet3 $(DIR_BIN)/bullet3 + mkdir -p $(DIR_BIN)/bullet3 $(DIR_BIN)/assets/shaders + mkdir -p $(DIR_DBG)/bullet3 $(DIR_DBG)/assets/shaders + +.PHONY: options +options: prepare .WAIT + @echo "$(PROJ)" build options: + @echo "CFLAGS = $(CFLAGS)" + @echo "CXXFLAGS = $(CXXFLAGS)" + @echo "LDFLAGS = $(LDFLAGS)" + @echo "CC = $(CC)" + @echo "CXX = $(CXX)" + +config.h: + cp config.def.h $@ + +%.h: ; + +$(SRC_C): config.h config.mk +$(SRC_CXX): config.h config.mk + +$(DIR_OBJ)/%.o: sub/imgui/%.cpp + $(cxx-bin-command) -Isub/imgui +$(DIR_OBJ)/%.so: sub/imgui/%.cpp + $(cxx-dbg-command) -Isub/imgui +$(DIR_OBJ)/%.o: sub/imgui/backends/%.cpp + $(cxx-bin-command) -Isub/imgui +$(DIR_OBJ)/%.so: sub/imgui/backends/%.cpp + $(cxx-dbg-command) -Isub/imgui +$(DIR_OBJ)/%.o: sub/imgui/misc/cpp/%.cpp + $(cxx-bin-command) -Isub/imgui +$(DIR_OBJ)/%.so: sub/imgui/misc/cpp/%.cpp + $(cxx-dbg-command) -Isub/imgui + +$(DIR_OBJ)/%.vert.spv: assets/shaders/%.vert + $(GLSLC) $^ -o $@ + cp $@ $(DIR_BIN)/assets/shaders + cp $@ $(DIR_DBG)/assets/shaders +$(DIR_OBJ)/%.frag.spv: assets/shaders/%.frag + $(GLSLC) $^ -o $@ + cp $@ $(DIR_BIN)/assets/shaders + cp $@ $(DIR_DBG)/assets/shaders + +$(DIR_OBJ)/%.o : src/%.c + $(cc-bin-command) $(FLG_PKE) +$(DIR_OBJ)/%.so : src/%.c + $(cc-dbg-command) $(FLG_PKE) +$(DIR_OBJ)/%.o : src/vendor/tinyfiledialogs/%.c + $(cc-bin-command) $(FLG_PKE) +$(DIR_OBJ)/%.so : src/vendor/tinyfiledialogs/%.c + $(cc-dbg-command) $(FLG_PKE) + +$(DIR_OBJ)/%.o : src/%.cpp + $(cxx-bin-command) $(FLG_PKE) +$(DIR_OBJ)/%.so : src/%.cpp + $(cxx-dbg-command) $(FLG_PKE) +$(DIR_OBJ)/%.o : src/static/%.cpp + $(cxx-bin-command) $(FLG_PKE) +$(DIR_OBJ)/%.so : src/static/%.cpp + $(cxx-dbg-command) $(FLG_PKE) +$(DIR_OBJ)/%.o : src/vendor/%.cpp + $(cxx-bin-command) $(FLG_PKE) +$(DIR_OBJ)/%.so : src/vendor/%.cpp + $(cxx-dbg-command) $(FLG_PKE) +$(DIR_OBJ)/%.o : editor/%.cpp + $(cxx-bin-command) $(FLG_EDT) +$(DIR_OBJ)/%.so : editor/%.cpp + $(cxx-dbg-command) $(FLG_EDT) + +$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui.o +$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_demo.o +$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_draw.o +$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_tables.o +$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_widgets.o +$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_impl_glfw.o +$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_impl_vulkan.o +$(DIR_BIN)/libImgui.a: $(DIR_OBJ)/imgui_stdlib.o + ar rc $@ $^ + ranlib $@ + +$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui.so +$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_demo.so +$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_draw.so +$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_tables.so +$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_widgets.so +$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_impl_glfw.so +$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_impl_vulkan.so +$(DIR_DBG)/libImgui.a: $(DIR_OBJ)/imgui_stdlib.so + ar rc $@ $^ + ranlib $@ + +$(DIR_BIN)/libBullet3.a: + $(CMAKE) \ + -DCMAKE_C_FLAGS:STRING="" \ + -DCMAKE_CXX_FLAGS:STRING="" \ + -DCMAKE_BUILD_TYPE:STRING=Release \ + -DBUILD_BULLET2_DEMOS:BOOL=0 \ + -DBUILD_CPU_DEMOS:BOOL=0 \ + -DBUILD_UNIT_TESTS:BOOL=0 \ + -DBUILD_OPENGL3_DEMOS:BOOL=0 \ + -DBUILD_EXTRAS:BOOL=0 \ + -DINSTALL_EXTRA_LIBS:BOOL=0 \ + -DINSTALL_LIBS:BOOL=1 \ + -DINSTALL_CMAKE_FILES:BOOL=0 \ + -DPOSITION_INDEPENDENT_CODE:BOOL=0 \ + -Hsub/bullet3 -B$(DIR_BIN)/bullet3 -G "Unix Makefiles" + $(CMAKE) --build $(DIR_BIN)/bullet3 --target BulletDynamics BulletCollision LinearMath Bullet3Common + ar rc $@ $(DST_BULLET_BIN) + # touch $@ + + +# -LAH to show all cmake variables + +# +# ar rc $@ sub/bullet3/build3/gmake/obj/x64/Debug/Bullet3Collision/*.o +# ar r $@ sub/bullet3/build3/gmake/obj/x64/Debug/Bullet3Common/*.o +# ar r $@ sub/bullet3/build3/gmake/obj/x64/Debug/BulletCollision/*.o +# ar r $@ sub/bullet3/build3/gmake/obj/x64/Debug/BulletDynamics/*.o +# ar r $@ sub/bullet3/build3/gmake/obj/x64/Debug/LinearMath/*.o +$(DIR_DBG)/libBullet3.a: + (cd sub/bullet3/build3 && ./premake4_linux64 gmake) + ${MAKE} no-demos=1 no-extras=1 no-test=1 config=debug64 -j$$((`nproc`-1)) -C sub/bullet3/build3/gmake \ + BulletCollision Bullet3Collision BulletDynamics LinearMath Bullet3Common + ar r $@ sub/bullet3/build3/gmake/obj/x64/Debug/*/*.o + ranlib $@ + +$(DIR_BIN)/libpke.a: $(DST_SHADERS) +$(DIR_BIN)/libpke.a: $(OUT_OBJ) $(OUT_CXXOBJ) +$(DIR_BIN)/libpke.a: + ar rc $@ $(filter %.o,$^) + ranlib $@ + +$(DIR_DBG)/libpke.a: $(DST_SHADERS) +$(DIR_DBG)/libpke.a: $(OUT_SOBJ) $(OUT_CXXSOBJ) +$(DIR_DBG)/libpke.a: + ar rc $@ $(filter %.so,$^) + ranlib $@ + +# $(DST_BULLET_BIN) -L$(PWD)/bin -L$(PWD)/obj +# $(DIR_BIN)/pke-editor: $(DIR_OBJ)/main.o $(DIR_OBJ)/editor.o +$(DIR_BIN)/pke-editor: $(DIR_OBJ)/main.o $(DIR_OBJ)/editor.o +$(DIR_BIN)/pke-editor: $(DIR_BIN)/libpke.a + $(CXX) -v -o $@ -O3 $(CXXFLAGS) $(LDFLAGS) $(FLG_EDT) $^ -Wl,-v + +$(DIR_DBG)/pke-editor: $(DIR_DBG)/libpke.a $(DIR_DBG)/libImgui.a $(DIR_DBG)/libBullet3.a +$(DIR_DBG)/pke-editor: $(DIR_OBJ)/main.so $(DIR_OBJ)/editor.so + @echo $^ + $(CXX) -v -std=c++23 $(INCS) $^ $(LDFLAGS) $(CXXFLAGS) -g -Os $(FLG_EDT) -o $@ + +# pke-dbg: + +.PHONY: print +print: + @echo $(DST_SHADERS) + +.PHONY: clean +clean: + rm -rf .cache + rm -f *.o *.so *.plist config.h + rm -rf $(DIR_BIN) $(DIR_OBJ) $(DIR_DBG) + +.PHONY: dist install uninstall diff --git a/assets/shaders/vert.vert b/assets/shaders/vert.vert deleted file mode 100644 index 57fa219..0000000 --- a/assets/shaders/vert.vert +++ /dev/null @@ -1,31 +0,0 @@ -#version 450 - -layout(binding = 0) uniform UniformBufferObject { - mat4 model; - mat4 view; - mat4 proj; -} ubo; - -// vertex -// layout(location = 0) in vec4 inColor; -layout(location = 0) in vec3 inPosition; -layout(location = 1) in vec3 inNorm; -layout(location = 2) in vec2 inUV; - -// instance -layout(location = 3) in mat4 instPosRotScale; - -// output -layout(location = 0) out vec4 fragColor; -layout(location = 1) out vec3 fragTexCoord; - -void main() { - gl_Position = - ubo.proj * - ubo.view * - ubo.model * - instPosRotScale * - vec4(inPosition, 1.0); - fragColor = vec4(0.0, 0.0, 0.0, 0.0); - fragTexCoord = vec3(inUV, 0); -} diff --git a/assets/shaders/vertex.vert b/assets/shaders/vertex.vert new file mode 100644 index 0000000..57fa219 --- /dev/null +++ b/assets/shaders/vertex.vert @@ -0,0 +1,31 @@ +#version 450 + +layout(binding = 0) uniform UniformBufferObject { + mat4 model; + mat4 view; + mat4 proj; +} ubo; + +// vertex +// layout(location = 0) in vec4 inColor; +layout(location = 0) in vec3 inPosition; +layout(location = 1) in vec3 inNorm; +layout(location = 2) in vec2 inUV; + +// instance +layout(location = 3) in mat4 instPosRotScale; + +// output +layout(location = 0) out vec4 fragColor; +layout(location = 1) out vec3 fragTexCoord; + +void main() { + gl_Position = + ubo.proj * + ubo.view * + ubo.model * + instPosRotScale * + vec4(inPosition, 1.0); + fragColor = vec4(0.0, 0.0, 0.0, 0.0); + fragTexCoord = vec3(inUV, 0); +} diff --git a/config.def.h b/config.def.h new file mode 100644 index 0000000..e69de29 diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..1dcde1f --- /dev/null +++ b/config.mk @@ -0,0 +1,38 @@ +# pikul_two version +PKE_VERSION=0.1.0 + +# paths +PREFIX = /usr/local +MANPREFIX = $(PREFIX)/share/man + +# exes +PKG_CONFIG = pkg-config +CMAKE = /usr/bin/cmake +GLSLC = /usr/bin/glslc + +# includes and libs +USED_LIBS = \ + vulkan \ + glfw3 \ + glm \ + +INCS = `$(PKG_CONFIG) --cflags $(USED_LIBS)` + +LIBS = -lm `$(PKG_CONFIG) --libs $(USED_LIBS)` -lpthread + +# flags +SHARED_FLAGS = -D_DEFAULT_SOURCE \ + -D_POSIX_C_SOURCE=200809L \ + -DPKE_VERSION=\"$(PKE_VERSION)\" \ + -pedantic \ + -fPIC \ + -pthread \ + +CFLAGS += -Wall $(SHARED_FLAGS) +CXXFLAGS += -Wall $(SHARED_FLAGS) +CPPFLAGS = $(SHARED_FLAGS) +LDFLAGS = $(LIBS) + +# compiler & linker +CC = /usr/bin/gcc +CXX = /usr/bin/g++ diff --git a/dead.CMakeLists.txt b/dead.CMakeLists.txt new file mode 100644 index 0000000..ec40e9f --- /dev/null +++ b/dead.CMakeLists.txt @@ -0,0 +1,251 @@ + +cmake_minimum_required(VERSION 3.27) + +cmake_policy(SET CMP0135 NEW) + +project(pke VERSION 0.0) +set(PKE_VERSION ${PROJECT_VERSION}) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED True) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -pthread") + +set(PKE_SOURCE_FILES + src/vendor/pk.h + src/vendor/pkh_include.cpp + src/arg-handler.hpp + src/arg-handler.cpp + src/array.hpp + src/bucketed-array.hpp + src/camera.hpp + src/camera.cpp + src/components.hpp + src/ecs.hpp + src/ecs.cpp + src/entities.hpp + src/entities.cpp + src/event.hpp + src/event.cpp + src/game.hpp + src/game.cpp + src/game-settings.hpp + src/game-settings.cpp + src/game-type-defs.hpp + src/helpers.hpp + src/helpers.cpp + src/level-types.hpp + src/level-types.cpp + src/level.hpp + src/level.cpp + src/math-helpers.hpp + src/math-helpers.cpp + src/dynamic-array.hpp + src/dynamic-array.cpp + src/asset-manager.hpp + src/asset-manager.cpp + src/physics.hpp + src/physics.cpp + src/player-input.hpp + src/player-input.cpp + src/plugins.hpp + src/plugins.cpp + src/plugin-types.hpp + src/project.hpp + src/project.cpp + src/project-settings.hpp + src/project-settings.cpp + src/static/cube.hpp + src/static/cube.cpp + src/static/missing-texture.hpp + src/thread_pool.hpp + src/thread_pool.cpp + src/vendor/cgltf-include.hpp + src/vendor/cgltf-include.cpp + src/vendor/glm_include.hpp + src/vendor/stb_image_include.hpp + src/vendor/stb_image_include.cpp + src/vendor/tinyfiledialogs/tinyfiledialogs.h + src/vendor/tinyfiledialogs/tinyfiledialogs.c + src/window.hpp + src/window.cpp + src/window-types.hpp +) + +include(FetchContent) +FetchContent_Declare( + imguidocked + URL https://github.com/ocornut/imgui/archive/762ec445e63a95c1545b18b28d528f8ce38a9afd.zip +) + +FetchContent_GetProperties(imguidocked) +if(NOT imguidocked_POPULATED) + FetchContent_Populate(imguidocked) +endif() + +set(ImGuiDockedFiles + ${imguidocked_SOURCE_DIR}/imconfig.h + ${imguidocked_SOURCE_DIR}/imgui.cpp + ${imguidocked_SOURCE_DIR}/imgui.h + ${imguidocked_SOURCE_DIR}/imgui_demo.cpp + ${imguidocked_SOURCE_DIR}/imgui_draw.cpp + ${imguidocked_SOURCE_DIR}/imgui_internal.h + ${imguidocked_SOURCE_DIR}/imgui_tables.cpp + ${imguidocked_SOURCE_DIR}/imgui_widgets.cpp + ${imguidocked_SOURCE_DIR}/imstb_rectpack.h + ${imguidocked_SOURCE_DIR}/imstb_textedit.h + ${imguidocked_SOURCE_DIR}/imstb_truetype.h + ${imguidocked_SOURCE_DIR}/backends/imgui_impl_glfw.cpp + ${imguidocked_SOURCE_DIR}/backends/imgui_impl_glfw.h + ${imguidocked_SOURCE_DIR}/backends/imgui_impl_vulkan.cpp + ${imguidocked_SOURCE_DIR}/backends/imgui_impl_vulkan.h + ${imguidocked_SOURCE_DIR}/misc/cpp/imgui_stdlib.cpp + ${imguidocked_SOURCE_DIR}/misc/cpp/imgui_stdlib.h +) +add_library(imguidocked ${ImGuiDockedFiles}) +target_include_directories(imguidocked PUBLIC ${imguidocked_SOURCE_DIR}) +install( + TARGETS imguidocked + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib +) + +find_package(Vulkan REQUIRED) +if (Vulkan_FOUND) + message(STATUS "Vulkan found: " ${Vulkan_INCLUDE_DIR}) +endif (Vulkan_FOUND) + +add_library(pke + ${PKE_SOURCE_FILES} +) + +if (Vulkan_FOUND) + target_link_libraries(pke PUBLIC ${Vulkan_LIBRARIES}) + target_include_directories(pke PUBLIC ${Vulkan_INCLUDE_DIR}) +endif (Vulkan_FOUND) + +set(SHADER_OUTPUT_DIR ${PROJECT_BINARY_DIR}/assets/shaders) +set(SHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/assets/shaders) +file(MAKE_DIRECTORY ${SHADER_OUTPUT_DIR}) +set(SHADERS + ${SHADER_DIR}/present.vert + ${SHADER_DIR}/present.frag + ${SHADER_DIR}/vert.vert + ${SHADER_DIR}/texture.frag +) + +foreach(SHADER IN LISTS SHADERS) + get_filename_component(FILENAME ${SHADER} NAME) + message(STATUS "Before Shader Compile: ${FILENAME}") + add_custom_command(OUTPUT ${SHADER_OUTPUT_DIR}/${FILENAME}.spv + COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${SHADER} -o ${SHADER_OUTPUT_DIR}/${FILENAME}.spv + DEPENDS ${SHADER} + COMMENT "Compiling ${FILENAME}") + list(APPEND SPV_SHADERS ${SHADER_OUTPUT_DIR}/${FILENAME}.spv) +endforeach() + +add_custom_target(shaders ALL DEPENDS ${SPV_SHADERS}) + +find_package(PkgConfig REQUIRED) +pkg_search_module(GLFW REQUIRED glfw3) +if (GLFW_FOUND) + message(STATUS "GLFW found: " ${GLFW_INCLUDE_DIR}) + target_link_libraries(pke PUBLIC ${GLFW_LIBRARIES}) + target_include_directories(pke PUBLIC ${GLFW_INCLUDE_DIR}) +endif (GLFW_FOUND) + +find_package(glm REQUIRED) +if (glm_FOUND) + message(STATUS "glm found: " ${glm_INCLUDE_DIR}) + target_link_libraries(pke PUBLIC ${glm_LIBRARIES}) + target_include_directories(pke PUBLIC ${glm_INCLUDE_DIR}) +endif (glm_FOUND) + +FetchContent_Declare(stb URL https://github.com/nothings/stb/archive/5736b15f7ea0ffb08dd38af21067c314d6a3aae9.zip) +FetchContent_MakeAvailable(stb) +target_include_directories(pke PUBLIC "${PROJECT_BINARY_DIR}/_deps/stb-src") + +FetchContent_Declare(cgltf URL https://github.com/jkuhlmann/cgltf/archive/271614ce5fa8bed6daf3bc824d12a3a652ebdb15.zip) +FetchContent_MakeAvailable(cgltf) +target_include_directories(pke PUBLIC "${PROJECT_BINARY_DIR}/_deps/cgltf-src") + +FetchContent_Declare(bullet + GIT_REPOSITORY https://github.com/bulletphysics/bullet3.git + GIT_TAG 3.25 + OVERRIDE_FIND_PACKAGE +) +FetchContent_GetProperties(bullet) +if(NOT bullet_POPULATED) + set(BUILD_BULLET2_DEMOS 0 CACHE STRING "" FORCE) + set(BUILD_CPU_DEMOS 0 CACHE STRING "" FORCE) + set(BUILD_UNIT_TESTS 0 CACHE STRING "" FORCE) + set(BUILD_OPENGL3_DEMOS 0 CACHE STRING "" FORCE) + set(BUILD_EXTRAS 0 CACHE STRING "" FORCE) + set(INSTALL_EXTRA_LIBS 0 CACHE STRING "" FORCE) + set(INSTALL_LIBS 1 CACHE STRING "" FORCE) + set(INSTALL_CMAKE_FILES 0 CACHE STRING "" FORCE) + set(POSITION_INDEPENDENT_CODE O CACHE BOOL "" FORCE) + FetchContent_Populate(bullet) + add_subdirectory(${bullet_SOURCE_DIR} ${bullet_BINARY_DIR}) + target_include_directories(pke PUBLIC BEFORE ${bullet_SOURCE_DIR}/src) + target_link_libraries(pke PUBLIC BulletDynamics BulletCollision LinearMath Bullet3Common) + message(STATUS "Bullet vars: " ${bullet_SOURCE_DIR} " - " ${bullet_BINARY_DIR}) +endif() +find_package(Bullet REQUIRED + PATHS ${bullet_BINARY_DIR} +) + +target_include_directories(pke PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src") + +target_link_libraries(pke PUBLIC imguidocked) + +add_dependencies(pke shaders) + +# install libs +set(LIB_DESTINATION "lib") +set(INCLUDE_INSTALL_DIR "include/pke") +set(PKGCONFIG_INSTALL_PREFIX "lib/pkgconfig") +IF(NOT MSVC) + configure_file("src/cmake/pke.pc.cmake" ${CMAKE_CURRENT_BINARY_DIR}/pke.pc @ONLY) + install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/pke.pc + DESTINATION + ${PKGCONFIG_INSTALL_PREFIX} + ) +ENDIF() +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/ + DESTINATION ${INCLUDE_INSTALL_DIR} + FILES_MATCHING + PATTERN "*.h" + PATTERN "*.hpp" + PATTERN "cmake" EXCLUDE +) +install( + TARGETS pke + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib +) + +# install cmake files +set (PKE_CONFIG_CMAKE_PATH lib/cmake/pke ) +# list (APPEND PKE_DEFINITIONS "SOME_VAL") +list(APPEND PKE_DEFINITIONS "") +list(APPEND PKE_LIBRARIES pke) +set(PKE_USE_FILE src/cmake/Usepke.cmake) +configure_file(src/cmake/pkeConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/pkeConfig.cmake + @ONLY ESCAPE_QUOTES +) +install(FILES + src/cmake/Usepke.cmake + ${CMAKE_CURRENT_BINARY_DIR}/pkeConfig.cmake + DESTINATION ${PKE_CONFIG_CMAKE_PATH} +) + +add_subdirectory(editor) +add_subdirectory(runtime) +add_subdirectory(test) +add_subdirectory(example) diff --git a/editor/editor.cpp b/editor/editor.cpp index 8c99096..db82fc0 100644 --- a/editor/editor.cpp +++ b/editor/editor.cpp @@ -569,7 +569,7 @@ void RecordImGuiModalCreateAsset() { } void RecordImGuiEditorWrapper() { - ImGui::DockSpaceOverViewport(nullptr, ImGuiDockNodeFlags_PassthruCentralNode); + ImGui::DockSpaceOverViewport(0, nullptr, ImGuiDockNodeFlags_PassthruCentralNode); ImGui::BeginMainMenuBar(); if (ImGui::BeginMenu("File")) { if (ImGui::MenuItem("New Scene")) { diff --git a/src/asset-manager.cpp b/src/asset-manager.cpp index 2784b1e..fc24a48 100644 --- a/src/asset-manager.cpp +++ b/src/asset-manager.cpp @@ -27,7 +27,7 @@ void AM_Init() { assetThreadPool = PkeThreads_Init(2, 255); AM_Register(EngineDefinedAssets[0], PKE_ASSET_TYPE_SHADER, "assets/shaders/present.vert.spv"); AM_Register(EngineDefinedAssets[1], PKE_ASSET_TYPE_SHADER, "assets/shaders/present.frag.spv"); - AM_Register(EngineDefinedAssets[2], PKE_ASSET_TYPE_SHADER, "assets/shaders/vert.vert.spv"); + AM_Register(EngineDefinedAssets[2], PKE_ASSET_TYPE_SHADER, "assets/shaders/vertex.vert.spv"); AM_Register(EngineDefinedAssets[3], PKE_ASSET_TYPE_SHADER, "assets/shaders/texture.frag.spv"); } diff --git a/src/player-input.hpp b/src/player-input.hpp index e3d3501..392e675 100644 --- a/src/player-input.hpp +++ b/src/player-input.hpp @@ -104,9 +104,7 @@ struct PkeInputAction { const char *name; union { PkeInputEventMask masks[PKE_INPUT_ACTION_MASK_COUNT] = {{}}; - struct { - PkeInputEventMask primaryHash; - }; + PkeInputEventMask primaryHash; }; int32_t eventIndex; }; diff --git a/src/window.cpp b/src/window.cpp index c7963eb..1be148f 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1,3 +1,4 @@ +#include "backends/imgui_impl_vulkan.h" #include "math-helpers.hpp" #include "static/missing-texture.hpp" #define GLFW_INCLUDE_NONE @@ -2263,52 +2264,55 @@ void CreateImGui() { vkCreateDescriptorPool(vkDevice, &descriptorPoolCreateInfo, vkAllocator, &imGuiDescriptorPool); ImGui_ImplGlfw_InitForVulkan(window, true); - ImGui_ImplVulkan_InitInfo initInfo; + ImGui_ImplVulkan_InitInfo initInfo = {}; initInfo.Allocator = vkAllocator; initInfo.CheckVkResultFn = ImGuiCheckVkResult; - initInfo.ColorAttachmentFormat = VkFormat::VK_FORMAT_B8G8R8A8_SRGB; + // initInfo.ColorAttachmentFormat = VkFormat::VK_FORMAT_B8G8R8A8_SRGB; initInfo.DescriptorPool = imGuiDescriptorPool; initInfo.Device = vkDevice; - initInfo.Instance = vkInstance; initInfo.ImageCount = MAX_FRAMES_IN_FLIGHT; - initInfo.MinImageCount = MAX_FRAMES_IN_FLIGHT; + initInfo.Instance = vkInstance; initInfo.MSAASamples = VK_SAMPLE_COUNT_1_BIT; + initInfo.MinImageCount = MAX_FRAMES_IN_FLIGHT; initInfo.PhysicalDevice = vkPhysicalDevice; initInfo.PipelineCache = {}; initInfo.Queue = graphicsQueue; initInfo.QueueFamily = graphicsFamilyIndex; + initInfo.RenderPass = presentRenderPass; initInfo.Subpass = 0; initInfo.UseDynamicRendering = false; - ImGui_ImplVulkan_Init(&initInfo, presentRenderPass); + ImGui_ImplVulkan_Init(&initInfo); // font - { - VkCommandBufferBeginInfo begInfo; - begInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; - begInfo.pNext = nullptr; - begInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; - begInfo.pInheritanceInfo = {}; - vkBeginCommandBuffer(presentCommandBuffers[0], &begInfo); - - ImGui_ImplVulkan_CreateFontsTexture(presentCommandBuffers[0]); - - vkEndCommandBuffer(presentCommandBuffers[0]); - - VkSubmitInfo submitInfo; - submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; - submitInfo.pNext = nullptr; - submitInfo.waitSemaphoreCount = 0; - submitInfo.pWaitSemaphores = nullptr; - submitInfo.pWaitDstStageMask = nullptr; - submitInfo.commandBufferCount = 1; - submitInfo.pCommandBuffers = presentCommandBuffers; - submitInfo.signalSemaphoreCount = 0; - submitInfo.pSignalSemaphores = nullptr; - vkQueueSubmit(graphicsQueue, 1, &submitInfo, nullptr); - vkQueueWaitIdle(graphicsQueue); - } - ImGui_ImplVulkan_DestroyFontUploadObjects(); + // { + // VkCommandBufferBeginInfo begInfo; + // begInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + // begInfo.pNext = nullptr; + // begInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; + // begInfo.pInheritanceInfo = {}; + // vkBeginCommandBuffer(presentCommandBuffers[0], &begInfo); + + // ImGui_ImplVulkan_CreateFontsTexture(); + // ImGui_ImplVulkan_CreateFontsTexture(presentCommandBuffers[0]); + + // vkEndCommandBuffer(presentCommandBuffers[0]); + + // VkSubmitInfo submitInfo; + // submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + // submitInfo.pNext = nullptr; + // submitInfo.waitSemaphoreCount = 0; + // submitInfo.pWaitSemaphores = nullptr; + // submitInfo.pWaitDstStageMask = nullptr; + // submitInfo.commandBufferCount = 1; + // submitInfo.pCommandBuffers = presentCommandBuffers; + // submitInfo.signalSemaphoreCount = 0; + // submitInfo.pSignalSemaphores = nullptr; + // vkQueueSubmit(graphicsQueue, 1, &submitInfo, nullptr); + // vkQueueWaitIdle(graphicsQueue); + // } + // ImGui_ImplVulkan_DestroyFontsTexture(); + // ImGui_ImplVulkan_DestroyFontUploadObjects(); } void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) { diff --git a/sub/bullet3 b/sub/bullet3 new file mode 160000 index 0000000..e9c461b --- /dev/null +++ b/sub/bullet3 @@ -0,0 +1 @@ +Subproject commit e9c461b0ace140d5c73972760781d94b7b5eee53 diff --git a/sub/cgltf b/sub/cgltf new file mode 160000 index 0000000..7177c01 --- /dev/null +++ b/sub/cgltf @@ -0,0 +1 @@ +Subproject commit 7177c019be6c105fd12bc35f249e431314f2bab1 diff --git a/sub/imgui b/sub/imgui new file mode 160000 index 0000000..3cdf3f9 --- /dev/null +++ b/sub/imgui @@ -0,0 +1 @@ +Subproject commit 3cdf3f9411b20cc877bab399279c9bc450185efb diff --git a/sub/stb b/sub/stb new file mode 160000 index 0000000..5c20573 --- /dev/null +++ b/sub/stb @@ -0,0 +1 @@ +Subproject commit 5c205738c191bcb0abc65c4febfa9bd25ff35234 -- cgit v1.2.3