diff --git a/CMakeLists.txt b/CMakeLists.txt index 91813ea..b28d5ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.20) -project(gamejam LANGUAGES C CXX) +project(rrmlui LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -11,49 +11,32 @@ endif() find_package(raylib REQUIRED) find_package(RmlUi REQUIRED) -add_executable(gamejam - src/main.cpp - src/Game.cpp - src/Application.cpp - src/Creature.cpp - src/Round.cpp +add_library(rmlui_backend STATIC src/backend/RaylibSystemInterface.cpp src/backend/RaylibRenderInterface.cpp src/backend/RaylibInput.cpp ) -target_link_libraries(gamejam PRIVATE +add_executable(${PROJECT_NAME} + src/main.cpp +) + +target_link_libraries(${PROJECT_NAME} PRIVATE raylib + rmlui_backend RmlUi::Core RmlUi::Debugger ) -target_include_directories(gamejam PRIVATE ${CMAKE_SOURCE_DIR}/src) +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src) set(ASSET_DIR ${CMAKE_SOURCE_DIR}/assets) -if(EMSCRIPTEN) - set(CMAKE_EXECUTABLE_SUFFIX ".html") - - target_link_options(gamejam PRIVATE - "-sUSE_GLFW=3" - "-sASYNCIFY" - "-sALLOW_MEMORY_GROWTH=1" - "-sFORCE_FILESYSTEM=1" - "--preload-file=${ASSET_DIR}@assets" - # "--shell-file=${CMAKE_SOURCE_DIR}/shell.html" +add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${ASSET_DIR} $/assets + COMMENT "Copying assets to build output" ) -else() - add_custom_command(TARGET gamejam POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${ASSET_DIR} $/assets - COMMENT "Copying assets to build output" - ) -endif() - -install(TARGETS gamejam RUNTIME DESTINATION bin) - -if(NOT EMSCRIPTEN) - install(DIRECTORY ${ASSET_DIR} DESTINATION bin) -endif() +install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin) +install(DIRECTORY ${ASSET_DIR} DESTINATION bin) diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..700d2c3 --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1788039129, + "narHash": "sha256-pa4Q0qErvCvzCaaUph7Sm37RhR4xvPrYI8Lgz6k85+A=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d2f67949798825fe853f7c5d0492b8bf016d3f88", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "utils": "utils" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix index ba77209..002a243 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "Raylib + RmlUI (with android build support) dev shell"; + description = "Raylib + RmlUi dev shell"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; @@ -25,13 +25,6 @@ "-DBUILD_TESTING=OFF" ]; - wasmFindOverrides = [ - "-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH" - "-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH" - "-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH" - ]; - - # ---- native RmlUi (shared lib) -------------------------------------- rmlui = pkgs.stdenv.mkDerivation { pname = "rmlui"; version = "master"; @@ -41,67 +34,6 @@ cmakeFlags = rmluiCmakeFlags ++ [ "-DBUILD_SHARED_LIBS=ON" ]; }; - # ---- WASM Freetype (static, minimal deps) --------------------------- - freetypeWasm = pkgs.stdenv.mkDerivation { - pname = "freetype-wasm"; - version = pkgs.freetype.version; - src = pkgs.freetype.src; - nativeBuildInputs = [ pkgs.cmake pkgs.emscripten ]; - dontFixup = true; - configurePhase = '' - emcmake cmake -S . -B build \ - -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_SHARED_LIBS=OFF \ - -DFT_DISABLE_ZLIB=TRUE \ - -DFT_DISABLE_BZIP2=TRUE \ - -DFT_DISABLE_PNG=TRUE \ - -DFT_DISABLE_HARFBUZZ=TRUE \ - -DFT_DISABLE_BROTLI=TRUE \ - -DCMAKE_INSTALL_PREFIX=$out - ''; - buildPhase = "emmake make -C build -j$NIX_BUILD_CORES"; - installPhase = "emmake make -C build install"; - }; - - # ---- WASM RmlUi (static) --------------------------------------------- - rmluiWasm = pkgs.stdenv.mkDerivation { - pname = "rmlui-wasm"; - version = "master"; - src = rmluiSrc; - nativeBuildInputs = [ pkgs.cmake pkgs.emscripten ]; - dontFixup = true; - configurePhase = '' - emcmake cmake -S . -B build \ - -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_SHARED_LIBS=OFF \ - ${pkgs.lib.concatStringsSep " " rmluiCmakeFlags} \ - ${pkgs.lib.concatStringsSep " " wasmFindOverrides} \ - -DCMAKE_PREFIX_PATH="${freetypeWasm}" \ - -DCMAKE_INSTALL_PREFIX=$out - ''; - buildPhase = "emmake make -C build -j$NIX_BUILD_CORES"; - installPhase = "emmake make -C build install"; - }; - - # ---- WASM raylib (PLATFORM=Web) --------------------------------------- - raylibWasm = pkgs.stdenv.mkDerivation { - pname = "raylib-wasm"; - version = pkgs.raylib.version; - src = pkgs.raylib.src; - nativeBuildInputs = [ pkgs.cmake pkgs.emscripten ]; - dontFixup = true; - configurePhase = '' - emcmake cmake -S . -B build \ - -DCMAKE_BUILD_TYPE=Release \ - -DPLATFORM=Web \ - -DBUILD_EXAMPLES=OFF \ - -DCMAKE_INSTALL_PREFIX=$out - ''; - buildPhase = "emmake make -C build -j$NIX_BUILD_CORES"; - installPhase = "emmake make -C build install"; - }; - - # ---- native toolchain / runtime --------------------------------------- nativeBuildTools = with pkgs; [ cmake pkg-config @@ -135,22 +67,6 @@ ''; }; - devShells.wasm = pkgs.mkShell { - nativeBuildInputs = [ pkgs.cmake pkgs.emscripten pkgs.python3 ]; - shellHook = '' - export RAYLIB_WASM="${raylibWasm}" - export RMLUI_WASM="${rmluiWasm}" - export FREETYPE_WASM="${freetypeWasm}" - echo "wasm dev shell ready, configure with:" - echo " emcmake cmake -B build-wasm -DPLATFORM=Web \\" - echo " -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH \\" - echo " -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH \\" - echo " -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \\" - echo " -DCMAKE_PREFIX_PATH=\"\$RAYLIB_WASM;\$RMLUI_WASM;\$FREETYPE_WASM\"" - echo " emmake make -C build-wasm" - ''; - }; - packages.default = pkgs.stdenv.mkDerivation { pname = "rrmlui"; version = "0.1.0"; @@ -159,32 +75,10 @@ buildInputs = nativeRuntimeDeps; cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" ]; postInstall = '' - wrapProgram $out/bin/gamejam \ + wrapProgram $out/bin/rrmlui \ --prefix LD_LIBRARY_PATH : "${pkgs.lib.makeLibraryPath nativeRuntimeDeps}" ''; }; - - packages.wasm = pkgs.stdenv.mkDerivation { - pname = "rrmlui-wasm"; - version = "0.1.0"; - src = ./.; - nativeBuildInputs = [ pkgs.cmake pkgs.emscripten ]; - dontFixup = true; - configurePhase = '' - emcmake cmake -S . -B build \ - -DCMAKE_BUILD_TYPE=Release \ - -DPLATFORM=Web \ - ${pkgs.lib.concatStringsSep " " wasmFindOverrides} \ - -DCMAKE_PREFIX_PATH="${raylibWasm};${rmluiWasm};${freetypeWasm}" \ - -DCMAKE_INSTALL_PREFIX=$out - ''; - buildPhase = "emmake make -C build -j$NIX_BUILD_CORES"; - installPhase = '' - mkdir -p $out - cp -r build/*.html build/*.js build/*.wasm $out/ 2>/dev/null || true - emmake make -C build install || true - ''; - }; } ); } diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..be0a0a3 --- /dev/null +++ b/readme.md @@ -0,0 +1,19 @@ +# RmlUi + Raylib + +This project aims to create a fully featured Raylib backend and renderer for Rmlui projects. + +I originally began creating this for a Game Jam project where I got the basic rendering implemented, but realized it would be nice to have as a seperate project to flesh out the rest of the features. + +## Roadmap +*Rendering features (from the RmlUi render interfface documentation https://mikke89.github.io/RmlUiDoc/pages/cpp_manual/interfaces/render.html#feature-table):* +- [x] Basic rendering +- [ ] Clip Mask +- [ ] Transforms +- [ ] Layers +- [ ] Render textures +- [ ] Mask images +- [ ] Filters +- [ ] Shaders + +*Backend features:* +- [x] Input handling