Skip to content
Merged
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
def4ff0
fix: licenses
nuzzles Mar 9, 2024
b8c83a0
docs: update README
nuzzles Mar 9, 2024
1375b22
docs: authors
nuzzles Mar 10, 2024
ce3c007
ci: initial CI
nuzzles Mar 10, 2024
b9c439f
refactor: merge vellottie
nuzzles Mar 10, 2024
5df4075
feat: examples
nuzzles Mar 10, 2024
1b4322d
refactor: rename schema `Lottie` to `Animation`
nuzzles Mar 10, 2024
c9a3e1c
build: fix copyright headers
nuzzles Mar 10, 2024
86fb77a
fix: wasm compile
nuzzles Mar 10, 2024
7142727
build: ignore example assets
nuzzles Mar 10, 2024
9c0b79b
ci: remove release workflow
nuzzles Mar 10, 2024
47a8a0f
build: switch demo update to push on main
nuzzles Mar 11, 2024
867ca73
build: remove unnecessary items
nuzzles Mar 11, 2024
6409e34
Update .gitignore
nuzzles Mar 11, 2024
15ae080
fix: authors
nuzzles Mar 11, 2024
2682d11
fix: .gitignore
nuzzles Mar 11, 2024
b7b5de7
fix: remove trunk
nuzzles Mar 11, 2024
00e32d8
Update .github/workflows/ci.yml
nuzzles Mar 11, 2024
7db7178
fix: authors
nuzzles Mar 11, 2024
ee7089d
docs: update badge
nuzzles Mar 11, 2024
9ddcee5
docs: update
nuzzles Mar 11, 2024
6166d6f
docs: update
nuzzles Mar 11, 2024
f646342
build: add tiger license
nuzzles Mar 11, 2024
4ace287
Update examples/scenes/Cargo.toml
nuzzles Mar 11, 2024
19c4cc5
feat: remove wgpu badge
nuzzles Mar 11, 2024
0aa52fc
fix: remove RUSTFLAGS
nuzzles Mar 11, 2024
99ecb99
Update examples/with_winit/Cargo.toml
nuzzles Mar 11, 2024
a971f1f
docs: remove license
nuzzles Mar 11, 2024
e5442a8
docs: update
nuzzles Mar 11, 2024
bff269d
Update Cargo.toml
nuzzles Mar 13, 2024
98d33b4
Update Cargo.toml
nuzzles Mar 13, 2024
5437119
docs: update
nuzzles Mar 13, 2024
1c28b1d
fix: newline
nuzzles Mar 13, 2024
446d4cf
build: match text in vello
nuzzles Mar 13, 2024
07fbe42
fix: move tiger to CC-BY dir
nuzzles Mar 13, 2024
4809b9f
feat: google_noto_asset macro
nuzzles Mar 13, 2024
219b546
Update Cargo.toml
nuzzles Mar 14, 2024
36d9937
fix: remove deprecated note
nuzzles Mar 21, 2024
473f118
build: switch logic to f64
nuzzles Mar 21, 2024
ca51bd4
refactor: switch to f64
nuzzles Mar 21, 2024
57dd04b
refactor: rename trait to `Tween`
nuzzles Mar 21, 2024
a892e5c
refactor: finalize merge comments
nuzzles Mar 21, 2024
78b78cd
fix: skew logic
nuzzles Mar 21, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[alias]
run_wasm = "run --release --package run_wasm --"
# Other crates use the alias run-wasm, even though crate names should use `_`s not `-`s
# Allow this to be used
run-wasm = "run_wasm"
24 changes: 24 additions & 0 deletions .github/copyright.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/bin/bash

# If there are new files with headers that can't match the conditions here,
# then the files can be ignored by an additional glob argument via the -g flag.
# For example:
# -g "!src/special_file.rs"
# -g "!src/special_directory"

# Check all the standard Rust source files
output=$(rg "^// Copyright (19|20)[\d]{2} (.+ and )?the Velato Authors( and .+)?$\n^// SPDX-License-Identifier: Apache-2\.0 OR MIT$\n\n" --files-without-match --multiline -g "*.rs" .)

if [ -n "$output" ]; then
echo -e "The following files lack the correct copyright header:\n"
echo $output
echo -e "\n\nPlease add the following header:\n"
echo "// Copyright $(date +%Y) the Velato Authors"
echo "// SPDX-License-Identifier: Apache-2.0 OR MIT"
echo -e "\n... rest of the file ...\n"
exit 1
fi

