[Feature]: Add WebGPU rendering backend#1
Conversation
LOGS: Code I use: #include "optikos.hpp"
int main()
{
Logger::add_logger("log");
Optikos::Optikos app("Hello", 800, 480);
auto btn = std::make_unique<Optikos::Button>(120, 30, Optikos::Vec2(20, 20), "Click me");
btn->setEvent([]() { std::cout << "Clicked!\n"; });
app.addWidget(1, std::move(btn));
while (!app.should_close())
{
app.begin();
app.end();
}
}```
```cmake
cmake_minimum_required(VERSION 3.20)
project(TestApp LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# set(OPTIKOS_RENDERER "OPENGL" CACHE STRING "" FORCE)
set(OPTIKOS_RENDERER "WEBGPU" CACHE STRING "" FORCE)
# set(OPTIKOS_RENDERER "VULKAN" CACHE STRING "" FORCE)
set(OPTIKOS_PLATFORM "GLFW" CACHE STRING "" FORCE)
set(OPTIKOS_INPUT "GLFW" CACHE STRING "" FORCE)
find_package(glfw3 CONFIG REQUIRED)
if(OPTIKOS_RENDERER STREQUAL "VULKAN")
find_package(Vulkan REQUIRED MODULE)
find_package(unofficial-shaderc CONFIG REQUIRED)
else()
find_package(glad CONFIG REQUIRED)
endif()
#include(FetchContent)
#FetchContent_Declare(
# Optikos
# GIT_REPOSITORY https://github.com/IlanVinograd/Optikos
# GIT_TAG main
#)
#FetchContent_MakeAvailable(Optikos)
add_subdirectory("C:/Users/ilanv/Optikos" optikos-build)
add_executable(TestApp main.cpp)
target_link_libraries(TestApp PRIVATE
Optikos::Optikos
glfw
)
if(OPTIKOS_RENDERER STREQUAL "VULKAN")
target_link_libraries(TestApp PRIVATE
Vulkan::Vulkan
unofficial::shaderc::shaderc
)
else()
target_link_libraries(TestApp PRIVATE
glad::glad
)
endif()
target_compile_definitions(TestApp PRIVATE
OPTIKOS_RES_DIR="${optikos_SOURCE_DIR}/res/"
)
target_compile_definitions(TestApp PRIVATE
OPTIKOS_RES_DIR="C:/Users/ilanv/Optikos/res/"
)
option(ENABLE_GPU_PROFILING "Enable GPU profiling" OFF)
if(ENABLE_GPU_PROFILING)
target_compile_definitions(TestApp PRIVATE ENABLE_GPU_PROFILING)
target_compile_definitions(Optikos PRIVATE ENABLE_GPU_PROFILING)
message(STATUS "GPU Profiling: ON")
endif()
optikos_copy_resources(TestApp) |
| #endif | ||
|
|
||
| #include "optikos.hpp" | ||
| #include <memory> |
There was a problem hiding this comment.
Add the following to CMake: if(WIN32)
add_custom_command(TARGET MyApp POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_RUNTIME_DLLS:MyApp>
$<TARGET_FILE_DIR:MyApp>
)
endif()This copies the DLLs that are needed for the build to the directory where the exe file located. P.S. replace |
cmake_minimum_required(VERSION 3.20)
project(TestApp LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# set(OPTIKOS_RENDERER "OPENGL" CACHE STRING "" FORCE)
set(OPTIKOS_RENDERER "WEBGPU" CACHE STRING "" FORCE)
# set(OPTIKOS_RENDERER "VULKAN" CACHE STRING "" FORCE)
set(OPTIKOS_PLATFORM "GLFW" CACHE STRING "" FORCE)
set(OPTIKOS_INPUT "GLFW" CACHE STRING "" FORCE)
find_package(glfw3 CONFIG REQUIRED)
if(OPTIKOS_RENDERER STREQUAL "VULKAN")
find_package(Vulkan REQUIRED MODULE)
find_package(unofficial-shaderc CONFIG REQUIRED)
else()
find_package(glad CONFIG REQUIRED)
endif()
#include(FetchContent)
#FetchContent_Declare(
# Optikos
# GIT_REPOSITORY https://github.com/IlanVinograd/Optikos
# GIT_TAG main
#)
#FetchContent_MakeAvailable(Optikos)
add_subdirectory("C:/Users/ilanv/Optikos" optikos-build)
add_executable(TestApp main.cpp)
target_link_libraries(TestApp PRIVATE
Optikos::Optikos
glfw
)
if(OPTIKOS_RENDERER STREQUAL "VULKAN")
target_link_libraries(TestApp PRIVATE
Vulkan::Vulkan
unofficial::shaderc::shaderc
)
else()
target_link_libraries(TestApp PRIVATE
glad::glad
)
endif()
target_compile_definitions(TestApp PRIVATE
OPTIKOS_RES_DIR="${optikos_SOURCE_DIR}/res/"
)
target_compile_definitions(TestApp PRIVATE
OPTIKOS_RES_DIR="C:/Users/ilanv/Optikos/res/"
)
option(ENABLE_GPU_PROFILING "Enable GPU profiling" OFF)
if(ENABLE_GPU_PROFILING)
target_compile_definitions(TestApp PRIVATE ENABLE_GPU_PROFILING)
target_compile_definitions(Optikos PRIVATE ENABLE_GPU_PROFILING)
message(STATUS "GPU Profiling: ON")
endif()
optikos_copy_resources(TestApp)
if(WIN32)
add_custom_command(
TARGET TestApp POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_RUNTIME_DLLS:TestApp>
$<TARGET_FILE_DIR:TestApp>
COMMAND_EXPAND_LISTS
)
endif()Same: Warning: Backend validation enabled but Dawn was not built with DAWN_ENABLE_VULKAN_VALIDATION_LAYERS. |
cmake_minimum_required(VERSION 3.20)
project(TestApp LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# set(OPTIKOS_RENDERER "OPENGL" CACHE STRING "" FORCE)
set(OPTIKOS_RENDERER "WEBGPU" CACHE STRING "" FORCE)
# set(OPTIKOS_RENDERER "VULKAN" CACHE STRING "" FORCE)
set(OPTIKOS_PLATFORM "GLFW" CACHE STRING "" FORCE)
set(OPTIKOS_INPUT "GLFW" CACHE STRING "" FORCE)
find_package(glfw3 CONFIG REQUIRED)
if(OPTIKOS_RENDERER STREQUAL "VULKAN")
find_package(Vulkan REQUIRED MODULE)
find_package(unofficial-shaderc CONFIG REQUIRED)
else()
find_package(glad CONFIG REQUIRED)
endif()
#include(FetchContent)
#FetchContent_Declare(
# Optikos
# GIT_REPOSITORY https://github.com/IlanVinograd/Optikos
# GIT_TAG main
#)
#FetchContent_MakeAvailable(Optikos)
add_subdirectory("C:/Users/ilanv/Optikos" optikos-build)
add_executable(TestApp main.cpp)
target_link_libraries(TestApp PRIVATE
Optikos::Optikos
glfw
)
if(OPTIKOS_RENDERER STREQUAL "VULKAN")
target_link_libraries(TestApp PRIVATE
Vulkan::Vulkan
unofficial::shaderc::shaderc
)
else()
target_link_libraries(TestApp PRIVATE
glad::glad
)
endif()
target_compile_definitions(TestApp PRIVATE
OPTIKOS_RES_DIR="${optikos_SOURCE_DIR}/res/"
)
target_compile_definitions(TestApp PRIVATE
OPTIKOS_RES_DIR="C:/Users/ilanv/Optikos/res/"
)
option(ENABLE_GPU_PROFILING "Enable GPU profiling" OFF)
if(ENABLE_GPU_PROFILING)
target_compile_definitions(TestApp PRIVATE ENABLE_GPU_PROFILING)
target_compile_definitions(Optikos PRIVATE ENABLE_GPU_PROFILING)
message(STATUS "GPU Profiling: ON")
endif()
optikos_copy_resources(TestApp)
if(WIN32 AND VCPKG_TOOLCHAIN)
set(VCPKG_BIN_DIR "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin")
set(VCPKG_DEBUG_BIN_DIR "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/bin")
add_custom_command(
TARGET TestApp POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<IF:$<CONFIG:Debug>,${VCPKG_DEBUG_BIN_DIR}/dxcompiler.dll,${VCPKG_BIN_DIR}/dxcompiler.dll>"
"$<IF:$<CONFIG:Debug>,${VCPKG_DEBUG_BIN_DIR}/dxil.dll,${VCPKG_BIN_DIR}/dxil.dll>"
$<TARGET_FILE_DIR:TestApp>
VERBATIM
)
endif() |
Description
WebGPU is a next-generation graphics API that acts as a modern, cross-platform abstraction layer over low-level native backends like DirectX 12, Vulkan, Metal, OpenGL, and OpenGL ES.
What's new
IRendererandIShaderinterfaces for the new backend.