diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d056d6b824..cf543ca25b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -83,7 +83,7 @@ jobs: STAMP="" echo "prerelease=false" >> $GITHUB_OUTPUT echo "itchchannelname=release" >> $GITHUB_OUTPUT - echo "fastlanelane=release" >> $GITHUB_OUTPUT + echo "fastlanelane=beta" >> $GITHUB_OUTPUT else # This is the first 7 characters of the commit; we do it this way rather than via rev-parse to avoid an 'if' conditional depending on whether it's a PR or push. (unlike git describe, git rev-parse doesn't default to the current HEAD) @@ -571,15 +571,14 @@ jobs: # Some platforms share a cache; it's not a 1:1 mapping of either targetPlatform or vrsdk, so we have a distinct variable for which cache to use key: Library_${{ matrix.cache }}_${{ env.UNITY_VERSION }} - createdmg: - name: Create and Notarize DMG - needs: [configuration, build] + signmacos: + name: Sign the MacOS .app + needs: [build] if: | github.event_name == 'push' && github.repository == 'icosa-foundation/open-brush' && (github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/v')) - - runs-on: macos-latest # the ovr-platform-util tool is only available for Mac and Windows + runs-on: macos-latest steps: - name: Checkout repository uses: actions/checkout@v4 @@ -639,11 +638,46 @@ jobs: codesign --deep --force --verify --verbose --timestamp --options runtime --entitlements ../Support/macos/OpenBrush.entitlements --sign "Developer ID Application: Icosa Gallery Ltd (${{ vars.APPLE_TEAM_ID }})" $FILENAME/Contents/Plugins/UsdCs.bundle codesign --deep --force --verify --verbose --timestamp --options runtime --entitlements ../Support/macos/OpenBrush.entitlements --sign "Developer ID Application: Icosa Gallery Ltd (${{ vars.APPLE_TEAM_ID }})" $FILENAME/Contents/Plugins/lib_burst_generated.bundle codesign --deep --force --verify --verbose --timestamp --options runtime --entitlements ../Support/macos/OpenBrush.entitlements --sign "Developer ID Application: Icosa Gallery Ltd (${{ vars.APPLE_TEAM_ID }})" $FILENAME + cd - + + tar -c -v -z -f OpenBrush.tgz StandaloneOSX + - name: Upload signed app + uses: actions/upload-artifact@v4 + with: + name: MacOS Monoscopic (signed) + path: | + OpenBrush.tgz + + createdmg: + name: Create and Notarize DMG + needs: [signmacos] + if: | + github.event_name == 'push' && + github.repository == 'icosa-foundation/open-brush' && + (github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/v')) + + runs-on: macos-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + lfs: true # We don't use LFS, but it adds no time, and leave it here in case we do at some point later + sparse-checkout: | + Support/macos + + - name: Download Build Artifacts + uses: actions/download-artifact@v4 + with: + name: MacOS Monoscopic (signed) + path: build_macos_monoscopic - name: Create a notarized DMG env: VERSION: ${{ needs.configuration.outputs.version }} run: | + tar xvfz build_macos_monoscopic/*tgz + export FILENAME=$(basename $(readlink -f StandaloneOSX/OpenBrush*.app)) mkdir dist @@ -857,7 +891,7 @@ jobs: publish_steam: name: Publish Steam Release - needs: [configuration, build] + needs: [build, signmacos] if: | github.event_name == 'push' && github.repository == 'icosa-foundation/open-brush' && @@ -883,19 +917,29 @@ jobs: with: name: Windows OpenXR path: build_windows_openxr + - name: Download Build Artifacts (MacOS Monoscopic Signed) + uses: actions/download-artifact@v4 + with: + name: MacOS Monoscopic (signed) + path: build_macos_monoscopic - name: Upload Build run: | + cd build_macos_monoscopic + tar xvfz OpenBrush.tgz + cd - pip install -U jinjanator - jinjanate Support/steam/app.vdf.j2 > build_windows_openxr/app.vdf - jinjanate Support/steam/main_depot.vdf.j2 > build_windows_openxr/main_depot.vdf + jinjanate Support/steam/app.vdf.j2 > app.vdf + jinjanate Support/steam/main_depot.win.vdf.j2 > build_windows_openxr/main_depot.vdf + jinjanate Support/steam/main_depot.mac.vdf.j2 > build_macos_monoscopic/main_depot.vdf jinjanate Support/steam/installscript_win.vdf.j2 > build_windows_openxr/installscript_win.vdf - steamcmd +login $STEAM_USERNAME +run_app_build $(pwd)/build_windows_openxr/app.vdf +quit + steamcmd +login $STEAM_USERNAME +run_app_build $(pwd)/app.vdf +quit env: STEAM_USERNAME: ${{ vars.STEAM_USERNAME }} STEAM_PASSWORD: ${{ secrets.STEAM_PASSWORD }} VERSION: ${{ needs.configuration.outputs.version }} OPEN_BRUSH_APP_ID: ${{ vars.STEAM_APP_ID }} OPEN_BRUSH_WINDOWS_DEPOT_ID: ${{ vars.STEAM_WINDOWS_DEPOT_ID }} + OPEN_BRUSH_MAC_DEPOT_ID: ${{ vars.STEAM_MAC_DEPOT_ID }} OPEN_BRUSH_EXECUTABLE: ${{ needs.configuration.outputs.basename}}.exe CHANNEL: beta - name: Update steam login secret @@ -1051,10 +1095,10 @@ jobs: if [ "$PRERELEASE" == "false" ] then - ./ovr-platform-util upload-quest-build --app-id ${OCULUS_QUEST_APP_ID} --app-secret ${OCULUS_QUEST_APP_SECRET} --apk OpenBrush_Quest_$VERSION.apk --channel LIVE:quest2+ --debug_symbols_dir ./arm64-v8a/ --debug-symbols-pattern '*.so' + ./ovr-platform-util upload-quest-build --app-id ${OCULUS_QUEST_APP_ID} --app-secret ${OCULUS_QUEST_APP_SECRET} --apk OpenBrush_Quest_$VERSION.apk --channel LIVE:quest2+ --debug_symbols_dir ./arm64-v8a/ --debug-symbols-pattern '*.so' --age-group MIXED_AGES else CHANGELOG="${RAW_CHANGELOG}" - ./ovr-platform-util upload-quest-build --app-id ${OCULUS_QUEST_APP_ID} --app-secret ${OCULUS_QUEST_APP_SECRET} --apk OpenBrush_Quest_$VERSION.apk --channel Beta:quest2+ --debug_symbols_dir ./arm64-v8a/ --debug-symbols-pattern '*.so' --notes "${CHANGELOG}" + ./ovr-platform-util upload-quest-build --app-id ${OCULUS_QUEST_APP_ID} --app-secret ${OCULUS_QUEST_APP_SECRET} --apk OpenBrush_Quest_$VERSION.apk --channel Beta:quest2+ --debug_symbols_dir ./arm64-v8a/ --debug-symbols-pattern '*.so' --notes "${CHANGELOG}" --age-group MIXED_AGES fi publish_oculus_quest1: @@ -1091,10 +1135,10 @@ jobs: if [ "$PRERELEASE" == "false" ] then - ./ovr-platform-util upload-quest-build --app-id ${OCULUS_QUEST_APP_ID} --app-secret ${OCULUS_QUEST_APP_SECRET} --apk OpenBrush_Quest1_$VERSION.apk --channel LIVE:quest1only --debug_symbols_dir ./arm64-v8a/ --debug-symbols-pattern '*.so' + ./ovr-platform-util upload-quest-build --app-id ${OCULUS_QUEST_APP_ID} --app-secret ${OCULUS_QUEST_APP_SECRET} --apk OpenBrush_Quest1_$VERSION.apk --channel LIVE:quest1only --debug_symbols_dir ./arm64-v8a/ --debug-symbols-pattern '*.so' --age-group MIXED_AGES else CHANGELOG="${RAW_CHANGELOG}" - ./ovr-platform-util upload-quest-build --app-id ${OCULUS_QUEST_APP_ID} --app-secret ${OCULUS_QUEST_APP_SECRET} --apk OpenBrush_Quest1_$VERSION.apk --channel Beta:quest1only --debug_symbols_dir ./arm64-v8a/ --debug-symbols-pattern '*.so' --notes "${CHANGELOG}" + ./ovr-platform-util upload-quest-build --app-id ${OCULUS_QUEST_APP_ID} --app-secret ${OCULUS_QUEST_APP_SECRET} --apk OpenBrush_Quest1_$VERSION.apk --channel Beta:quest1only --debug_symbols_dir ./arm64-v8a/ --debug-symbols-pattern '*.so' --notes "${CHANGELOG}" --age-group MIXED_AGES fi publish_oculus_rift: diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 347a3f53a0..355c221699 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v5.0.0 + - uses: actions/setup-python@v5.1.0 with: python-version: '3.12' - uses: actions/setup-dotnet@v4.0.0 diff --git a/Assets/Scenes/Main.unity b/Assets/Scenes/Main.unity index 1c68d29f1c..0a0bdd892b 100644 --- a/Assets/Scenes/Main.unity +++ b/Assets/Scenes/Main.unity @@ -10143,7 +10143,9 @@ MonoBehaviour: m_EditorClassIdentifier: m_GlobalNoiseTexture: {fileID: 2800000, guid: 13d389131c327b94f84fbac121bf6f8f, type: 3} - m_DefaultBrush: {fileID: 11400000, guid: eb608f68fb3036b47be357a021ed7618, type: 2} + m_DefaultBrush: {fileID: 11400000, guid: b802f6ef146800b4bb78e9c705622cad, type: 2} + m_ZapboxDefaultBrush: {fileID: 11400000, guid: eb608f68fb3036b47be357a021ed7618, + type: 2} m_BlocksMaterials: - brushDescriptor: {fileID: 11400000, guid: 0e87b49c65463a343a448a556d7d6c3e, type: 2} - brushDescriptor: {fileID: 11400000, guid: d6c87eafa4cdba042933c1b4f6da46f7, type: 2} diff --git a/Assets/Scripts/BrushCatalog.cs b/Assets/Scripts/BrushCatalog.cs index f712d6b7f7..8964206fe8 100644 --- a/Assets/Scripts/BrushCatalog.cs +++ b/Assets/Scripts/BrushCatalog.cs @@ -60,6 +60,7 @@ public static void UnitTestTearDown(GameObject container) public Texture2D m_GlobalNoiseTexture; [SerializeField] private Brush m_DefaultBrush; + [SerializeField] private Brush m_ZapboxDefaultBrush; private bool m_IsLoading; private Dictionary m_GuidToBrush; private HashSet m_AllBrushes; @@ -82,7 +83,14 @@ public Brush GetBrush(Guid guid) } public Brush DefaultBrush { - get { return m_DefaultBrush; } + get + { +#if ZAPBOX_SUPPORTED + // TODO:Mikesky - Fix brush transparency! + return m_ZapboxDefaultBrush; +#endif + return m_DefaultBrush; + } } public IEnumerable AllBrushes { diff --git a/Assets/Textures/Trademarked/logo.png b/Assets/Textures/Trademarked/logo.png index c2a4b1da48..09d137349b 100644 Binary files a/Assets/Textures/Trademarked/logo.png and b/Assets/Textures/Trademarked/logo.png differ diff --git a/Assets/Textures/Trademarked/logowatermarkwhite.png b/Assets/Textures/Trademarked/logowatermarkwhite.png index 1db2829214..f8582ef450 100644 Binary files a/Assets/Textures/Trademarked/logowatermarkwhite.png and b/Assets/Textures/Trademarked/logowatermarkwhite.png differ diff --git a/README.md b/README.md index 3ef2bf93f1..ddfc389844 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,12 @@ -# Open Brush - Tilt Brush Evolved +# Open Brush - Art From All Angles -[![Support us on Open Collective!](https://img.shields.io/opencollective/all/icosa?logo=open-collective&label=Support%20us%20on%20Open%20Collective%21)](https://opencollective.com/icosa) -[![All GitHub releases](https://img.shields.io/github/downloads/icosa-foundation/open-brush/total?label=GitHub%20downloads)](https://github.com/icosa-foundation/open-brush/releases/latest) -[![Twitter](https://img.shields.io/badge/follow-%40openbrushapp-blue.svg?style=flat&logo=twitter)](https://twitter.com/openbrushapp) -[![Discord](https://discordapp.com/api/guilds/783806589991780412/embed.png?style=shield)](https://discord.gg/W7NCEYnEfy) ![Current Version](https://img.shields.io/github/v/release/icosa-foundation/open-brush) ![Prerelease Version](https://img.shields.io/github/v/release/icosa-foundation/open-brush?include_prereleases&label=prerelease) +[![Crowdin](https://badges.crowdin.net/openbrushapp/localized.svg)](https://crowdin.com/project/openbrushapp) +[![Support us on Open Collective!](https://img.shields.io/opencollective/all/icosa?logo=open-collective&label=Support%20us%20on%20Open%20Collective%21)](https://opencollective.com/icosa) +[![X](https://img.shields.io/badge/follow-%40openbrushapp-blue.svg?style=flat&logo=x)](https://x.com/openbrushapp) +[![Discord](https://discordapp.com/api/guilds/783806589991780412/embed.png?style=shield)](https://discord.gg/W7NCEYnEfy) + [![Open Brush Banner](open-brush.png)](https://openbrush.app) @@ -20,15 +21,16 @@ As the original repo is archived we cannot submit PRs, so feel free to submit th [Roadmap](https://github.com/orgs/icosa-foundation/projects/1) [Please join the Icosa Discord and get involved!](https://discord.com/invite/W7NCEYnEfy) [List of tutorials, write-ups and other things from the community](https://docs.google.com/document/d/1gjoYp4y-1qlE3a7fvXVxGR3ioj3nMfgprmTHQ-bpq0k/) -**[Support us on Open Collective!](https://opencollective.com/icosa)** +[Support us on Open Collective](https://opencollective.com/icosa) ## Downloads -### Stores (Did we mention it's free?) +### Stores - [SideQuest](https://sidequestvr.com/app/2852/open-brush) - [Oculus App Lab](https://www.oculus.com/experiences/quest/3600360710032222) - [Steam](https://store.steampowered.com/app/1634870/Open_Brush) - [Oculus Rift](https://www.oculus.com/experiences/rift/5227489953989768) - [Viveport Desktop](https://www.viveport.com/f1f3d00b-cf8a-443f-825e-4fea2dd3b005) +- [Pico](https://store-global.picoxr.com/global/detail/1/7246792261630050310) - [itch.io](https://openbrush.itch.io/openbrush) ### GitHub - [Formal GitHub Releases](https://github.com/icosa-foundation/open-brush/releases/latest) diff --git a/Support/macos/background.png b/Support/macos/background.png index 033d7dd949..015426c7aa 100644 Binary files a/Support/macos/background.png and b/Support/macos/background.png differ diff --git a/Support/macos/background@2x.png b/Support/macos/background@2x.png index 910944c296..a1b8227218 100644 Binary files a/Support/macos/background@2x.png and b/Support/macos/background@2x.png differ diff --git a/Support/steam/app.vdf.j2 b/Support/steam/app.vdf.j2 index 30feefa970..28ccf6527d 100644 --- a/Support/steam/app.vdf.j2 +++ b/Support/steam/app.vdf.j2 @@ -2,13 +2,14 @@ { "appid" "{{ OPEN_BRUSH_APP_ID }}" "Desc" "{{ VERSION }}" - "buildoutput" "../build_output/{{ CHANNEL }}" // Path for steamcmd logs + "buildoutput" "build_output/{{ CHANNEL }}" // Path for steamcmd logs "contentroot" "." // This file will be copied into the root of the release "setlive" "{{ CHANNEL }}" "preview" "0" // For local testing, set this to 1 "local" "" // Not relevant; this is for a custom CDN "depots" { - "{{ OPEN_BRUSH_WINDOWS_DEPOT_ID }}" main_depot.vdf + "{{ OPEN_BRUSH_WINDOWS_DEPOT_ID }}" build_windows_openxr/main_depot.vdf + "{{ OPEN_BRUSH_MAC_DEPOT_ID }}" build_macos_monoscopic/main_depot.vdf } } diff --git a/Support/steam/main_depot.mac.vdf.j2 b/Support/steam/main_depot.mac.vdf.j2 new file mode 100644 index 0000000000..c31997ab80 --- /dev/null +++ b/Support/steam/main_depot.mac.vdf.j2 @@ -0,0 +1,25 @@ +"DepotBuildConfig" +{ + // # Set your assigned depot ID here + "DepotID" "{{ OPEN_BRUSH_MAC_DEPOT_ID }}" + + "ContentRoot" "build_macos_monoscopic/StandaloneOSX" + + "FileMapping" + { + // Include all files in the build output directory (ContentRoot) + "LocalPath" "*" + + // Destination is the main install directory + "DepotPath" "." + + // If LocalPath contains wildcards, setting this means that all + // matching files within subdirectories of LocalPath will also + // be included. + "recursive" "1" + } + + // but exclude all symbol files + "FileExclusion" "*.pdb" + "FileExclusion" "build_log.txt" +} diff --git a/Support/steam/main_depot.vdf.j2 b/Support/steam/main_depot.win.vdf.j2 similarity index 92% rename from Support/steam/main_depot.vdf.j2 rename to Support/steam/main_depot.win.vdf.j2 index 13ef3826bc..924c8c9113 100644 --- a/Support/steam/main_depot.vdf.j2 +++ b/Support/steam/main_depot.win.vdf.j2 @@ -3,7 +3,7 @@ // # Set your assigned depot ID here "DepotID" "{{ OPEN_BRUSH_WINDOWS_DEPOT_ID }}" - "ContentRoot" "StandaloneWindows64" + "ContentRoot" "build_windows_openxr/StandaloneWindows64" "FileMapping" { diff --git a/open-brush.png b/open-brush.png index 765e8c39f3..71a4acb994 100644 Binary files a/open-brush.png and b/open-brush.png differ