echo "All files have correct copyright headers."
exit 0

171 changes: 171 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
env:
# We aim to always test with the latest stable Rust toolchain, however we pin to a specific
# version like 1.70. Note that we only specify MAJOR.MINOR and not PATCH so that bugfixes still
# come automatically. If the version specified here is no longer the latest stable version,
# then please feel free to submit a PR that adjusts it along with the potential clippy fixes.
RUST_STABLE_VER: "1.76" # In quotes because otherwise (e.g.) 1.70 would be interpreted as 1.7


# Rationale
#
# We don't run clippy with --all-targets because then even --lib and --bins are compiled with
# dev dependencies enabled, which does not match how they would be compiled by users.
# A dev dependency might enable a feature of a regular dependency that we need, but testing
# with --all-targets would not catch that. Thus we split --lib & --bins into a separate step.

name: CI

on:
pull_request:
merge_group:

jobs:
rustfmt:
runs-on: ubuntu-latest
name: cargo fmt
steps:
- uses: actions/checkout@v4

- name: install stable toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_STABLE_VER }}
components: rustfmt

- name: cargo fmt
run: cargo fmt --all --check

- name: install ripgrep
run: |
sudo apt update
sudo apt install ripgrep

- name: check copyright headers
run: bash .github/copyright.sh

test-stable:
runs-on: ${{ matrix.os }}
strategy:
matrix:
# We use macos-14 as that is an arm runner. These have the virtgpu support we need
os: [windows-latest, macos-14, ubuntu-latest]
include:
- os: ubuntu-latest
gpu: 'yes'
- os: macos-14
gpu: 'yes'
- os: windows-latest
# TODO: The windows runners theoretically have CPU fallback for GPUs, but
# this failed in initial testing
gpu: 'no'
name: cargo clippy + test
steps:
- uses: actions/checkout@v4

- name: install stable toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_STABLE_VER }}
components: clippy

- name: restore cache
uses: Swatinem/rust-cache@v2

- name: Install native dependencies
if: matrix.os == 'ubuntu-latest'
run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev

# Adapted from https://github.com/bevyengine/bevy/blob/b446374392adc70aceb92621b080d1a6cf7a7392/.github/workflows/validation-jobs.yml#L74-L79
- name: install xvfb, llvmpipe and lavapipe
if: matrix.os == 'ubuntu-latest'
# https://launchpad.net/~kisak/+archive/ubuntu/turtle
run: |
sudo apt-get update -y -qq
sudo add-apt-repository ppa:kisak/turtle -y
sudo apt-get update
sudo apt install -y xvfb libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers

- name: cargo clippy (no default features)
run: cargo clippy --workspace --lib --bins --no-default-features -- -D warnings

- name: cargo clippy (no default features) (auxiliary)
run: cargo clippy --workspace --tests --benches --examples --no-default-features -- -D warnings

- name: cargo clippy (default features)
run: cargo clippy --workspace --lib --bins -- -D warnings

- name: cargo clippy (default features) (auxiliary)
run: cargo clippy --workspace --tests --benches --examples -- -D warnings

- name: cargo clippy (all features)
run: cargo clippy --workspace --lib --bins --all-features -- -D warnings

- name: cargo clippy (all features) (auxiliary)
run: cargo clippy --workspace --tests --benches --examples --all-features -- -D warnings

- name: cargo test
run: cargo test --workspace --all-features
env:
VELLO_CI_GPU_SUPPORT: ${{ matrix.gpu }}

clippy-stable-wasm:
runs-on: ubuntu-latest
name: cargo test (wasm32)
steps:
- uses: actions/checkout@v4

- name: restore cache
uses: Swatinem/rust-cache@v2

- name: install stable toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_STABLE_VER }}
targets: wasm32-unknown-unknown
components: clippy

- name: cargo clippy (wasm)
run: cargo clippy --all-targets --target wasm32-unknown-unknown --workspace -- -D warnings

android-stable-check:
runs-on: ubuntu-latest
name: cargo check (aarch64-android)
steps:
- uses: actions/checkout@v4

- name: restore cache
uses: Swatinem/rust-cache@v2

- name: install stable toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_STABLE_VER }}
targets: aarch64-linux-android

- name: install cargo apk
run: cargo install cargo-apk

