This commit is contained in:
2025-02-05 10:17:13 +08:00
parent 1b408149d0
commit 2925185c4f
8 changed files with 53 additions and 120 deletions

View File

@@ -1,5 +1,6 @@
cmake_minimum_required(VERSION 3.15) cmake_minimum_required(VERSION 3.15)
cmake_policy(SET CMP0167 NEW) cmake_policy(SET CMP0167 NEW)
project(aorii LANGUAGES C CXX) project(aorii LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 26) set(CMAKE_CXX_STANDARD 26)
if (APPLE) if (APPLE)
@@ -38,7 +39,6 @@ else ()
add_definitions(-DDEBUG=0) add_definitions(-DDEBUG=0)
endif () endif ()
add_subdirectory(third_party/LLGL)
add_subdirectory(third_party/msdfgen) add_subdirectory(third_party/msdfgen)
add_subdirectory(src/core) add_subdirectory(src/core)
add_subdirectory(src/widget) add_subdirectory(src/widget)

View File

@@ -2,72 +2,72 @@
function(add_os_definitions target) function(add_os_definitions target)
# 初始化所有平台宏为 0 # 初始化所有平台宏为 0
set(PLATFORMS WINDOWS MACOS LINUX FREEBSD IOS ANDROID) set(PLATFORMS AORII_WINDOWS AORII_MACOS AORII_LINUX AORII_FREEBSD AORII_IOS AORII_ANDROID)
# 检测操作系统并设置相应的宏为 1 # 检测操作系统并设置相应的宏为 1
if(WIN32) if(WIN32)
target_compile_definitions(${target} PRIVATE WINDOWS=1) target_compile_definitions(${target} PUBLIC AORII_WINDOWS=1)
message(STATUS "Detected Windows operating system") message(STATUS "Detected Windows operating system")
list(REMOVE_ITEM PLATFORMS WINDOWS) list(REMOVE_ITEM PLATFORMS AORII_WINDOWS)
elseif(APPLE AND UNIX) elseif(APPLE AND UNIX)
target_compile_definitions(${target} PRIVATE MACOS=1) target_compile_definitions(${target} PUBLIC AORII_MACOS=1)
message(STATUS "Detected macOS operating system") message(STATUS "Detected macOS operating system")
list(REMOVE_ITEM PLATFORMS MACOS) list(REMOVE_ITEM PLATFORMS AORII_MACOS)
elseif(UNIX) elseif(UNIX)
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
target_compile_definitions(${target} PRIVATE LINUX=1) target_compile_definitions(${target} PUBLIC AORII_LINUX=1)
message(STATUS "Detected Linux operating system") message(STATUS "Detected Linux operating system")
list(REMOVE_ITEM PLATFORMS LINUX) list(REMOVE_ITEM PLATFORMS AORII_LINUX)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
target_compile_definitions(${target} PRIVATE FREEBSD=1) target_compile_definitions(${target} PUBLIC AORII_FREEBSD=1)
message(STATUS "Detected FreeBSD operating system") message(STATUS "Detected FreeBSD operating system")
list(REMOVE_ITEM PLATFORMS FREEBSD) list(REMOVE_ITEM PLATFORMS AORII_FREEBSD)
else() else()
message(WARNING "Detected unknown Unix-like operating system") message(WARNING "Detected unknown Unix-like operating system")
endif() endif()
elseif(ANDROID) elseif(ANDROID)
target_compile_definitions(${target} PRIVATE ANDROID=1) target_compile_definitions(${target} PUBLIC AORII_ANDROID=1)
message(STATUS "Detected Android operating system") message(STATUS "Detected Android operating system")
list(REMOVE_ITEM PLATFORMS ANDROID) list(REMOVE_ITEM PLATFORMS AORII_ANDROID)
elseif(IOS) elseif(IOS)
target_compile_definitions(${target} PRIVATE IOS=1) target_compile_definitions(${target} PUBLIC AORII_IOS=1)
message(STATUS "Detected iOS operating system") message(STATUS "Detected iOS operating system")
list(REMOVE_ITEM PLATFORMS IOS) list(REMOVE_ITEM PLATFORMS AORII_IOS)
else() else()
message(WARNING "Unknown operating system") message(WARNING "Unknown operating system")
endif() endif()
foreach(PLATFORM ${PLATFORMS}) foreach(PLATFORM ${PLATFORMS})
target_compile_definitions(${target} PRIVATE ${PLATFORM}=0) target_compile_definitions(${target} PUBLIC ${PLATFORM}=0)
endforeach() endforeach()
# 检测并设置架构宏 # 检测并设置架构宏
if(CMAKE_SIZEOF_VOID_P EQUAL 8) if(CMAKE_SIZEOF_VOID_P EQUAL 8)
target_compile_definitions(${target} PRIVATE ARCH_64BIT=1 ARCH_32BIT=0) target_compile_definitions(${target} PUBLIC AORII_ARCH_64BIT=1 AORII_ARCH_32BIT=0)
message(STATUS "Detected 64-bit architecture") message(STATUS "Detected 64-bit architecture")
else() else()
target_compile_definitions(${target} PRIVATE ARCH_64BIT=0 ARCH_32BIT=1) target_compile_definitions(${target} PUBLIC AORII_ARCH_64BIT=0 AORII_ARCH_32BIT=1)
message(STATUS "Detected 32-bit architecture") message(STATUS "Detected 32-bit architecture")
endif() endif()
# 设置通用的 UNIX 宏 # 设置通用的 UNIX 宏
if(UNIX) if(UNIX)
target_compile_definitions(${target} PRIVATE UNIX=1) target_compile_definitions(${target} PUBLIC AORII_UNIX=1)
else() else()
target_compile_definitions(${target} PRIVATE UNIX=0) target_compile_definitions(${target} PUBLIC AORII_UNIX=0)
endif() endif()
# 设置通用的 POSIX 宏 # 设置通用的 POSIX 宏
if(UNIX OR APPLE) if(UNIX OR APPLE)
target_compile_definitions(${target} PRIVATE POSIX=1) target_compile_definitions(${target} PUBLIC AORII_POSIX=1)
else() else()
target_compile_definitions(${target} PRIVATE POSIX=0) target_compile_definitions(${target} PUBLIC AORII_POSIX=0)
endif() endif()
# 设置IS_MOBILE宏 # 设置IS_MOBILE宏
if(ANDROID OR IOS) if(ANDROID OR IOS)
target_compile_definitions(${target} PRIVATE IS_MOBILE=1) target_compile_definitions(${target} PUBLIC AORII_IS_MOBILE=1)
else() else()
target_compile_definitions(${target} PRIVATE IS_MOBILE=0) target_compile_definitions(${target} PUBLIC AORII_IS_MOBILE=0)
endif() endif()
endfunction() endfunction()

