Compare commits

...

2 Commits

Author SHA1 Message Date
Anish Bhobe cef36af79d Changed source files to strings to match VS. 2025-02-08 22:56:19 +01:00
Anish Bhobe 4d5cffa3d7 Moved from GLFW3 to SDL3. 2025-02-08 22:44:50 +01:00
30 changed files with 847 additions and 197 deletions

1
.gitignore vendored
View File

@ -4,3 +4,4 @@ build/
.vs/ .vs/
.direnv/ .direnv/
.ccls-cache/ .ccls-cache/
/Folder.DotSettings.user

View File

@ -1,5 +0,0 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/Housekeeping/Bookmarks/NumberedBookmarks/=Bookmark5/@KeyIndexDefined">True</s:Boolean>
<s:String x:Key="/Default/Housekeeping/Bookmarks/NumberedBookmarks/=Bookmark5/Coords/@EntryValue">(Doc Ln 10 Col 4)</s:String>
<s:String x:Key="/Default/Housekeeping/Bookmarks/NumberedBookmarks/=Bookmark5/FileId/@EntryValue">DB94C55F-6B9A-4AAE-80D7-29FD8153E6B5/d:aster/f:window.h</s:String>
<s:String x:Key="/Default/Housekeeping/Bookmarks/NumberedBookmarks/=Bookmark5/Owner/@EntryValue">NumberedBookmarkManager</s:String></wpf:ResourceDictionary>

View File