- name: cargo apk check (android)
run: cargo apk check -p with_winit --lib
env:
# This is a bit of a hack, but cargo apk doesn't seem to allow customising this
RUSTFLAGS: '-D warnings'

docs:
name: cargo doc
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest, macos-latest, ubuntu-latest]
steps:
- uses: actions/checkout@v4

- name: install nightly toolchain
uses: dtolnay/rust-toolchain@nightly

- name: restore cache
uses: Swatinem/rust-cache@v2

# We test documentation using nightly to match docs.rs. This prevents potential breakages
- name: cargo doc
run: cargo doc --workspace --all-features --no-deps --document-private-items -Zunstable-options -Zrustdoc-scrape-examples
68 changes: 68 additions & 0 deletions .github/workflows/pages-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Web Demo Update

on:
push:
branches:
- main

jobs:
release-web:
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install | Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown

- name: Install | WASM Bindgen
uses: jetli/wasm-bindgen-action@v0.2.0
with:
version: 'latest'

- name: Build | WASM
run: cargo build -p with_winit --bin with_winit_bin --release --target wasm32-unknown-unknown

- name: Package | WASM
run: |
mkdir public
wasm-bindgen --target web --out-dir public target/wasm32-unknown-unknown/release/with_winit_bin.wasm --no-typescript
cat << EOF > public/index.html
<html>
<title>Velato Web Demo</title>
<meta content=no-cache http-equiv=Cache-control>
<meta content=-1 http-equiv=Expires>
<script type=module>import initSync from"/velato/with_winit_bin.js";initSync(`/velato/with_winit_bin_bg.wasm`);</script>
<link as=fetch crossorigin href=/velato/with_winit_bin_bg.wasm rel=preload type=application/wasm>
<link crossorigin href=/velato/with_winit_bin.js rel=modulepreload>
</head>
<body>
<style>
body {
margin: 0;
padding: 0;
}
</style>
</body>
</html>
EOF

- name: Setup Pages
uses: actions/configure-pages@v4

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: './public'

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
13 changes: 11 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
/target
Comment thread
nuzzles marked this conversation as resolved.
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock
Comment thread
nuzzles marked this conversation as resolved.

assets/*
# Don't commit example downloads
examples/assets/downloads/*

# Generated by Cargo
# will have compiled files and executables
/target

# Some people have Apple
.DS_Store
Comment thread
nuzzles marked this conversation as resolved.
Outdated
6 changes: 6 additions & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,9 @@
# To see the full list of contributors, see the revision history in
# source control.
Google LLC
Chad Brokaw
Daniel McNab
Spencer C. Imbleau
Bruce Mitchener
Sebastian Hamel
Kaur Kuut
26 changes: 17 additions & 9 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,28 +1,36 @@
[workspace]
resolver = "2"
members = ["demo"]
members = ["examples/with_winit", "examples/run_wasm", "examples/scenes"]

[workspace.package]
edition = "2021"
version = "0.0.1"
license = "MIT OR Apache-2.0"
version = "0.1.0"
license = "Apache-2.0 OR MIT"
repository = "https://github.com/linebender/velato"

Comment thread
nuzzles marked this conversation as resolved.
Outdated
[package]
name = "velato"
description = "Lottie renderer built on vello."
description = "A Lottie integration for vello."
categories = ["rendering", "graphics"]
keywords = ["2d", "vector-graphics", "animation", "lottie"]

keywords = ["2d", "vector-graphics", "vello", "animation", "lottie"]
version.workspace = true
license.workspace = true
edition.workspace = true
repository.workspace = true

[workspace.dependencies]
vello = { git = "https://github.com/linebender/vello", rev = "b0303ccf98df15a8b196272720d364a56f7304ba" }

# Update the README badges to match wgpu and vello version!
Comment thread
nuzzles marked this conversation as resolved.
Outdated
vello = "0.1"
Comment thread
nuzzles marked this conversation as resolved.
Outdated
Comment thread
nuzzles marked this conversation as resolved.
Outdated

[dependencies]
vello = { workspace = true }
bodymovin = { git = "https://github.com/vectorgameexperts/bodymovin-rs" }
keyframe = "1"
once_cell = "1"

# For the parser
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_repr = "0.1"

[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
wasm-bindgen-test = "0.3"
Comment thread
nuzzles marked this conversation as resolved.
Outdated
26 changes: 0 additions & 26 deletions LICENSE-APACHE
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
Expand Down Expand Up @@ -175,28 +174,3 @@
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Loading