View File

@@ -8,7 +8,7 @@
#include "window/renderer_window.h" #include "window/renderer_window.h"
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
aorii::init(renderer_api::metal); aorii::init(renderer_api::vulkan);
renderer_window::desc_type desc{}; renderer_window::desc_type desc{};
desc.resolution = { 1280, 1280 }; desc.resolution = { 1280, 1280 };

View File

@@ -5,6 +5,7 @@ find_package(Eigen3 REQUIRED)
find_package(spdlog REQUIRED) find_package(spdlog REQUIRED)
find_package(Boost REQUIRED) find_package(Boost REQUIRED)
find_package(Freetype REQUIRED) find_package(Freetype REQUIRED)
find_package(Vulkan REQUIRED)
if (APPLE) if (APPLE)
find_library(COCOA_LIBRARY Cocoa) find_library(COCOA_LIBRARY Cocoa)
@@ -14,7 +15,7 @@ set(RENDERER_SOURCES "")
retrieve_files(${CMAKE_CURRENT_SOURCE_DIR} RENDERER_SOURCES) retrieve_files(${CMAKE_CURRENT_SOURCE_DIR} RENDERER_SOURCES)
add_library(${PROJECT_NAME} STATIC ${RENDERER_SOURCES}) add_library(${PROJECT_NAME} STATIC ${RENDERER_SOURCES})
target_link_libraries(${PROJECT_NAME} PUBLIC Freetype::Freetype harfbuzz::harfbuzz Eigen3::Eigen spdlog::spdlog msdfgen-full Boost::boost LLGL) target_link_libraries(${PROJECT_NAME} PUBLIC Freetype::Freetype harfbuzz::harfbuzz Eigen3::Eigen spdlog::spdlog msdfgen-full Boost::boost Vulkan::Vulkan)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_definitions(${PROJECT_NAME} PRIVATE NOMINMAX) target_compile_definitions(${PROJECT_NAME} PRIVATE NOMINMAX)
add_os_definitions(${PROJECT_NAME}) add_os_definitions(${PROJECT_NAME})