@ -3,7 +3,7 @@
cmake_minimum_required(VERSION 3.13) cmake_minimum_required(VERSION 3.13)
find_package(glm CONFIG REQUIRED) find_package(glm CONFIG REQUIRED)
find_package(glfw3 CONFIG REQUIRED) find_package(SDL3 CONFIG REQUIRED)
find_path(SCOTTT_DEBUGBREAK_INCLUDE_DIRS "debugbreak.h") find_path(SCOTTT_DEBUGBREAK_INCLUDE_DIRS "debugbreak.h")
find_package(Vulkan REQUIRED) find_package(Vulkan REQUIRED)
find_package(fmt CONFIG REQUIRED) find_package(fmt CONFIG REQUIRED)
@ -11,31 +11,35 @@ find_package(VulkanMemoryAllocator CONFIG REQUIRED)
find_package(EASTL CONFIG REQUIRED) find_package(EASTL CONFIG REQUIRED)
set(HEADER_FILES set(HEADER_FILES
constants.h "constants.h"
config.h "config.h"
logger.h "logger.h"
global.h "global.h"
context.h "context.h"
window.h "window.h"
physical_device.h "physical_device.h"
device.h "device.h"
swapchain.h "swapchain.h"
pipeline.h "pipeline.h"
queue_allocation.h "queue_allocation.h"
buffer.h "surface.h" "size.h") "buffer.h"
"surface.h"
"size.h"
"timer.h")
set(SOURCE_FILES set(SOURCE_FILES
logger.cpp "logger.cpp"
global.cpp "global.cpp"
context.cpp "context.cpp"
window.cpp "window.cpp"
physical_device.cpp "physical_device.cpp"
device.cpp "device.cpp"
swapchain.cpp "swapchain.cpp"
pipeline.cpp "pipeline.cpp"
buffer.cpp "buffer.cpp"
image.cpp "image.cpp"
image.h "surface.cpp") "image.h"
"surface.cpp")
add_library(aster_core STATIC ${SOURCE_FILES} ${HEADER_FILES}) add_library(aster_core STATIC ${SOURCE_FILES} ${HEADER_FILES})
set_property(TARGET aster_core PROPERTY CXX_STANDARD 20) set_property(TARGET aster_core PROPERTY CXX_STANDARD 20)
@ -45,7 +49,7 @@ target_precompile_headers(aster_core PUBLIC global.h)
target_include_directories(aster_core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(aster_core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(aster_core PUBLIC glm::glm-header-only) target_link_libraries(aster_core PUBLIC glm::glm-header-only)
target_link_libraries(aster_core PRIVATE glfw) target_link_libraries(aster_core PRIVATE SDL3::SDL3)
target_include_directories(aster_core PRIVATE ${SCOTTT_DEBUGBREAK_INCLUDE_DIRS}) target_include_directories(aster_core PRIVATE ${SCOTTT_DEBUGBREAK_INCLUDE_DIRS})
target_link_libraries(aster_core PRIVATE fmt::fmt) target_link_libraries(aster_core PRIVATE fmt::fmt)
target_link_libraries(aster_core PRIVATE EASTL) target_link_libraries(aster_core PRIVATE EASTL)

View File

@ -21,6 +21,8 @@
#define EASTL_NO_EXCEPTIONS 1 #define EASTL_NO_EXCEPTIONS 1
#define FMT_UNICODE 0
#if defined(ASTER_NDEBUG) #if defined(ASTER_NDEBUG)
#define USE_OPTICK (0) #define USE_OPTICK (0)
#else #else

View File

@ -4,9 +4,14 @@
// ============================================= // =============================================
#include "context.h" #include "context.h"
#include "window.h"
#include <EASTL/array.h> #include <EASTL/array.h>
#include <EASTL/fixed_vector.h> #include <EASTL/fixed_vector.h>
#include <SDL3/SDL_vulkan.h>
VKAPI_ATTR b32 VKAPI_CALL VKAPI_ATTR b32 VKAPI_CALL
DebugCallback(const VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, DebugCallback(const VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
const VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessageTypeFlagsEXT messageType,
@ -34,7 +39,7 @@ DebugCallback(const VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
return false; return false;
} }
Context::Context(const cstr appName, const Version version, bool enableValidation) Context::Context(Window *window, const cstr appName, const Version version, bool enableValidation)
{ {
INFO_IF(enableValidation, "Validation Layers enabled"); INFO_IF(enableValidation, "Validation Layers enabled");
@ -60,9 +65,7 @@ Context::Context(const cstr appName, const Version version, bool enableValidatio
.pUserData = nullptr, .pUserData = nullptr,
}; };
u32 glfwExtensionCount = 0; eastl::vector<cstr> instanceExtensions = window->GetRequiredExtensions();
cstr *glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount);
eastl::fixed_vector<cstr, 3> instanceExtensions(glfwExtensions, glfwExtensions + glfwExtensionCount);
if (enableValidation) if (enableValidation)
{ {
instanceExtensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); instanceExtensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);

View File

@ -7,6 +7,8 @@
#include "global.h" #include "global.h"
struct Window;
/** /**
* @class Context * @class Context
* *
@ -21,7 +23,7 @@ struct Context final
vk::DebugUtilsMessengerEXT m_DebugMessenger = nullptr; vk::DebugUtilsMessengerEXT m_DebugMessenger = nullptr;
// Ctor/Dtor // Ctor/Dtor
Context(cstr appName, Version version, bool enableValidation = ENABLE_LAYER_MESSAGES_DEFAULT_VALUE); Context(Window *window, cstr appName, Version version, bool enableValidation = ENABLE_LAYER_MESSAGES_DEFAULT_VALUE);
~Context(); ~Context();
// Move // Move

View File

@ -56,19 +56,19 @@ struct fmt::formatter<MemorySize>
// return format_to(ctx.out(), "({}, {})", foo.a, foo.b); // --== KEY LINE ==-- // return format_to(ctx.out(), "({}, {})", foo.a, foo.b); // --== KEY LINE ==--
if (mem.m_Gigabytes > 0) if (mem.m_Gigabytes > 0)
{ {
return v10::format_to(ctx.out(), "{}.{} GB", mem.m_Gigabytes, return v11::format_to(ctx.out(), "{}.{} GB", mem.m_Gigabytes,
Cast<u16>(mem.m_Megabytes / 1024.0)); Cast<u16>(mem.m_Megabytes / 1024.0));
} }
if (mem.m_Megabytes > 0) if (mem.m_Megabytes > 0)
{ {
return v10::format_to(ctx.out(), "{}.{} MB", mem.m_Megabytes, Cast<u16>(mem.m_Kilobytes / 1024.0)); return v11::format_to(ctx.out(), "{}.{} MB", mem.m_Megabytes, Cast<u16>(mem.m_Kilobytes / 1024.0));
} }
if (mem.m_Kilobytes > 0) if (mem.m_Kilobytes > 0)
{ {
return v10::format_to(ctx.out(), "{}.{} KB", mem.m_Kilobytes, Cast<u16>(mem.m_Bytes / 1024.0)); return v11::format_to(ctx.out(), "{}.{} KB", mem.m_Kilobytes, Cast<u16>(mem.m_Bytes / 1024.0));
} }
return v10::format_to(ctx.out(), "{} Bytes", mem.m_Bytes); return v11::format_to(ctx.out(), "{} Bytes", mem.m_Bytes);
} }
}; };

View File

@ -9,7 +9,6 @@
#include "constants.h" #include "constants.h"
#include "logger.h" #include "logger.h"
#include <GLFW/glfw3.h>
#include <glm/glm.hpp> #include <glm/glm.hpp>
#include <fmt/format.h> #include <fmt/format.h>
@ -77,31 +76,6 @@ HashCombine(const usize hash0, const usize hash1)
return hash0 ^ tempVar; return hash0 ^ tempVar;
} }
struct Time
{
static constexpr f64 MAX_DELTA = 0.1;
inline static f64 m_Elapsed{Qnan<f64>};
inline static f64 m_Delta{Qnan<f64>};
static void
Init()
{
WARN_IF(!std::isnan(m_Elapsed), "Time already init.");
m_Elapsed = glfwGetTime();
m_Delta = 1.0 / 60.0;
}
static void
Update()
{
ERROR_IF(std::isnan(m_Elapsed), "Time not init.");
const auto newElapsed = glfwGetTime();
m_Delta = std::clamp(newElapsed - m_Elapsed, 0.0, MAX_DELTA);
m_Elapsed = newElapsed;
}
};
[[nodiscard]] constexpr usize [[nodiscard]] constexpr usize
ClosestMultiple(const usize val, const usize of) ClosestMultiple(const usize val, const usize of)
{ {
@ -177,7 +151,7 @@ struct fmt::formatter<vk::Result> : nested_formatter<std::string>
format(vk::Result result, format_context &ctx) const format(vk::Result result, format_context &ctx) const
{ {
return write_padded(ctx, return write_padded(ctx,
[this, result](auto out) { return v10::format_to(out, "{}", nested(to_string(result))); }); [this, result](auto out) { return v11::format_to(out, "{}", nested(to_string(result))); });
} }
}; };
@ -188,6 +162,6 @@ struct fmt::formatter<eastl::fixed_string<TType, TCount, TOverflow>> : nested_fo
// ReSharper disable once CppInconsistentNaming // ReSharper disable once CppInconsistentNaming
format(const eastl::fixed_string<TType, TCount, TOverflow> &str, format_context &ctx) const format(const eastl::fixed_string<TType, TCount, TOverflow> &str, format_context &ctx) const
{ {
return write_padded(ctx, [this, str](auto out) { return v10::format_to(out, "{}", nested(str.c_str())); }); return write_padded(ctx, [this, str](auto out) { return v11::format_to(out, "{}", nested(str.c_str())); });
} }
}; };

View File

@ -5,6 +5,7 @@
#include "surface.h" #include "surface.h"
#include "SDL3/SDL_vulkan.h"
#include "context.h" #include "context.h"
#include "window.h" #include "window.h"
@ -12,11 +13,14 @@ Surface::Surface(Context *context, const Window *window, cstr name)
: m_Context(context) : m_Context(context)
{ {
VkSurfaceKHR surface; VkSurfaceKHR surface;
auto result = Cast<vk::Result>( if (!SDL_Vulkan_CreateSurface(window->m_Window, Cast<VkInstance>(m_Context->m_Instance), nullptr, &surface))
glfwCreateWindowSurface(Cast<VkInstance>(m_Context->m_Instance), window->m_Window, nullptr, &surface)); {
ERROR_IF(Failed(result), "Failed to create Surface with {}", result) const char *error = SDL_GetError();
THEN_ABORT(result) ERROR("Failed to create Surface. Cause: {}", error)
ELSE_DEBUG("Surface {} Created", m_Name); THEN_ABORT(-1);
}
DEBUG("Surface {} Created", m_Name);
m_Surface = vk::SurfaceKHR(surface); m_Surface = vk::SurfaceKHR(surface);
} }

View File

@ -10,6 +10,8 @@
#include "surface.h" #include "surface.h"
#include "window.h" #include "window.h"
#include <SDL3/SDL.h>
[[nodiscard]] vk::Extent2D GetExtent(Size2D size, vk::SurfaceCapabilitiesKHR *surfaceCapabilities); [[nodiscard]] vk::Extent2D GetExtent(Size2D size, vk::SurfaceCapabilitiesKHR *surfaceCapabilities);
Swapchain::Swapchain(const Surface *surface, const Device *device, Size2D size, NameString &&name) Swapchain::Swapchain(const Surface *surface, const Device *device, Size2D size, NameString &&name)
@ -59,7 +61,8 @@ Swapchain::Create(const Surface *surface, Size2D size)
while (m_Extent.width == 0 || m_Extent.height == 0) while (m_Extent.width == 0 || m_Extent.height == 0)
{ {
glfwWaitEvents(); SDL_Event event;
SDL_WaitEvent(&event);
surfaceCapabilities = GetSurfaceCapabilities(m_Device->m_PhysicalDevice, surface->m_Surface); surfaceCapabilities = GetSurfaceCapabilities(m_Device->m_PhysicalDevice, surface->m_Surface);
m_Extent = GetExtent(size, &surfaceCapabilities); m_Extent = GetExtent(size, &surfaceCapabilities);
} }

42
aster/timer.h Normal file
View File

@ -0,0 +1,42 @@
// =============================================
// Aster: logger.h
// Copyright (c) 2020-2024 Anish Bhobe
// =============================================
#pragma once
#include "constants.h"
#include <SDL3/SDL.h>
#include <utility>
struct Time
{
static constexpr f64 MAX_DELTA = 0.1;
inline static u64 m_PerfCounter;
inline static u64 m_BeginAtCounter;
inline static f64 m_Elapsed;
inline static f64 m_Delta;
inline static f64 m_SecondPerCount;
static void
Init()
{
m_SecondPerCount = 1.0 / Cast<f64>(SDL_GetPerformanceFrequency());
m_BeginAtCounter = SDL_GetPerformanceCounter();
m_PerfCounter = m_BeginAtCounter;
m_Elapsed = 0.0;
m_Delta = 1.0 / 60.0;
}
static void
Update()
{
u64 currentCounter = SDL_GetPerformanceCounter();
m_Elapsed = (currentCounter - m_BeginAtCounter) * m_SecondPerCount;
m_Delta = std::min(m_SecondPerCount * (currentCounter - m_PerfCounter), MAX_DELTA);
m_PerfCounter = currentCounter;
}
};

View File

@ -8,13 +8,32 @@
#include "context.h" #include "context.h"
#include "logger.h" #include "logger.h"
#include <SDL3/SDL.h>
#include <SDL3/SDL_vulkan.h>
std::atomic_uint64_t Window::m_WindowCount = 0; std::atomic_uint64_t Window::m_WindowCount = 0;
std::atomic_bool Window::m_IsGlfwInit = false; std::atomic_bool Window::m_IsGlfwInit = false;
bool
Window::Poll() const noexcept
{
SDL_Event event;
while (SDL_PollEvent(&event))
{
if (event.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED)
{
return false;
}
}
return true;
}
void void
Window::RequestExit() const noexcept Window::RequestExit() const noexcept
{ {
glfwSetWindowShouldClose(m_Window, true); SDL_Event *event = Cast<SDL_Event*>(SDL_malloc(sizeof(SDL_Event)));
event->type = SDL_EVENT_WINDOW_CLOSE_REQUESTED;
SDL_PushEvent(event);
} }
void void
@ -26,63 +45,53 @@ Window::SetWindowSize(const vk::Extent2D &extent) const noexcept
void void
Window::SetWindowSize(const u32 width, const u32 height) const noexcept Window::SetWindowSize(const u32 width, const u32 height) const noexcept
{ {
glfwSetWindowSize(m_Window, Cast<i32>(width), Cast<i32>(height)); SDL_SetWindowSize(m_Window, Cast<i32>(width), Cast<i32>(height));
} }
Size2D Size2D
Window::GetSize() const Window::GetSize() const
{ {
int width; i32 width, height;
int height;
glfwGetFramebufferSize(m_Window, &width, &height); SDL_GetWindowSizeInPixels(m_Window, &width, &height);
return {Cast<u32>(width), Cast<u32>(height)}; return {Cast<u32>(width), Cast<u32>(height)};
} }
eastl::vector<cstr>
Window::GetRequiredExtensions()
{
u32 count = 0;
auto extensions = SDL_Vulkan_GetInstanceExtensions(&count);
return eastl::vector<cstr>{extensions, extensions + count};
}
Window::Window(const cstr title, Size2D extent, const b8 isFullScreen) Window::Window(const cstr title, Size2D extent, const b8 isFullScreen)
{ {
m_Name = title; m_Name = title;
if (!m_IsGlfwInit) if (!m_IsGlfwInit)
{ {
if (!glfwInit()) if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS))
{ {
const char *error = nullptr; const char *error = SDL_GetError();
const auto code = glfwGetError(&error); ERROR("SDL Init failed. Cause: {}", error)
ERROR("GLFW Init failed. Cause: ({}) {}", code, error) THEN_ABORT(-1);
THEN_ABORT(code);
} }
m_WindowCount = 0; m_WindowCount = 0;
m_IsGlfwInit = true; m_IsGlfwInit = true;
} }
GLFWmonitor *monitor = glfwGetPrimaryMonitor(); m_Window =
ERROR_IF(!monitor, "No monitor found"); SDL_CreateWindow(m_Name.c_str(), Cast<i32>(extent.m_Width), Cast<i32>(extent.m_Height), SDL_WINDOW_VULKAN);
i32 windowX, windowY, windowWidth, windowHeight;
glfwGetMonitorWorkarea(monitor, &windowX, &windowY, &windowWidth, &windowHeight);
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
glfwWindowHint(GLFW_CENTER_CURSOR, GLFW_TRUE);
m_Window = glfwCreateWindow(Cast<i32>(extent.m_Width), Cast<i32>(extent.m_Height), m_Name.c_str(),
isFullScreen ? monitor : nullptr, nullptr);
ERROR_IF(m_Window == nullptr, "Window creation failed") ERROR_IF(m_Window == nullptr, "Window creation failed")
ELSE_DEBUG("Window '{}' created with resolution '{}x{}'", m_Name, extent.m_Width, extent.m_Height); ELSE_DEBUG("Window '{}' created with resolution '{}x{}'", m_Name, extent.m_Width, extent.m_Height);
if (m_Window == nullptr) if (m_Window == nullptr)
{ {
const char *error = nullptr; const char *error = SDL_GetError();
const auto code = glfwGetError(&error); ERROR("SDL Window Creation failed. Cause: {}", error)
ERROR("GLFW Window Creation failed. Cause: ({}) {}", code, error) THEN_ABORT(-1);
THEN_ABORT(code);
} }
if (isFullScreen == false)
{
glfwSetWindowPos(m_Window, Cast<i32>(windowWidth - extent.m_Width) / 2,
Cast<i32>(windowHeight - extent.m_Height) / 2);
}
glfwSetInputMode(m_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
++m_WindowCount; ++m_WindowCount;
} }
@ -90,7 +99,7 @@ Window::~Window()
{ {
if (m_Window) if (m_Window)
{ {
glfwDestroyWindow(m_Window); SDL_DestroyWindow(m_Window);
m_Window = nullptr; m_Window = nullptr;
--m_WindowCount; --m_WindowCount;
@ -98,7 +107,7 @@ Window::~Window()
if (m_WindowCount== 0 && m_IsGlfwInit) if (m_WindowCount== 0 && m_IsGlfwInit)
{ {
glfwTerminate(); SDL_Quit();
m_IsGlfwInit = false; m_IsGlfwInit = false;
} }

View File

@ -8,14 +8,17 @@
#include "global.h" #include "global.h"
#include "size.h" #include "size.h"
#include "EASTL/vector.h"
#include <EASTL/fixed_string.h> #include <EASTL/fixed_string.h>
#include <atomic> #include <atomic>
struct SDL_Window;
struct Window final struct Window final
{ {
// fields // fields
GLFWwindow *m_Window = nullptr; SDL_Window *m_Window = nullptr;
NameString m_Name; NameString m_Name;
static std::atomic_uint64_t m_WindowCount; static std::atomic_uint64_t m_WindowCount;
@ -23,17 +26,14 @@ struct Window final
// Methods // Methods
[[nodiscard]] bool [[nodiscard]] bool
Poll() const noexcept Poll() const noexcept;
{
glfwPollEvents();
return !glfwWindowShouldClose(m_Window);
}
void RequestExit() const noexcept; void RequestExit() const noexcept;
void SetWindowSize(const vk::Extent2D &extent) const noexcept; void SetWindowSize(const vk::Extent2D &extent) const noexcept;
void SetWindowSize(u32 width, u32 height) const noexcept; void SetWindowSize(u32 width, u32 height) const noexcept;
/// Actual size of the framebuffer being used for the window render. /// Actual size of the framebuffer being used for the window render.
[[nodiscard]] Size2D GetSize() const; [[nodiscard]] Size2D GetSize() const;
eastl::vector<cstr> GetRequiredExtensions();
// Ctor/Dtor // Ctor/Dtor
Window(cstr title, Size2D extent, b8 isFullScreen = false); Window(cstr title, Size2D extent, b8 isFullScreen = false);

View File

@ -5,12 +5,12 @@ cmake_minimum_required(VERSION 3.13)
find_package(imgui CONFIG REQUIRED) find_package(imgui CONFIG REQUIRED)
add_library(util_helper STATIC add_library(util_helper STATIC
helpers.h "helpers.h"
helpers.cpp "helpers.cpp"
frame.cpp "frame.cpp"
frame.h "frame.h"
gui.cpp "gui.cpp"
gui.h) "gui.h")
target_link_libraries(util_helper PRIVATE aster_core) target_link_libraries(util_helper PRIVATE aster_core)
target_link_libraries(util_helper PRIVATE imgui::imgui) target_link_libraries(util_helper PRIVATE imgui::imgui)

View File

@ -10,8 +10,8 @@
#include "helpers.h" #include "helpers.h"
#include "window.h" #include "window.h"
#include <imgui_impl_glfw.h>
#include <imgui_impl_vulkan.h> #include <imgui_impl_vulkan.h>
#include <imgui_impl_sdl3.h>
#include <imgui_internal.h> #include <imgui_internal.h>
namespace ImGui namespace ImGui
@ -58,12 +58,12 @@ Init(const Context *context, const Device *device, const Window *window, vk::For
CreateContext(); CreateContext();
ImGuiIO &io = GetIO(); ImGuiIO &io = GetIO();
(void)io; (void)io;
// io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
// io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Viewports bad // io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Viewports bad
StyleColorsDark(); StyleColorsDark();
ImGui_ImplGlfw_InitForVulkan(window->m_Window, true); ImGui_ImplSDL3_InitForVulkan(window->m_Window);
vk::PipelineRenderingCreateInfo renderingCreateInfo = { vk::PipelineRenderingCreateInfo renderingCreateInfo = {
.colorAttachmentCount = 1, .colorAttachmentCount = 1,
@ -95,7 +95,7 @@ Destroy(const Device *device)
{ {
ImGui_ImplVulkan_Shutdown(); ImGui_ImplVulkan_Shutdown();
ImGui_ImplGlfw_Shutdown(); ImGui_ImplSDL3_Shutdown();
DestroyContext(); DestroyContext();
device->m_Device.destroy(Take(g_DescriptorPool), nullptr); device->m_Device.destroy(Take(g_DescriptorPool), nullptr);
@ -105,14 +105,14 @@ void
StartBuild() StartBuild()
{ {
ImGui_ImplVulkan_NewFrame(); ImGui_ImplVulkan_NewFrame();
ImGui_ImplGlfw_NewFrame(); ImGui_ImplSDL3_NewFrame();
NewFrame(); NewFrame();
// static ImGuiDockNodeFlags dockspaceFlags = ImGuiDockNodeFlags_None | ImGuiDockNodeFlags_PassthruCentralNode; static ImGuiDockNodeFlags dockspaceFlags = ImGuiDockNodeFlags_None | ImGuiDockNodeFlags_PassthruCentralNode;
// We are using the ImGuiWindowFlags_NoDocking flag to make the parent window not dockable into, // We are using the ImGuiWindowFlags_NoDocking flag to make the parent window not dockable into,
// because it would be confusing to have two docking targets within each others. // because it would be confusing to have two docking targets within each others.
ImGuiWindowFlags windowFlags = ImGuiWindowFlags_None; // ImGuiWindowFlags_NoDocking; ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoDocking;
const ImGuiViewport *viewport = GetMainViewport(); const ImGuiViewport *viewport = GetMainViewport();
SetNextWindowPos(viewport->WorkPos); SetNextWindowPos(viewport->WorkPos);
@ -130,18 +130,18 @@ StartBuild()
// all active windows docked into it will lose their parent and become undocked. // all active windows docked into it will lose their parent and become undocked.
// We cannot preserve the docking relationship between an active window and an inactive docking, otherwise // We cannot preserve the docking relationship between an active window and an inactive docking, otherwise
// any change of dockspace/settings would lead to windows being stuck in limbo and never being visible. // any change of dockspace/settings would lead to windows being stuck in limbo and never being visible.
// PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f));
// Begin("DockSpace Demo", nullptr, windowFlags); Begin("DockSpace Demo", nullptr, windowFlags);
// PopStyleVar(); PopStyleVar();
// PopStyleVar(2); PopStyleVar(2);
// DockSpace // DockSpace
// if (GetIO().ConfigFlags & ImGuiConfigFlags_DockingEnable) if (GetIO().ConfigFlags & ImGuiConfigFlags_DockingEnable)
// { {
// const ImGuiID dockspaceId = GetID("MyDockSpace"); const ImGuiID dockspaceId = GetID("MyDockSpace");
// DockSpace(dockspaceId, ImVec2(0.0f, 0.0f), dockspaceFlags); DockSpace(dockspaceId, ImVec2(0.0f, 0.0f), dockspaceFlags);
// } }
} }
void void
@ -151,13 +151,6 @@ EndBuild()
Render(); Render();
EndFrame(); EndFrame();
// if (GetIO().ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
// {
// GLFWwindow *backupCurrentContext = glfwGetCurrentContext();
// UpdatePlatformWindows();
// RenderPlatformWindowsDefault();
// glfwMakeContextCurrent(backupCurrentContext);
// }
} }
void void

View File

@ -2,9 +2,9 @@
cmake_minimum_required(VERSION 3.13) cmake_minimum_required(VERSION 3.13)
add_executable(triangle triangle.cpp) add_executable(triangle "triangle.cpp")
add_shader(triangle shader/triangle.vert.glsl) add_shader(triangle "shader/triangle.vert.glsl")
add_shader(triangle shader/triangle.frag.glsl) add_shader(triangle "shader/triangle.frag.glsl")
target_link_libraries(triangle PRIVATE aster_core) target_link_libraries(triangle PRIVATE aster_core)
target_link_libraries(triangle PRIVATE util_helper) target_link_libraries(triangle PRIVATE util_helper)

View File

@ -14,6 +14,8 @@
#include "pipeline.h" #include "pipeline.h"
#include "swapchain.h" #include "swapchain.h"
#include "timer.h"
#include "helpers.h" #include "helpers.h"
#include <EASTL/array.h> #include <EASTL/array.h>
@ -74,8 +76,8 @@ main(int, char **)
{ {
MIN_LOG_LEVEL(Logger::LogType::eInfo); MIN_LOG_LEVEL(Logger::LogType::eInfo);
Context context = {"Triangle", VERSION};
Window window = {"Triangle (Aster)", {640, 480}}; Window window = {"Triangle (Aster)", {640, 480}};
Context context = {&window, "Triangle", VERSION};
Surface surface = {&context, &window, "Primary"}; Surface surface = {&context, &window, "Primary"};
PhysicalDevices physicalDevices = {&surface, &context}; PhysicalDevices physicalDevices = {&surface, &context};

View File

@ -4,9 +4,9 @@ cmake_minimum_required(VERSION 3.13)
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fsanitize=address") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fsanitize=address")
add_executable(box box.cpp stb_image.h) add_executable(box "box.cpp" "stb_image.h")
add_shader(box shader/box.vert.glsl) add_shader(box "shader/box.vert.glsl")
add_shader(box shader/box.frag.glsl) add_shader(box "shader/box.frag.glsl")
target_link_libraries(box PRIVATE aster_core) target_link_libraries(box PRIVATE aster_core)
target_link_libraries(box PRIVATE util_helper) target_link_libraries(box PRIVATE util_helper)

View File

@ -19,6 +19,7 @@
#include "frame.h" #include "frame.h"
#include "image.h" #include "image.h"
#include "stb_image.h" #include "stb_image.h"
#include "timer.h"
#include <EASTL/array.h> #include <EASTL/array.h>
@ -115,8 +116,8 @@ main(int, char **)
{ {
MIN_LOG_LEVEL(Logger::LogType::eInfo); MIN_LOG_LEVEL(Logger::LogType::eInfo);
Context context = {"Box", VERSION};
Window window = {"Box (Aster)", {640, 480}}; Window window = {"Box (Aster)", {640, 480}};
Context context = {&window, "Box", VERSION};
Surface surface = {&context, &window, "Primary"}; Surface surface = {&context, &window, "Primary"};
PhysicalDevices physicalDevices = {&surface, &context}; PhysicalDevices physicalDevices = {&surface, &context};

View File

@ -5,28 +5,28 @@ cmake_minimum_required(VERSION 3.13)
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fsanitize=address") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fsanitize=address")
find_path(TINYGLTF_INCLUDE_DIRS "tiny_gltf.h") find_path(TINYGLTF_INCLUDE_DIRS "tiny_gltf.h")
add_executable(model_render model_render.cpp add_executable(model_render "model_render.cpp"
pipeline_utils.cpp "pipeline_utils.cpp"
pipeline_utils.h "pipeline_utils.h"
asset_loader.cpp "asset_loader.cpp"
asset_loader.h "asset_loader.h"
light_manager.cpp "light_manager.cpp"
light_manager.h "light_manager.h"
gpu_resource_manager.cpp "gpu_resource_manager.cpp"
gpu_resource_manager.h "gpu_resource_manager.h"
nodes.cpp "nodes.cpp"
nodes.h "nodes.h"
ibl_helpers.cpp "ibl_helpers.cpp"
ibl_helpers.h) "ibl_helpers.h")
add_shader(model_render shader/model.vs.hlsl) add_shader(model_render "shader/model.vs.hlsl")
add_shader(model_render shader/model.ps.hlsl) add_shader(model_render "shader/model.ps.hlsl")
add_shader(model_render shader/eqrect_to_cube.cs.hlsl) add_shader(model_render "shader/eqrect_to_cube.cs.hlsl")
add_shader(model_render shader/background.vs.hlsl) add_shader(model_render "shader/background.vs.hlsl")
add_shader(model_render shader/background.ps.hlsl) add_shader(model_render "shader/background.ps.hlsl")
add_shader(model_render shader/diffuse_irradiance.cs.hlsl) add_shader(model_render "shader/diffuse_irradiance.cs.hlsl")
add_shader(model_render shader/prefilter.cs.hlsl) add_shader(model_render "shader/prefilter.cs.hlsl")
add_shader(model_render shader/brdf_lut.cs.hlsl) add_shader(model_render "shader/brdf_lut.cs.hlsl")
target_link_libraries(model_render PRIVATE aster_core) target_link_libraries(model_render PRIVATE aster_core)
target_link_libraries(model_render PRIVATE util_helper) target_link_libraries(model_render PRIVATE util_helper)

View File

@ -13,6 +13,7 @@
#include "pipeline.h" #include "pipeline.h"
#include "swapchain.h" #include "swapchain.h"
#include "window.h" #include "window.h"
#include "timer.h"
#include "frame.h" #include "frame.h"
#include "helpers.h" #include "helpers.h"
@ -22,6 +23,7 @@
#include "gpu_resource_manager.h" #include "gpu_resource_manager.h"
#include "gui.h" #include "gui.h"
#include "ibl_helpers.h" #include "ibl_helpers.h"
#include "imgui_impl_sdl3.h"
#include "pipeline_utils.h" #include "pipeline_utils.h"
#include <EASTL/array.h> #include <EASTL/array.h>
@ -133,8 +135,8 @@ main(int, char **)
{ {
MIN_LOG_LEVEL(Logger::LogType::eInfo); MIN_LOG_LEVEL(Logger::LogType::eInfo);
Context context = {"ModelRender", VERSION};
Window window = {"ModelRender (Aster)", {INIT_WIDTH, INIT_HEIGHT}}; Window window = {"ModelRender (Aster)", {INIT_WIDTH, INIT_HEIGHT}};
Context context = {&window, "ModelRender", VERSION};
Surface surface = {&context, &window, "Primary Surface"}; Surface surface = {&context, &window, "Primary Surface"};
PhysicalDevices physicalDevices = {&surface, &context}; PhysicalDevices physicalDevices = {&surface, &context};
@ -427,10 +429,23 @@ main(int, char **)
Time::Init(); Time::Init();
INFO("Starting loop"); INFO("Starting loop");
while (window.Poll()) bool isRunning = true;
while (isRunning)
{ {
Time::Update(); Time::Update();
// TODO: This needs fixing (after callbacks)
SDL_Event event;
while (SDL_PollEvent(&event))
{
if (event.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED)
{
isRunning = false;
break;
}
ImGui_ImplSDL3_ProcessEvent(&event);
}
gui::StartBuild(); gui::StartBuild();
gui::Begin("Settings"); gui::Begin("Settings");
@ -499,7 +514,7 @@ main(int, char **)
gui::PopItemWidth(); gui::PopItemWidth();
if (gui::Button("Exit")) if (gui::Button("Exit"))
{ {
window.RequestExit(); isRunning = false;
} }
gui::End(); gui::End();

View File

@ -7,24 +7,24 @@ find_path(TINYGLTF_INCLUDE_DIRS "tiny_gltf.h")
find_package(EnTT REQUIRED CONFIG) find_package(EnTT REQUIRED CONFIG)
add_executable(scene_render main.cpp add_executable(scene_render "main.cpp"
render_resource_manager.cpp render_resource_manager.h "render_resource_manager.cpp" "render_resource_manager.h"
asset_loader.cpp asset_loader.h "asset_loader.cpp" "asset_loader.h"
pipeline_utils.cpp pipeline_utils.h "pipeline_utils.cpp" "pipeline_utils.h"
core_components.h "core_components.h"
ecs_adapter.h "ecs_adapter.h"
camera.h "camera.h"
ibl_helpers.cpp ibl_helpers.h "ibl_helpers.cpp" "ibl_helpers.h"
light_manager.cpp light_manager.h) "light_manager.cpp" "light_manager.h")
add_shader(scene_render shader/model.frag.glsl) add_shader(scene_render "shader/model.frag.glsl")
add_shader(scene_render shader/model.vert.glsl) add_shader(scene_render "shader/model.vert.glsl")
add_shader(scene_render shader/eqrect_to_cube.cs.hlsl) add_shader(scene_render "shader/eqrect_to_cube.cs.hlsl")
add_shader(scene_render shader/diffuse_irradiance.cs.hlsl) add_shader(scene_render "shader/diffuse_irradiance.cs.hlsl")
add_shader(scene_render shader/prefilter.cs.hlsl) add_shader(scene_render "shader/prefilter.cs.hlsl")
add_shader(scene_render shader/brdf_lut.cs.hlsl) add_shader(scene_render "shader/brdf_lut.cs.hlsl")
add_shader(scene_render shader/background.vert.glsl) add_shader(scene_render "shader/background.vert.glsl")
add_shader(scene_render shader/background.frag.glsl) add_shader(scene_render "shader/background.frag.glsl")
target_link_libraries(scene_render PRIVATE aster_core) target_link_libraries(scene_render PRIVATE aster_core)
target_link_libraries(scene_render PRIVATE util_helper) target_link_libraries(scene_render PRIVATE util_helper)

View File

@ -10,6 +10,7 @@
#include "render_resource_manager.h" #include "render_resource_manager.h"
#include "swapchain.h" #include "swapchain.h"
#include "window.h" #include "window.h"
#include "timer.h"
#include "asset_loader.h" #include "asset_loader.h"
#include "camera.h" #include "camera.h"
@ -38,7 +39,7 @@ main(int, char *[])
MIN_LOG_LEVEL(Logger::LogType::eInfo); MIN_LOG_LEVEL(Logger::LogType::eInfo);
Window window = {"Scene Render [WIP] (Aster)", {INIT_WIDTH, INIT_HEIGHT}}; Window window = {"Scene Render [WIP] (Aster)", {INIT_WIDTH, INIT_HEIGHT}};
Context context = {"Scene Render [WIP]", VERSION}; Context context = {&window, "Scene Render [WIP]", VERSION};
Surface surface = {&context, &window, "Primary Surface"}; Surface surface = {&context, &window, "Primary Surface"};
PhysicalDevices physicalDevices = {&surface, &context}; PhysicalDevices physicalDevices = {&surface, &context};

2
vcpkg

@ -1 +1 @@
Subproject commit b27651341123a59f7187b42ef2bc476284afb310 Subproject commit 0ca64b4e1c70fa6d9f53b369b8f3f0843797c20c

View File

@ -1,7 +1,7 @@
{ {
"default-registry": { "default-registry": {
"kind": "git", "kind": "git",
"baseline": "b27651341123a59f7187b42ef2bc476284afb310", "baseline": "6f29f12e82a8293156836ad81cc9bf5af41fe836",
"repository": "https://github.com/microsoft/vcpkg" "repository": "https://github.com/microsoft/vcpkg"
}, },
"registries": [ "registries": [
@ -10,5 +10,8 @@
"location": "https://github.com/microsoft/vcpkg-ce-catalog/archive/refs/heads/main.zip", "location": "https://github.com/microsoft/vcpkg-ce-catalog/archive/refs/heads/main.zip",
"name": "microsoft" "name": "microsoft"
} }
],
"overlay-ports": [
"vcpkg-overlays"
] ]
} }

View File

@ -0,0 +1,305 @@
cmake_minimum_required(VERSION 3.16)
project(imgui CXX)
set(CMAKE_DEBUG_POSTFIX d)
if(APPLE)
set(CMAKE_CXX_STANDARD 11)
enable_language(OBJCXX)
endif()
add_library(${PROJECT_NAME} "")
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
target_include_directories(
${PROJECT_NAME}
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_SOURCE_DIR}/test-engine>"
$<INSTALL_INTERFACE:include>
)
target_sources(
${PROJECT_NAME}
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/imgui.cpp
${CMAKE_CURRENT_SOURCE_DIR}/imgui_demo.cpp
${CMAKE_CURRENT_SOURCE_DIR}/imgui_draw.cpp
${CMAKE_CURRENT_SOURCE_DIR}/imgui_tables.cpp
${CMAKE_CURRENT_SOURCE_DIR}/imgui_widgets.cpp
${CMAKE_CURRENT_SOURCE_DIR}/misc/cpp/imgui_stdlib.cpp
)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11)
if(IMGUI_BUILD_ALLEGRO5_BINDING)
find_package(Allegro CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE Allegro::allegro Allegro::allegro_ttf Allegro::allegro_font Allegro::allegro_main)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_allegro5.cpp)
endif()
if(IMGUI_BUILD_ANDROID_BINDING)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_android.cpp)
endif()
if(IMGUI_BUILD_DX9_BINDING)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx9.cpp)
endif()
if(IMGUI_BUILD_DX10_BINDING)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx10.cpp)
endif()
if(IMGUI_BUILD_DX11_BINDING)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx11.cpp)
endif()
if(IMGUI_BUILD_DX12_BINDING)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx12.cpp)
endif()
if(IMGUI_BUILD_GLFW_BINDING)
if(NOT EMSCRIPTEN)
find_package(glfw3 CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC glfw)
endif()
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glfw.cpp)
endif()
if(IMGUI_BUILD_GLUT_BINDING)
find_package(GLUT REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC GLUT::GLUT)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glut.cpp)
endif()
if(IMGUI_BUILD_METAL_BINDING)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_metal.mm)
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_metal.mm PROPERTIES COMPILE_FLAGS -fobjc-weak)
endif()
if(IMGUI_BUILD_OPENGL2_BINDING)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl2.cpp)
endif()
if(IMGUI_BUILD_OPENGL3_BINDING)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp)
endif()
if(IMGUI_BUILD_OSX_BINDING)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_osx.mm)
endif()
if(IMGUI_BUILD_SDL2_BINDING AND NOT (IMGUI_BUILD_SDL3_BINDING OR IMGUI_BUILD_SDL3_RENDERER_BINDING))
find_package(SDL2 CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC SDL2::SDL2)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdl2.cpp)
elseif(IMGUI_BUILD_SDL2_BINDING)
message(WARNING "Imgui: sdl2-binding backend not included. sdl2 features are mutually exclusive with sdl3 features with sdl3 taking priority.")
endif()
if(IMGUI_BUILD_SDL2_RENDERER_BINDING AND NOT (IMGUI_BUILD_SDL3_BINDING OR IMGUI_BUILD_SDL3_RENDERER_BINDING))
find_package(SDL2 CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC SDL2::SDL2)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdlrenderer2.cpp)
elseif(IMGUI_BUILD_SDL2_RENDERER_BINDING)
message(WARNING "Imgui: sdl2-renderer-binding backend not included. sdl2 features are mutually exclusive with sdl3 features with sdl3 taking priority.")
endif()
if(IMGUI_BUILD_SDL3_BINDING)
find_package(SDL3 CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC SDL3::SDL3)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdl3.cpp)
endif()
if(IMGUI_BUILD_SDL3_RENDERER_BINDING)
find_package(SDL3 CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC SDL3::SDL3)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdlrenderer3.cpp)
endif()
if(IMGUI_BUILD_VULKAN_BINDING)
find_package(Vulkan REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC Vulkan::Vulkan)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_vulkan.cpp)
endif()
if(IMGUI_BUILD_WIN32_BINDING)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_win32.cpp)
endif()
if(IMGUI_FREETYPE)
find_package(freetype CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC freetype)
target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/misc/freetype/imgui_freetype.cpp)
target_compile_definitions(${PROJECT_NAME} PUBLIC IMGUI_ENABLE_FREETYPE)
endif()
if(IMGUI_FREETYPE_LUNASVG)
find_package(unofficial-lunasvg CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC unofficial::lunasvg::lunasvg)
target_compile_definitions(${PROJECT_NAME} PUBLIC IMGUI_ENABLE_FREETYPE_LUNASVG)
endif()
if(IMGUI_USE_WCHAR32)
target_compile_definitions(${PROJECT_NAME} PUBLIC IMGUI_USE_WCHAR32)
endif()
if(IMGUI_TEST_ENGINE)
find_package(Stb REQUIRED)
target_include_directories(${PROJECT_NAME} PRIVATE ${Stb_INCLUDE_DIR})
target_sources(
${PROJECT_NAME}
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_capture_tool.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_context.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_coroutine.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_engine.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_exporters.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_perftool.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_ui.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_utils.cpp
)
endif()
list(REMOVE_DUPLICATES BINDINGS_SOURCES)
install(
TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}_target
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
foreach(BINDING_TARGET ${BINDING_TARGETS})
install(
TARGETS ${BINDING_TARGET}
EXPORT ${PROJECT_NAME}_target
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
endforeach()
if(NOT IMGUI_SKIP_HEADERS)
install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/imgui.h
${CMAKE_CURRENT_SOURCE_DIR}/imconfig.h
${CMAKE_CURRENT_SOURCE_DIR}/imgui_internal.h
${CMAKE_CURRENT_SOURCE_DIR}/imstb_textedit.h
${CMAKE_CURRENT_SOURCE_DIR}/imstb_rectpack.h
${CMAKE_CURRENT_SOURCE_DIR}/imstb_truetype.h
${CMAKE_CURRENT_SOURCE_DIR}/misc/cpp/imgui_stdlib.h
DESTINATION include
)
if(IMGUI_BUILD_ALLEGRO5_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_allegro5.h DESTINATION include)
endif()
if (IMGUI_BUILD_ANDROID_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_android.h DESTINATION include)
endif()
if(IMGUI_BUILD_DX9_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx9.h DESTINATION include)
endif()
if(IMGUI_BUILD_DX10_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx10.h DESTINATION include)
endif()
if(IMGUI_BUILD_DX11_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx11.h DESTINATION include)
endif()
if(IMGUI_BUILD_DX12_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx12.h DESTINATION include)
endif()
if(IMGUI_BUILD_GLFW_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glfw.h DESTINATION include)
endif()
if(IMGUI_BUILD_GLUT_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glut.h DESTINATION include)
endif()
if(IMGUI_BUILD_METAL_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_metal.h DESTINATION include)
endif()
if(IMGUI_BUILD_OPENGL2_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl2.h DESTINATION include)
endif()
if(IMGUI_BUILD_OPENGL3_BINDING)
install(
FILES
${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl3.h
${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl3_loader.h
DESTINATION
include
)
endif()
if(IMGUI_BUILD_OSX_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_osx.h DESTINATION include)
endif()
if(IMGUI_BUILD_SDL2_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdl2.h DESTINATION include)
endif()
if(IMGUI_BUILD_SDL2_RENDERER_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdlrenderer2.h DESTINATION include)
endif()
if(IMGUI_BUILD_SDL3_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdl3.h DESTINATION include)
endif()
if(IMGUI_BUILD_SDL3_RENDERER_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdlrenderer3.h DESTINATION include)
endif()
if(IMGUI_BUILD_VULKAN_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_vulkan.h DESTINATION include)
endif()
if(IMGUI_BUILD_WIN32_BINDING)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_win32.h DESTINATION include)
endif()
if(IMGUI_FREETYPE)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/misc/freetype/imgui_freetype.h DESTINATION include)
endif()
if(IMGUI_TEST_ENGINE)
install(
FILES
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_capture_tool.h
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_context.h
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_coroutine.h
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_engine.h
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_exporters.h
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_imconfig.h
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_internal.h
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_perftool.h
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_ui.h
${CMAKE_CURRENT_SOURCE_DIR}/test-engine/imgui_te_utils.h
DESTINATION
include
)
endif()
endif()
include(CMakePackageConfigHelpers)
configure_package_config_file(imgui-config.cmake.in imgui-config.cmake INSTALL_DESTINATION share/imgui)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/imgui-config.cmake DESTINATION share/imgui)
install(
EXPORT ${PROJECT_NAME}_target
NAMESPACE ${PROJECT_NAME}::
FILE ${PROJECT_NAME}-targets.cmake
DESTINATION share/${PROJECT_NAME}
)

View File

@ -0,0 +1,47 @@
cmake_policy(SET CMP0012 NEW)
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
if (@IMGUI_BUILD_GLFW_BINDING@)
if (NOT "@EMSCRIPTEN@")
find_dependency(glfw3 CONFIG)
endif()
endif()
if (@IMGUI_BUILD_GLUT_BINDING@)
find_dependency(GLUT)
endif()
if ((@IMGUI_BUILD_SDL2_BINDING@ OR @IMGUI_BUILD_SDL2_RENDERER_BINDING@) AND NOT (@IMGUI_BUILD_SDL3_BINDING@ OR @IMGUI_BUILD_SDL3_RENDERER_BINDING@))
find_dependency(SDL2 CONFIG)
elseif(@IMGUI_BUILD_SDL2_BINDING@ OR @IMGUI_BUILD_SDL2_RENDERER_BINDING@)
message(WARNING "Imgui: sdl2 dependency not enforced. sdl2 features are mutually exclusive with sdl3 features with sdl3 taking priority.")
endif()
if (@IMGUI_BUILD_SDL3_BINDING@ OR @IMGUI_BUILD_SDL3_RENDERER_BINDING@)
find_dependency(SDL3 CONFIG)
endif()
if (@IMGUI_BUILD_VULKAN_BINDING@)
find_dependency(Vulkan)
endif()
if (@IMGUI_FREETYPE@)
find_dependency(freetype CONFIG)
endif()
if (@IMGUI_FREETYPE_LUNASVG@)
find_dependency(unofficial-lunasvg CONFIG)
endif()
if (@IMGUI_BUILD_ALLEGRO5_BINDING@)
find_dependency(Allegro CONFIG)
endif()
if (@IMGUI_TEST_ENGINE@)
find_dependency(Stb)
endif()
include("${CMAKE_CURRENT_LIST_DIR}/imgui-targets.cmake")

View File

@ -0,0 +1,105 @@
vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
if ("docking-experimental" IN_LIST FEATURES)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO ocornut/imgui
REF "v${VERSION}-docking"
SHA512 5d1849867475c24dea51254bde945e919938b4fa2aac218e35a9371d3f48d8fc486ac4e459e9a0c3d36526f18972ac3ac292581aa831ca54efb3d640c6e156b1
HEAD_REF docking
)
else()
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO ocornut/imgui
REF "v${VERSION}"
SHA512 eef35ba9f7e39ddeff3e2df0eef77d3cd8602115cb42a6fad274aecf4d5e6922c43ea4fab37908729df00a3d3e69c5000b21b46b23ed18891fb899e6b9807feb
HEAD_REF master
)
endif()
file(COPY "${CMAKE_CURRENT_LIST_DIR}/imgui-config.cmake.in" DESTINATION "${SOURCE_PATH}")
file(COPY "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt" DESTINATION "${SOURCE_PATH}")
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
FEATURES
allegro5-binding IMGUI_BUILD_ALLEGRO5_BINDING
android-binding IMGUI_BUILD_ANDROID_BINDING
dx9-binding IMGUI_BUILD_DX9_BINDING
dx10-binding IMGUI_BUILD_DX10_BINDING
dx11-binding IMGUI_BUILD_DX11_BINDING
dx12-binding IMGUI_BUILD_DX12_BINDING
glfw-binding IMGUI_BUILD_GLFW_BINDING
glut-binding IMGUI_BUILD_GLUT_BINDING
metal-binding IMGUI_BUILD_METAL_BINDING
opengl2-binding IMGUI_BUILD_OPENGL2_BINDING
opengl3-binding IMGUI_BUILD_OPENGL3_BINDING
osx-binding IMGUI_BUILD_OSX_BINDING
sdl3-binding IMGUI_BUILD_SDL3_BINDING
sdl3-renderer-binding IMGUI_BUILD_SDL3_RENDERER_BINDING
vulkan-binding IMGUI_BUILD_VULKAN_BINDING
win32-binding IMGUI_BUILD_WIN32_BINDING
freetype IMGUI_FREETYPE
freetype-lunasvg IMGUI_FREETYPE_LUNASVG
wchar32 IMGUI_USE_WCHAR32
test-engine IMGUI_TEST_ENGINE
)
if ("libigl-imgui" IN_LIST FEATURES)
vcpkg_download_distfile(
IMGUI_FONTS_DROID_SANS_H
URLS
https://raw.githubusercontent.com/libigl/libigl-imgui/c3efb9b62780f55f9bba34561f79a3087e057fc0/imgui_fonts_droid_sans.h
FILENAME "imgui_fonts_droid_sans.h"
SHA512
abe9250c9a5989e0a3f2285bbcc83696ff8e38c1f5657c358e6fe616ff792d3c6e5ff2fa23c2eeae7d7b307392e0dc798a95d14f6d10f8e9bfbd7768d36d8b31
)
file(INSTALL "${IMGUI_FONTS_DROID_SANS_H}" DESTINATION "${CURRENT_PACKAGES_DIR}/include")
endif()
if ("test-engine" IN_LIST FEATURES)
vcpkg_from_github(
OUT_SOURCE_PATH TEST_ENGINE_SOURCE_PATH
REPO ocornut/imgui_test_engine
REF "v${VERSION}"
SHA512 b18d64732629f01eb4153c7f7dbc2184d7ad1d63d0dc1b4f42120209c673f20ebc202bf7bc6ab27ae1a23a9437d40cc9f77c3e100e0e6de3ed6eb0087c41b7a4
HEAD_REF master
)
file(REMOVE_RECURSE "${SOURCE_PATH}/test-engine")
file(COPY "${TEST_ENGINE_SOURCE_PATH}/imgui_test_engine/" DESTINATION "${SOURCE_PATH}/test-engine")
file(REMOVE_RECURSE "${SOURCE_PATH}/test-engine/thirdparty/stb")
vcpkg_replace_string("${SOURCE_PATH}/test-engine/imgui_capture_tool.cpp" "//#define IMGUI_STB_IMAGE_WRITE_FILENAME \"my_folder/stb_image_write.h\"" "#define IMGUI_STB_IMAGE_WRITE_FILENAME <stb_image_write.h>\n#define STB_IMAGE_WRITE_STATIC")
vcpkg_replace_string("${SOURCE_PATH}/imconfig.h" "#pragma once" "#pragma once\n\n#include \"imgui_te_imconfig.h\"")
vcpkg_replace_string("${SOURCE_PATH}/test-engine/imgui_te_imconfig.h" "#define IMGUI_TEST_ENGINE_ENABLE_COROUTINE_STDTHREAD_IMPL 0" "#define IMGUI_TEST_ENGINE_ENABLE_COROUTINE_STDTHREAD_IMPL 1")
endif()
vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
${FEATURE_OPTIONS}
OPTIONS_DEBUG
-DIMGUI_SKIP_HEADERS=ON
)
vcpkg_cmake_install()
if ("freetype" IN_LIST FEATURES)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/imconfig.h" "//#define IMGUI_ENABLE_FREETYPE\n" "#define IMGUI_ENABLE_FREETYPE\n")
endif()
if ("freetype-lunasvg" IN_LIST FEATURES)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/imconfig.h" "//#define IMGUI_ENABLE_FREETYPE_LUNASVG" "#define IMGUI_ENABLE_FREETYPE_LUNASVG")
endif()
if ("wchar32" IN_LIST FEATURES)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/imconfig.h" "//#define IMGUI_USE_WCHAR32" "#define IMGUI_USE_WCHAR32")
endif()
vcpkg_copy_pdbs()
vcpkg_cmake_config_fixup()
if ("test-engine" IN_LIST FEATURES)
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE.txt" "${SOURCE_PATH}/test-engine/LICENSE.txt")
else()
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE.txt")
endif()

View File

@ -0,0 +1,133 @@
{
"name": "imgui",
"version": "1.91.6",
"port-version": 1,
"description": "Bloat-free Immediate Mode Graphical User interface for C++ with minimal dependencies.",
"homepage": "https://github.com/ocornut/imgui",
"license": "MIT",
"dependencies": [
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
}
],
"features": {
"allegro5-binding": {
"description": "Make available Allegro5 binding",
"dependencies": [
"allegro5"
]
},
"android-binding": {
"description": "Make available Android native app support",
"supports": "android"
},
"docking-experimental": {
"description": "Build with docking support"
},
"dx10-binding": {
"description": "Make available DirectX10 binding",
"supports": "windows & !uwp"
},
"dx11-binding": {
"description": "Make available DirectX11 binding",
"supports": "windows & !uwp"
},
"dx12-binding": {
"description": "Make available DirectX12 binding",
"supports": "!x86 & windows & !uwp"
},
"dx9-binding": {
"description": "Make available DirectX9 binding",
"supports": "windows & !uwp"
},
"freetype": {
"description": "Build font atlases using FreeType instead of stb_truetype",
"dependencies": [
"freetype"
]
},
"freetype-lunasvg": {
"description": "Add support to render OpenType SVG fonts using LunaSVG",
"dependencies": [
{
"name": "imgui",
"features": [
"freetype"
]
},
"lunasvg"
]
},
"glfw-binding": {
"description": "Make available GLFW binding",
"dependencies": [
{
"name": "glfw3",
"platform": "!emscripten"
}
]
},
"glut-binding": {
"description": "Make available Glut binding",
"dependencies": [
"freeglut"
]
},
"libigl-imgui": {
"description": "Install the libigl-imgui headers"
},
"metal-binding": {
"description": "Make available Metal binding",
"supports": "osx"
},
"opengl2-binding": {
"description": "Make available OpenGL (legacy) binding",
"supports": "!uwp"
},
"opengl3-binding": {
"description": "Make available OpenGL3/ES/ES2 (modern) binding"
},
"osx-binding": {
"description": "Make available OSX binding",
"supports": "osx"
},
"sdl3-binding": {
"description": "Make available SDL3 binding",
"dependencies": [
"sdl3"
]
},
"sdl3-renderer-binding": {
"description": "Make available SDL3 Renderer binding",
"dependencies": [
"sdl3"
]
},
"test-engine": {
"description": "Build test engine",
"supports": "!uwp",
"license": null,
"dependencies": [
"stb"
]
},
"vulkan-binding": {
"description": "Make available Vulkan binding",
"dependencies": [
"vulkan"
]
},
"wchar32": {
"description": "Use WCHAR32 instead of WCHAR16"
},
"win32-binding": {
"description": "Make available Win32 binding",
"supports": "windows & !uwp"
}
}
}

View File

@ -1,20 +1,26 @@
{ {
"dependencies": [ "dependencies": [
"eastl", "eastl",
"entt",
"fmt", "fmt",
"glfw3",
"glm", "glm",
{ {
"name": "imgui", "name": "imgui",
"features": [ "features": [
"docking-experimental", "docking-experimental",
"glfw-binding", "glfw-binding",
"vulkan-binding" "vulkan-binding",
"sdl3-binding"
] ]
}, },
"scottt-debugbreak", "scottt-debugbreak",
"tinygltf", "tinygltf",
"vulkan-memory-allocator", "vulkan-memory-allocator",
"entt" {
"name": "sdl3",
"features": [
"vulkan"
]
}
] ]
} }