View File

@@ -18,10 +18,7 @@ using time_type = decltype(std::chrono::high_resolution_clock::now());
std::chrono::duration<double> delta_time = {}; std::chrono::duration<double> delta_time = {};
time_type begin_time = {}; time_type begin_time = {};
time_type last_time = {}; time_type last_time = {};
LLGL::RenderSystemPtr s_renderer{}; aorii_renderer* s_renderer{};
LLGL::CommandBuffer* command_buffer{};
LLGL::CommandBuffer* static_command_buffer{};
LLGL::CommandBuffer* postprocess_command_buffer{};
// renderer_texture* renderer::load_image(const std::string& file_path, texture_format in_format) { // renderer_texture* renderer::load_image(const std::string& file_path, texture_format in_format) {
// int width, height, channels; // int width, height, channels;
@@ -76,9 +73,10 @@ LLGL::CommandBuffer* postprocess_command_buffer{};
// return texture; // return texture;
// } // }
bool aorii::init(renderer_api in_api) { bool aorii::init() {
create_renderer(in_api); create_renderer();
create_window_manager(); create_window_manager();
return true;
} }
void aorii::destroy() { void aorii::destroy() {
@@ -86,47 +84,17 @@ void aorii::destroy() {
destroy_renderer(); destroy_renderer();
} }
LLGL::RenderSystem* aorii::get_renderer() { aorii_renderer* aorii::get_renderer() {
return s_renderer.get(); return s_renderer;
} }
LLGL::CommandBuffer* aorii::get_command_buffer() { bool aorii::create_renderer() {
return command_buffer;
}
LLGL::CommandQueue* aorii::get_command_queue() {
return s_renderer->GetCommandQueue();
}
bool aorii::create_renderer(renderer_api api) {
if (!aorii_text::init_freetype()) if (!aorii_text::init_freetype())
return false; return false;
begin_time = std::chrono::high_resolution_clock::now(); begin_time = std::chrono::high_resolution_clock::now();
if (s_renderer) return true; if (s_renderer) return true;
LLGL::RenderSystemDescriptor desc; s_renderer = new aorii_renderer();
switch (api) {
case renderer_api::DX11:
desc.moduleName = "Direct3D11";
break;
case renderer_api::DX12:
desc.moduleName = "Direct3D12";
break;
case renderer_api::vulkan:
desc.moduleName = "Vulkan";
break;
case renderer_api::opengl:
desc.moduleName = "OpenGL";
break;
case renderer_api::metal:
desc.moduleName = "Metal";
break;
default: spdlog::critical("Failed to create renderer!");
assert(false);
}
s_renderer = LLGL::RenderSystem::Load(desc);
command_buffer = s_renderer->CreateCommandBuffer();
last_time = std::chrono::high_resolution_clock::now(); last_time = std::chrono::high_resolution_clock::now();
return s_renderer != nullptr; return s_renderer != nullptr;
} }
@@ -134,7 +102,7 @@ bool aorii::create_renderer(renderer_api api) {
void aorii::destroy_renderer() { void aorii::destroy_renderer() {
if (!s_renderer) return; if (!s_renderer) return;
LLGL::RenderSystem::Unload(std::move(s_renderer)); delete s_renderer;
aorii_text::destroy_freetype(); aorii_text::destroy_freetype();
} }
@@ -145,14 +113,8 @@ void aorii::update() {
delta_time = current_time - last_time; delta_time = current_time - last_time;
last_time = current_time; last_time = current_time;
LLGL::Surface::ProcessEvents();
s_window_manager->update(); s_window_manager->update();
command_buffer->Begin();
command_buffer->;
command_buffer->End();
get_command_queue()->Submit(*command_buffer);
std::this_thread::yield(); std::this_thread::yield();
} }

View File

@@ -1,36 +1,22 @@
#pragma once #pragma once
#include <chrono> #include <chrono>
#include <filesystem> #include <filesystem>
#include <vulkan/vulkan.hpp>
#include "LLGL/RenderSystem.h" class aorii_renderer {
public:
enum class renderer_api { private:
opengl,
opengl_es,
webgl,
vulkan,
DX11,
DX12,
metal
};
struct postprocess_render_pass {
LLGL::RenderTarget* input_render_target;
LLGL::RenderTarget* output_render_target;
LLGL::Texture* result_texture;
LLGL::PipelineState* pipeline_state;
LLGL::ResourceHeap* resource;
}; };
namespace aorii { namespace aorii {
bool init(renderer_api in_api); bool init();
void destroy(); void destroy();
LLGL::RenderSystem* get_renderer(); aorii_renderer* get_renderer();
LLGL::CommandBuffer* get_command_buffer();
LLGL::CommandQueue* get_command_queue();
bool create_renderer(renderer_api api); bool create_renderer();
void destroy_renderer(); void destroy_renderer();
void update(); void update();

View File

@@ -1,29 +1,12 @@
#pragma once #pragma once
#include "renderer/renderer.h" #include "renderer/renderer.h"
#include "LLGL/SwapChain.h"
#include "LLGL/Window.h"
#if MACOS #include "vulkan/vulkan.hpp"
#elif WINDOWS
#include "LLGL/Platform/Win32/Win32NativeHandle.h"
#elif LINUX
#include "LLGL/Platform/Linux/LinuxNativeHandle.h"
#endif
class renderer_window { class renderer_window {
friend class window_manager; friend class window_manager;
public: public:
using desc_type = LLGL::SwapChainDescriptor; explicit renderer_window();
#if IS_MOBILE
using surface_type = LLGL::Canvas;
using event_listener = LLGL::Canvas::EventListener;
#else
using surface_type = LLGL::Window;
using event_listener = LLGL::Window::EventListener;
#endif
explicit renderer_window(const desc_type& in_desc);
virtual ~renderer_window(); virtual ~renderer_window();
@@ -35,8 +18,8 @@ public:
[[nodiscard]] void* get_native_handle() const; [[nodiscard]] void* get_native_handle() const;
private: private:
surface_type* surface = nullptr; vk::SwapchainKHR swap_chain;
LLGL::SwapChain* swap_chain = nullptr; vk::SurfaceKHR surface;
}; };
inline renderer_window::renderer_window(const desc_type& in_desc) { inline renderer_window::renderer_window(const desc_type& in_desc) {
@@ -51,18 +34,20 @@ inline void renderer_window::set_title(const std::wstring& in_title) const {
} }
inline void renderer_window::close() const { inline void renderer_window::close() const {
#if !IS_MOBILE #if !AORII_IS_MOBILE
if (const auto window = get_surface()) { window->Show(false); } if (const auto window = get_surface()) { window->Show(false); }
#endif #endif
} }
#if !MACOS #if !AORII_MACOS
inline void* renderer_window::get_native_handle() const { inline void* renderer_window::get_native_handle() const {
#if !IS_MOBILE #if !AORII_IS_MOBILE
if (auto surface = get_surface()) { if (auto surface = get_surface()) {
#if WINDOWS LLGL::NativeHandle native_handle;
surface->GetNativeHandle(&native_handle, sizeof(LLGL::NativeHandle));
#if AORII_WINDOWS
return native_handle.window; return native_handle.window;
#elif LINUX #elif AORII_LINUX
return native_handle.window; return native_handle.window;
#endif #endif
} }

1
third_party/LLGL vendored

Submodule third_party/LLGL deleted from 75174b96df