From 66334e78b1b349ecd00bef084adab4c1d169048c Mon Sep 17 00:00:00 2001 From: Andrej Orsula Date: Sat, 9 Mar 2024 16:11:26 +0100 Subject: [PATCH] Add initial support for `UsdShade` (#4) * Make cargo deny independent in Rust CI Signed-off-by: Andrej Orsula * Document path environment variable [skip ci] Signed-off-by: Andrej Orsula * Update badges Signed-off-by: Andrej Orsula * Update Dockerfile Signed-off-by: Andrej Orsula * Add `pxr::UsdGeomXformOp::set_quatf()` Signed-off-by: Andrej Orsula * Add initial support for `UsdShade*` Signed-off-by: Andrej Orsula * Add Dependabot automation Signed-off-by: Andrej Orsula * Update Rust CI Signed-off-by: Andrej Orsula --------- Signed-off-by: Andrej Orsula --- .github/workflows/dependabot.yml | 27 + .github/workflows/rust.yml | 17 +- Cargo.lock | 151 ++-- Cargo.toml | 2 +- Dockerfile | 109 ++- README.md | 16 +- .../include/pxr/usd/usdShade/input.h.patch | 91 +++ .../include/pxr/usd/usdShade/output.h.patch | 84 +++ pxr_sys/src/ffi/bindings.rs | 13 +- pxr_sys/src/ffi/pxr/mod.rs | 3 +- pxr_sys/src/ffi/pxr/sdf/mod.rs | 1 + pxr_sys/src/ffi/pxr/sdf/value_type_name.rs | 659 ++++++++++++++++++ pxr_sys/src/ffi/pxr/usd_geom/geom_xform.rs | 9 + pxr_sys/src/ffi/pxr/usd_geom/mod.rs | 7 + .../ffi/pxr/usd_shade/material_binding_api.rs | 18 + pxr_sys/src/ffi/pxr/usd_shade/mod.rs | 8 + 16 files changed, 1108 insertions(+), 107 deletions(-) create mode 100644 .github/workflows/dependabot.yml create mode 100644 pxr_sys/patches/include/pxr/usd/usdShade/input.h.patch create mode 100644 pxr_sys/patches/include/pxr/usd/usdShade/output.h.patch create mode 100644 pxr_sys/src/ffi/pxr/sdf/value_type_name.rs create mode 100644 pxr_sys/src/ffi/pxr/usd_shade/material_binding_api.rs diff --git a/.github/workflows/dependabot.yml b/.github/workflows/dependabot.yml new file mode 100644 index 0000000..b8349c1 --- /dev/null +++ b/.github/workflows/dependabot.yml @@ -0,0 +1,27 @@ +name: Dependabot automation +on: pull_request + +permissions: + contents: write + pull-requests: write + +jobs: + dependabot_automation: + runs-on: ubuntu-latest + if: ${{ github.actor == 'dependabot[bot]' && github.event_name == 'pull_request' }} + steps: + - name: Fetch metadata + id: metadata + uses: dependabot/fetch-metadata@v1 + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + - name: Approve the PR + env: + PR_URL: ${{github.event.pull_request.html_url}} + GH_TOKEN: ${{secrets.GITHUB_TOKEN}} + run: gh pr review --approve "$PR_URL" + - name: Enable auto-merge for the PR + env: + PR_URL: ${{github.event.pull_request.html_url}} + GH_TOKEN: ${{secrets.GITHUB_TOKEN}} + run: gh pr merge --auto --merge "$PR_URL" diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 3d838a1..34545bd 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -14,6 +14,7 @@ concurrency: cancel-in-progress: true env: + MSRV: "1.70" CARGO_TERM_COLOR: always BUILD_LIB_PACKAGE_NAME: pxr_build SYS_LIB_PACKAGE_NAME: pxr_sys @@ -39,7 +40,7 @@ jobs: fail-fast: false matrix: toolchain: - - "1.70" # Minimal supported Rust version (MSRV) + - MSRV - stable - beta steps: @@ -48,9 +49,18 @@ jobs: with: save-if: ${{ github.event_name == 'push'}} - uses: dtolnay/rust-toolchain@master + if: ${{ matrix.toolchain != 'MSRV' && matrix.toolchain != 'stable' }} with: toolchain: ${{ matrix.toolchain }} - components: rustfmt, clippy + - uses: dtolnay/rust-toolchain@master + if: ${{ matrix.toolchain == 'MSRV' }} + with: + toolchain: ${{ env.MSRV }} + - uses: dtolnay/rust-toolchain@master + if: ${{ matrix.toolchain == 'stable' }} + with: + toolchain: ${{ matrix.toolchain }} + components: clippy ## Install dependencies - run: sudo apt-get update && sudo apt-get install -yq --no-install-recommends cmake libarchive-dev libgl-dev libglu-dev libilmbase-dev libssl-dev libx11-dev libxt-dev @@ -101,10 +111,9 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} files: lcov.info - fail_ci_if_error: true + fail_ci_if_error: false deny: - needs: cargo runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/Cargo.lock b/Cargo.lock index 2154e4c..36ec43f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -202,9 +202,9 @@ dependencies = [ [[package]] name = "base64" -version = "0.21.5" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "bitflags" @@ -214,9 +214,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" [[package]] name = "built_different" @@ -579,9 +579,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "libc", @@ -602,9 +602,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "h2" -version = "0.3.22" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" dependencies = [ "bytes", "fnv", @@ -612,7 +612,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.1.0", + "indexmap 2.2.1", "slab", "tokio", "tokio-util", @@ -652,9 +652,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" [[package]] name = "home" @@ -765,9 +765,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.1.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "433de089bd45971eecf4668ee0ee8f4cec17db4f8bd8f7bc3197a6ce37aa7d9b" dependencies = [ "equivalent", "hashbrown 0.14.3", @@ -811,9 +811,9 @@ checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "js-sys" -version = "0.3.66" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" dependencies = [ "wasm-bindgen", ] @@ -832,9 +832,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.152" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libloading" @@ -852,7 +852,7 @@ version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.4.2", "libc", "redox_syscall", ] @@ -868,9 +868,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "log" @@ -992,7 +992,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.3", + "hermit-abi 0.3.4", "libc", ] @@ -1013,11 +1013,11 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "openssl" -version = "0.10.62" +version = "0.10.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" +checksum = "15c9d69dd87a29568d4d017cfe8ec518706046a05184e5aea92d0af890b803c8" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.4.2", "cfg-if", "foreign-types", "libc", @@ -1045,9 +1045,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.98" +version = "0.9.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" +checksum = "22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae" dependencies = [ "cc", "libc", @@ -1093,9 +1093,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" +checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" [[package]] name = "prettyplease" @@ -1133,9 +1133,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.76" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -1153,7 +1153,7 @@ name = "pxr_build" version = "0.1.2" dependencies = [ "regex", - "which 5.0.0", + "which 6.0.0", ] [[package]] @@ -1225,9 +1225,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b7fa1134405e2ec9353fd416b17f8dacd46c473d7d3fd1cf202706a14eb792a" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" dependencies = [ "aho-corasick", "memchr", @@ -1242,9 +1242,9 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" -version = "0.11.23" +version = "0.11.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" dependencies = [ "base64", "bytes", @@ -1264,9 +1264,11 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", "system-configuration", "tokio", "tokio-native-tls", @@ -1292,17 +1294,26 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.38.28" +version = "0.38.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.4.2", "errno", "libc", "linux-raw-sys", "windows-sys 0.52.0", ] +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + [[package]] name = "rustversion" version = "1.0.14" @@ -1373,18 +1384,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.195" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.195" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" dependencies = [ "proc-macro2", "quote", @@ -1393,9 +1404,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.111" +version = "1.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" dependencies = [ "itoa", "ryu", @@ -1416,9 +1427,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "slab" @@ -1461,6 +1472,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "system-configuration" version = "0.5.1" @@ -1497,9 +1514,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] @@ -1612,9 +1629,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "unicode-bidi" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" @@ -1693,9 +1710,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.89" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1703,9 +1720,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.89" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" dependencies = [ "bumpalo", "log", @@ -1718,9 +1735,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" +checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" dependencies = [ "cfg-if", "js-sys", @@ -1730,9 +1747,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.89" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1740,9 +1757,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.89" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" dependencies = [ "proc-macro2", "quote", @@ -1753,15 +1770,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.89" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" [[package]] name = "web-sys" -version = "0.3.66" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" +checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" dependencies = [ "js-sys", "wasm-bindgen", @@ -1781,15 +1798,15 @@ dependencies = [ [[package]] name = "which" -version = "5.0.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14" +checksum = "7fa5e0c10bf77f44aac573e498d1a82d5fbd5e91f6fc0a99e7be4b38e85e101c" dependencies = [ "either", "home", "once_cell", "rustix", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index f79e6a1..54f5db9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,7 @@ python-config-rs = { version = "0.1" } regex = { version = "1.10" } thiserror = { version = "1.0" } walkdir = { version = "2" } -which = { version = "5.0" } +which = { version = "6.0" } [patch.crates-io] diff --git a/Dockerfile b/Dockerfile index 38931cc..10a1832 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,47 +1,106 @@ -ARG RUST_VERSION=1.74 -FROM rust:${RUST_VERSION} +### Base image +ARG BASE_IMAGE_NAME="ubuntu" +ARG BASE_IMAGE_TAG="jammy" +FROM ${BASE_IMAGE_NAME}:${BASE_IMAGE_TAG} ### Use bash as the default shell -SHELL ["/bin/bash", "-c"] +SHELL ["/bin/bash", "-o", "pipefail", "-c"] ### Create a barebones entrypoint that is conditionally updated throughout the Dockerfile RUN echo "#!/usr/bin/env bash" >> /entrypoint.bash && \ chmod +x /entrypoint.bash -## Configure Rust -ARG RUST_VERSION="1.74" -RUN echo -e "\n# Rust ${RUST_VERSION}" >> /entrypoint.bash && \ - echo "export CARGO_TARGET_DIR=\"${HOME}/ws_target\"" >> /entrypoint.bash && \ - echo "export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS=\"-Clink-arg=-fuse-ld=mold -Ctarget-cpu=native\"" >> /entrypoint.bash -## Finalize the entrypoint and source it in the ~/.bashrc -# hadolint ignore=SC2016 -RUN echo -e "\n# Execute the command" >> /entrypoint.bash && \ - echo -en 'exec "${@}"\n' >> /entrypoint.bash && \ - echo -e "\n# Source the entrypoint" >> "${HOME}/.bashrc" && \ - echo -en "source /entrypoint.bash --\n" >> "${HOME}/.bashrc" -ENTRYPOINT ["/entrypoint.bash"] -### Configure the workspace -ARG WORKSPACE="/root/ws" -ENV WORKSPACE="${WORKSPACE}" -WORKDIR ${WORKSPACE} - -### Install dependencies -RUN apt-get update && \ +### Build OpenUSD +ARG OPENUSD_VERSION="22.11" +COPY ./pxr_sys/patches/src/build_scripts/build_usd.py.patch /tmp/build_usd.py.patch +# hadolint ignore=SC2016 +RUN OPENUSD_DL_PATH="/tmp/OpenUSD-${OPENUSD_VERSION}.tar.gz" && \ + OPENUSD_SRC_DIR="/tmp/OpenUSD-${OPENUSD_VERSION}" && \ + OPENUSD_INSTALL_DIR="${HOME}/openusd" && \ + echo -e "\n# OpenUSD ${OPENUSD_VERSION}" >> /entrypoint.bash && \ + echo "export OPENUSD_PATH=\"${OPENUSD_INSTALL_DIR}\"" >> /entrypoint.bash && \ + echo '# export PATH="${OPENUSD_PATH}/bin${PATH:+:${PATH}}"' >> /entrypoint.bash && \ + echo '# export LD_LIBRARY_PATH="${OPENUSD_PATH}/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"' >> /entrypoint.bash && \ + echo '# export PYTHONPATH="${OPENUSD_PATH}/lib/python${PYTHONPATH:+:${PYTHONPATH}}"' >> /entrypoint.bash && \ + apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \ build-essential \ + ca-certificates \ clang \ cmake \ + curl \ libarchive-dev \ libgl-dev \ + libglfw3-dev \ + libglib2.0-dev \ libglu-dev \ + libglu1-mesa-dev \ libilmbase-dev \ libssl-dev \ + libtbb2-dev \ libx11-dev \ libxt-dev \ - mold \ pkg-config \ - python3-dev && \ - rm -rf /var/lib/apt/lists/* + python3-dev \ + python3-pip && \ + rm -rf /var/lib/apt/lists/* && \ + python3 -m pip install --no-cache-dir PyOpenGL==3.1.7 pyside6==6.6.0 && \ + curl --proto "=https" --tlsv1.2 -sSfL "https://github.com/PixarAnimationStudios/OpenUSD/archive/refs/tags/v${OPENUSD_VERSION}.tar.gz" -o "${OPENUSD_DL_PATH}" && \ + mkdir -p "${OPENUSD_SRC_DIR}" && \ + tar xf "${OPENUSD_DL_PATH}" -C "${OPENUSD_SRC_DIR}" --strip-components=1 && \ + rm "${OPENUSD_DL_PATH}" && \ + if [[ "${OPENUSD_VERSION}" = "22.11" ]]; then \ + patch --unified --strip=1 --batch --follow-symlinks --ignore-whitespace --input=/tmp/build_usd.py.patch --directory="${OPENUSD_SRC_DIR}" ; \ + fi && \ + rm /tmp/build_usd.py.patch && \ + python3 "${OPENUSD_SRC_DIR}/build_scripts/build_usd.py" \ + --build-shared \ + --build-variant=release --prefer-speed-over-safety \ + --use-cxx11-abi=0 \ + --build-args USD,"-DPXR_LIB_PREFIX=lib" \ + --no-tests --no-examples --no-tutorials --no-tools --no-docs \ + --usdview \ + --python --no-debug-python \ + --usd-imaging \ + --no-ptex \ + --openvdb \ + --no-embree \ + --no-prman \ + --no-openimageio \ + --no-opencolorio \ + --alembic \ + --no-hdf5 \ + --draco \ + --materialx \ + "${OPENUSD_INSTALL_DIR}" && \ + rm -rf "${OPENUSD_SRC_DIR}" "${OPENUSD_INSTALL_DIR}/src" + +### Install Rust +ARG RUST_VERSION="1.75" +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \ + ca-certificates \ + curl \ + mold && \ + rm -rf /var/lib/apt/lists/* && \ + curl --proto "=https" --tlsv1.2 -sSfL "https://sh.rustup.rs" | sh -s -- --no-modify-path -y --default-toolchain "${RUST_VERSION}" --profile default && \ + echo -e "\n# Rust ${RUST_VERSION}" >> /entrypoint.bash && \ + echo "source \"${HOME}/.cargo/env\" --" >> /entrypoint.bash && \ + echo "export CARGO_TARGET_DIR=\"${HOME}/ws_target\"" >> /entrypoint.bash && \ + echo "export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS=\"-Clink-arg=-fuse-ld=mold -Ctarget-cpu=native\"" >> /entrypoint.bash + +### Finalize the entrypoint and source it in the ~/.bashrc +# hadolint ignore=SC2016 +RUN echo -e "\n# Execute the command" >> /entrypoint.bash && \ + echo -en 'exec "${@}"\n' >> /entrypoint.bash && \ + echo -e "\n# Source the entrypoint" >> "${HOME}/.bashrc" && \ + echo -en "source /entrypoint.bash --\n" >> "${HOME}/.bashrc" +ENTRYPOINT ["/entrypoint.bash"] + +### Configure the workspace +ARG WORKSPACE="/root/ws" +ENV WORKSPACE="${WORKSPACE}" +WORKDIR ${WORKSPACE} ### Copy the source COPY . "${WORKSPACE}" diff --git a/README.md b/README.md index afa6313..165bc56 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ # pxr_rs

- crates.io - Rust - Docker - codecov + crates.io + + Rust + Docker + deps.rs + codecov.io

Rust interface for [OpenUSD](https://openusd.org). @@ -48,6 +50,12 @@ pxr = { git = "https://github.com/AndrejOrsula/pxr_rs.git" } Note that the first build might take up to 50 minutes because OpenUSD will be automatically downloaded and compiled with the `vendored` feature enabled. The artifacts will be cached in `OUT_DIR` and reused for subsequent builds. +Alternatively, you can specify the path to an existing OpenUSD installation directory via the following environment variable. + +```bash +export OPENUSD_PATH=/path/to/pxr/openusd +``` + It is highly recommended to use `lld` or `mold` linker because `ld` might currently fail.
diff --git a/pxr_sys/patches/include/pxr/usd/usdShade/input.h.patch b/pxr_sys/patches/include/pxr/usd/usdShade/input.h.patch new file mode 100644 index 0000000..745f0c9 --- /dev/null +++ b/pxr_sys/patches/include/pxr/usd/usdShade/input.h.patch @@ -0,0 +1,91 @@ +--- ./pxr/usd/usdShade/input.h ++++ ./pxr/usd/usdShade/input.h +@@ -373,34 +373,34 @@ + bool SetConnectedSources( + std::vector const &sourceInfos) const; + +- using SourceInfoVector = TfSmallVector; ++ // using SourceInfoVector = TfSmallVector; + +- /// Finds the valid sources of connections for the Input. +- /// +- /// \p invalidSourcePaths is an optional output parameter to collect the +- /// invalid source paths that have not been reported in the returned vector. +- /// +- /// Returns a vector of \p UsdShadeConnectionSourceInfo structs with +- /// information about each upsteam attribute. If the vector is empty, there +- /// have been no valid connections. +- /// +- /// \note A valid connection requires the existence of the source attribute +- /// and also requires that the source prim is UsdShadeConnectableAPI +- /// compatible. +- /// \note The python wrapping returns a tuple with the valid connections +- /// first, followed by the invalid source paths. +- /// +- /// \sa UsdShadeConnectableAPI::GetConnectedSources +- /// +- USDSHADE_API +- SourceInfoVector GetConnectedSources( +- SdfPathVector *invalidSourcePaths = nullptr) const; ++ // /// Finds the valid sources of connections for the Input. ++ // /// ++ // /// \p invalidSourcePaths is an optional output parameter to collect the ++ // /// invalid source paths that have not been reported in the returned vector. ++ // /// ++ // /// Returns a vector of \p UsdShadeConnectionSourceInfo structs with ++ // /// information about each upsteam attribute. If the vector is empty, there ++ // /// have been no valid connections. ++ // /// ++ // /// \note A valid connection requires the existence of the source attribute ++ // /// and also requires that the source prim is UsdShadeConnectableAPI ++ // /// compatible. ++ // /// \note The python wrapping returns a tuple with the valid connections ++ // /// first, followed by the invalid source paths. ++ // /// ++ // /// \sa UsdShadeConnectableAPI::GetConnectedSources ++ // /// ++ // USDSHADE_API ++ // SourceInfoVector GetConnectedSources( ++ // SdfPathVector *invalidSourcePaths = nullptr) const; + +- /// \deprecated +- USDSHADE_API +- bool GetConnectedSource(UsdShadeConnectableAPI *source, +- TfToken *sourceName, +- UsdShadeAttributeType *sourceType) const; ++ // /// \deprecated ++ // USDSHADE_API ++ // bool GetConnectedSource(UsdShadeConnectableAPI *source, ++ // TfToken *sourceName, ++ // UsdShadeAttributeType *sourceType) const; + + /// \deprecated + /// Returns the "raw" (authored) connected source paths for this Input. +@@ -499,17 +499,17 @@ + // ------------------------------------------------------------------------- + /// @{ + +- /// \brief Find what is connected to this Input recursively +- /// +- /// \sa UsdShadeUtils::GetValueProducingAttributes +- USDSHADE_API +- UsdShadeAttributeVector GetValueProducingAttributes( +- bool shaderOutputsOnly = false) const; ++ // /// \brief Find what is connected to this Input recursively ++ // /// ++ // /// \sa UsdShadeUtils::GetValueProducingAttributes ++ // USDSHADE_API ++ // UsdShadeAttributeVector GetValueProducingAttributes( ++ // bool shaderOutputsOnly = false) const; + +- /// \deprecated in favor of calling GetValueProducingAttributes +- USDSHADE_API +- UsdAttribute GetValueProducingAttribute( +- UsdShadeAttributeType* attrType) const; ++ // /// \deprecated in favor of calling GetValueProducingAttributes ++ // USDSHADE_API ++ // UsdAttribute GetValueProducingAttribute( ++ // UsdShadeAttributeType* attrType) const; + + /// @} + diff --git a/pxr_sys/patches/include/pxr/usd/usdShade/output.h.patch b/pxr_sys/patches/include/pxr/usd/usdShade/output.h.patch new file mode 100644 index 0000000..d35a39d --- /dev/null +++ b/pxr_sys/patches/include/pxr/usd/usdShade/output.h.patch @@ -0,0 +1,84 @@ +--- ./pxr/usd/usdShade/output.h ++++ ./pxr/usd/usdShade/output.h +@@ -317,35 +317,35 @@ + bool SetConnectedSources( + std::vector const &sourceInfos) const; + +- // XXX move to new header +- using SourceInfoVector = TfSmallVector; ++ // // XXX move to new header ++ // using SourceInfoVector = TfSmallVector; + +- /// Finds the valid sources of connections for the Output. +- /// +- /// \p invalidSourcePaths is an optional output parameter to collect the +- /// invalid source paths that have not been reported in the returned vector. +- /// +- /// Returns a vector of \p UsdShadeConnectionSourceInfo structs with +- /// information about each upsteam attribute. If the vector is empty, there +- /// have been no valid connections. +- /// +- /// \note A valid connection requires the existence of the source attribute +- /// and also requires that the source prim is UsdShadeConnectableAPI +- /// compatible. +- /// \note The python wrapping returns a tuple with the valid connections +- /// first, followed by the invalid source paths. +- /// +- /// \sa UsdShadeConnectableAPI::GetConnectedSources +- /// +- USDSHADE_API +- SourceInfoVector GetConnectedSources( +- SdfPathVector *invalidSourcePaths = nullptr) const; ++ // /// Finds the valid sources of connections for the Output. ++ // /// ++ // /// \p invalidSourcePaths is an optional output parameter to collect the ++ // /// invalid source paths that have not been reported in the returned vector. ++ // /// ++ // /// Returns a vector of \p UsdShadeConnectionSourceInfo structs with ++ // /// information about each upsteam attribute. If the vector is empty, there ++ // /// have been no valid connections. ++ // /// ++ // /// \note A valid connection requires the existence of the source attribute ++ // /// and also requires that the source prim is UsdShadeConnectableAPI ++ // /// compatible. ++ // /// \note The python wrapping returns a tuple with the valid connections ++ // /// first, followed by the invalid source paths. ++ // /// ++ // /// \sa UsdShadeConnectableAPI::GetConnectedSources ++ // /// ++ // USDSHADE_API ++ // SourceInfoVector GetConnectedSources( ++ // SdfPathVector *invalidSourcePaths = nullptr) const; + +- /// \deprecated Please use GetConnectedSources instead +- USDSHADE_API +- bool GetConnectedSource(UsdShadeConnectableAPI *source, +- TfToken *sourceName, +- UsdShadeAttributeType *sourceType) const; ++ // /// \deprecated Please use GetConnectedSources instead ++ // USDSHADE_API ++ // bool GetConnectedSource(UsdShadeConnectableAPI *source, ++ // TfToken *sourceName, ++ // UsdShadeAttributeType *sourceType) const; + + /// \deprecated + /// Returns the "raw" (authored) connected source paths for this Output. +@@ -402,12 +402,12 @@ + // ------------------------------------------------------------------------- + /// @{ + +- /// \brief Find what is connected to this Output recursively +- /// +- /// \sa UsdShadeUtils::GetValueProducingAttributes +- USDSHADE_API +- UsdShadeAttributeVector GetValueProducingAttributes( +- bool shaderOutputsOnly = false) const; ++ // /// \brief Find what is connected to this Output recursively ++ // /// ++ // /// \sa UsdShadeUtils::GetValueProducingAttributes ++ // USDSHADE_API ++ // UsdShadeAttributeVector GetValueProducingAttributes( ++ // bool shaderOutputsOnly = false) const; + + /// @} + diff --git a/pxr_sys/src/ffi/bindings.rs b/pxr_sys/src/ffi/bindings.rs index 09bcb01..3e0f5b3 100644 --- a/pxr_sys/src/ffi/bindings.rs +++ b/pxr_sys/src/ffi/bindings.rs @@ -19,6 +19,7 @@ include_cpp! { // Declare external types from manual bindings extern_cpp_type!("pxrInternal_v0_22__pxrReserved__::SdfCleanupEnabler", crate::ffi::pxr::SdfCleanupEnabler) + extern_cpp_type!("pxrInternal_v0_22__pxrReserved__::SdfValueTypeNames", crate::ffi::pxr::SdfValueTypeNames) extern_cpp_type!("pxrInternal_v0_22__pxrReserved__::UsdStageCacheContext", crate::ffi::pxr::UsdStageCacheContext) extern_cpp_type!("pxrInternal_v0_22__pxrReserved__::UsdStageWeakPtr", crate::ffi::pxr::UsdStageWeakPtr) extern_cpp_type!("pxrInternal_v0_22__pxrReserved__::VtDictionary", crate::ffi::pxr::VtDictionary) @@ -87,6 +88,7 @@ include_cpp! { generate!("pxrInternal_v0_22__pxrReserved__::SdfTimeCode") generate!("pxrInternal_v0_22__pxrReserved__::SdfValueTypeName") generate!("pxrInternal_v0_22__pxrReserved__::SdfVariantSpec") + generate!("pxrInternal_v0_22__pxrReserved__::SdfSchemaBase") // generate!("pxrInternal_v0_22__pxrReserved__::SdfAssetPath") // generate!("pxrInternal_v0_22__pxrReserved__::SdfPrimSpec") // generate!("pxrInternal_v0_22__pxrReserved__::SdfVariantSetSpec") @@ -178,11 +180,12 @@ include_cpp! { generate!("pxrInternal_v0_22__pxrReserved__::UsdPhysicsTokensType") generate!("pxrInternal_v0_22__pxrReserved__::UsdPhysicsTokensType") - // generate!("pxrInternal_v0_22__pxrReserved__::UsdShadeMaterial") - // generate!("pxrInternal_v0_22__pxrReserved__::UsdShadeShader") - // generate!("pxrInternal_v0_22__pxrReserved__::UsdShadeUtils") - // generate!("pxrInternal_v0_22__pxrReserved__::UsdShadeInput") - // generate!("pxrInternal_v0_22__pxrReserved__::UsdShadeOutput") + generate!("pxrInternal_v0_22__pxrReserved__::UsdShadeInput") + generate!("pxrInternal_v0_22__pxrReserved__::UsdShadeMaterial") + generate!("pxrInternal_v0_22__pxrReserved__::UsdShadeMaterialBindingAPI") + generate!("pxrInternal_v0_22__pxrReserved__::UsdShadeOutput") + generate!("pxrInternal_v0_22__pxrReserved__::UsdShadeShader") + generate!("pxrInternal_v0_22__pxrReserved__::UsdShadeUtils") generate!("pxrInternal_v0_22__pxrReserved__::UsdUtilsRegisteredVariantSet") generate!("pxrInternal_v0_22__pxrReserved__::UsdUtilsSparseAttrValueWriter") diff --git a/pxr_sys/src/ffi/pxr/mod.rs b/pxr_sys/src/ffi/pxr/mod.rs index 497673e..8fbfef2 100644 --- a/pxr_sys/src/ffi/pxr/mod.rs +++ b/pxr_sys/src/ffi/pxr/mod.rs @@ -3,7 +3,7 @@ pub mod tf; pub mod usd; pub mod usd_geom; pub mod usd_physics; -// pub mod usd_shade; +pub mod usd_shade; pub mod usd_utils; pub mod vt; @@ -12,6 +12,7 @@ pub use crate::ffi::bindings::{pxrInternal_v0_22__pxrReserved__::*, *}; // Additional types that are not generated or re-exported by autocxx pub use crate::ffi::pxr::sdf::cleanup_enabler::SdfCleanupEnabler; +pub use crate::ffi::pxr::sdf::value_type_name::SdfValueTypeNames; pub use crate::ffi::pxr::usd::stage::UsdStageWeakPtr; pub use crate::ffi::pxr::usd::stage_cache_context::UsdStageCacheContext; pub use crate::ffi::pxr::vt::dictionary::VtDictionary; diff --git a/pxr_sys/src/ffi/pxr/sdf/mod.rs b/pxr_sys/src/ffi/pxr/sdf/mod.rs index c90829d..ac09682 100644 --- a/pxr_sys/src/ffi/pxr/sdf/mod.rs +++ b/pxr_sys/src/ffi/pxr/sdf/mod.rs @@ -1,3 +1,4 @@ pub mod cleanup_enabler; pub mod layer; pub mod path; +pub mod value_type_name; diff --git a/pxr_sys/src/ffi/pxr/sdf/value_type_name.rs b/pxr_sys/src/ffi/pxr/sdf/value_type_name.rs new file mode 100644 index 0000000..3223f6c --- /dev/null +++ b/pxr_sys/src/ffi/pxr/sdf/value_type_name.rs @@ -0,0 +1,659 @@ +use crate::pxr; +use cpp::cpp; +use std::pin::Pin; + +pub enum SdfValueTypeNames { + Bool, + UChar, + Int, + UInt, + Int64, + UInt64, + Half, + Float, + Double, + TimeCode, + String, + Token, + Asset, + Int2, + Int3, + Int4, + Half2, + Half3, + Half4, + Float2, + Float3, + Float4, + Double2, + Double3, + Double4, + Point3h, + Point3f, + Point3d, + Vector3h, + Vector3f, + Vector3d, + Normal3h, + Normal3f, + Normal3d, + Color3h, + Color3f, + Color3d, + Color4h, + Color4f, + Color4d, + Quath, + Quatf, + Quatd, + Matrix2d, + Matrix3d, + Matrix4d, + Frame4d, + TexCoord2h, + TexCoord2f, + TexCoord2d, + TexCoord3h, + TexCoord3f, + TexCoord3d, + BoolArray, + UCharArray, + IntArray, + UIntArray, + Int64Array, + UInt64Array, + HalfArray, + FloatArray, + DoubleArray, + TimeCodeArray, + StringArray, + TokenArray, + AssetArray, + Int2Array, + Int3Array, + Int4Array, + Half2Array, + Half3Array, + Half4Array, + Float2Array, + Float3Array, + Float4Array, + Double2Array, + Double3Array, + Double4Array, + Point3hArray, + Point3fArray, + Point3dArray, + Vector3hArray, + Vector3fArray, + Vector3dArray, + Normal3hArray, + Normal3fArray, + Normal3dArray, + Color3hArray, + Color3fArray, + Color3dArray, + Color4hArray, + Color4fArray, + Color4dArray, + QuathArray, + QuatfArray, + QuatdArray, + Matrix2dArray, + Matrix3dArray, + Matrix4dArray, + Frame4dArray, + TexCoord2hArray, + TexCoord2fArray, + TexCoord2dArray, + TexCoord3hArray, + TexCoord3fArray, + TexCoord3dArray, +} + +impl SdfValueTypeNames { + #[must_use] + pub fn into_value_type_name(self) -> Pin> { + self.into() + } +} + +impl From for Pin> { + fn from(value: SdfValueTypeNames) -> Self { + Box::pin(unsafe { + match value { + SdfValueTypeNames::Bool => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Bool; + }) + } + + SdfValueTypeNames::UChar => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->UChar; + }) + } + SdfValueTypeNames::Int => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Int; + }) + } + SdfValueTypeNames::UInt => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->UInt; + }) + } + SdfValueTypeNames::Int64 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Int64; + }) + } + SdfValueTypeNames::UInt64 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->UInt64; + }) + } + SdfValueTypeNames::Half => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Half; + }) + } + SdfValueTypeNames::Float => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Float; + }) + } + SdfValueTypeNames::Double => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Double; + }) + } + SdfValueTypeNames::TimeCode => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TimeCode; + }) + } + SdfValueTypeNames::String => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->String; + }) + } + SdfValueTypeNames::Token => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Token; + }) + } + SdfValueTypeNames::Asset => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Asset; + }) + } + SdfValueTypeNames::Int2 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Int2; + }) + } + SdfValueTypeNames::Int3 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Int3; + }) + } + SdfValueTypeNames::Int4 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Int4; + }) + } + SdfValueTypeNames::Half2 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Half2; + }) + } + SdfValueTypeNames::Half3 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Half3; + }) + } + SdfValueTypeNames::Half4 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Half4; + }) + } + SdfValueTypeNames::Float2 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Float2; + }) + } + SdfValueTypeNames::Float3 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Float3; + }) + } + SdfValueTypeNames::Float4 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Float4; + }) + } + SdfValueTypeNames::Double2 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Double2; + }) + } + SdfValueTypeNames::Double3 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Double3; + }) + } + SdfValueTypeNames::Double4 => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Double4; + }) + } + SdfValueTypeNames::Point3h => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Point3h; + }) + } + SdfValueTypeNames::Point3f => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Point3f; + }) + } + SdfValueTypeNames::Point3d => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Point3d; + }) + } + SdfValueTypeNames::Vector3h => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Vector3h; + }) + } + SdfValueTypeNames::Vector3f => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Vector3f; + }) + } + SdfValueTypeNames::Vector3d => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Vector3d; + }) + } + SdfValueTypeNames::Normal3h => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Normal3h; + }) + } + SdfValueTypeNames::Normal3f => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Normal3f; + }) + } + SdfValueTypeNames::Normal3d => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Normal3d; + }) + } + SdfValueTypeNames::Color3h => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Color3h; + }) + } + SdfValueTypeNames::Color3f => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Color3f; + }) + } + SdfValueTypeNames::Color3d => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Color3d; + }) + } + SdfValueTypeNames::Color4h => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Color4h; + }) + } + SdfValueTypeNames::Color4f => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Color4f; + }) + } + SdfValueTypeNames::Color4d => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Color4d; + }) + } + SdfValueTypeNames::Quath => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Quath; + }) + } + SdfValueTypeNames::Quatf => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Quatf; + }) + } + SdfValueTypeNames::Quatd => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Quatd; + }) + } + SdfValueTypeNames::Matrix2d => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Matrix2d; + }) + } + SdfValueTypeNames::Matrix3d => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Matrix3d; + }) + } + SdfValueTypeNames::Matrix4d => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Matrix4d; + }) + } + SdfValueTypeNames::Frame4d => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Frame4d; + }) + } + SdfValueTypeNames::TexCoord2h => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TexCoord2h; + }) + } + SdfValueTypeNames::TexCoord2f => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TexCoord2f; + }) + } + SdfValueTypeNames::TexCoord2d => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TexCoord2d; + }) + } + SdfValueTypeNames::TexCoord3h => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TexCoord3h; + }) + } + SdfValueTypeNames::TexCoord3f => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TexCoord3f; + }) + } + SdfValueTypeNames::TexCoord3d => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TexCoord3d; + }) + } + SdfValueTypeNames::BoolArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->BoolArray; + }) + } + SdfValueTypeNames::UCharArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->UCharArray; + }) + } + SdfValueTypeNames::IntArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->IntArray; + }) + } + SdfValueTypeNames::UIntArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->UIntArray; + }) + } + SdfValueTypeNames::Int64Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Int64Array; + }) + } + SdfValueTypeNames::UInt64Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->UInt64Array; + }) + } + SdfValueTypeNames::HalfArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->HalfArray; + }) + } + SdfValueTypeNames::FloatArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->FloatArray; + }) + } + SdfValueTypeNames::DoubleArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->DoubleArray; + }) + } + SdfValueTypeNames::TimeCodeArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TimeCodeArray; + }) + } + SdfValueTypeNames::StringArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->StringArray; + }) + } + SdfValueTypeNames::TokenArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TokenArray; + }) + } + SdfValueTypeNames::AssetArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->AssetArray; + }) + } + SdfValueTypeNames::Int2Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Int2Array; + }) + } + SdfValueTypeNames::Int3Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Int3Array; + }) + } + SdfValueTypeNames::Int4Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Int4Array; + }) + } + SdfValueTypeNames::Half2Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Half2Array; + }) + } + SdfValueTypeNames::Half3Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Half3Array; + }) + } + SdfValueTypeNames::Half4Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Half4Array; + }) + } + SdfValueTypeNames::Float2Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Float2Array; + }) + } + SdfValueTypeNames::Float3Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Float3Array; + }) + } + SdfValueTypeNames::Float4Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Float4Array; + }) + } + SdfValueTypeNames::Double2Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Double2Array; + }) + } + SdfValueTypeNames::Double3Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Double3Array; + }) + } + SdfValueTypeNames::Double4Array => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Double4Array; + }) + } + SdfValueTypeNames::Point3hArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Point3hArray; + }) + } + SdfValueTypeNames::Point3fArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Point3fArray; + }) + } + SdfValueTypeNames::Point3dArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Point3dArray; + }) + } + SdfValueTypeNames::Vector3hArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Vector3hArray; + }) + } + SdfValueTypeNames::Vector3fArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Vector3fArray; + }) + } + SdfValueTypeNames::Vector3dArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Vector3dArray; + }) + } + SdfValueTypeNames::Normal3hArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Normal3hArray; + }) + } + SdfValueTypeNames::Normal3fArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Normal3fArray; + }) + } + SdfValueTypeNames::Normal3dArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Normal3dArray; + }) + } + SdfValueTypeNames::Color3hArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Color3hArray; + }) + } + SdfValueTypeNames::Color3fArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Color3fArray; + }) + } + SdfValueTypeNames::Color3dArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Color3dArray; + }) + } + SdfValueTypeNames::Color4hArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Color4hArray; + }) + } + SdfValueTypeNames::Color4fArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Color4fArray; + }) + } + SdfValueTypeNames::Color4dArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Color4dArray; + }) + } + SdfValueTypeNames::QuathArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->QuathArray; + }) + } + SdfValueTypeNames::QuatfArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->QuatfArray; + }) + } + SdfValueTypeNames::QuatdArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->QuatdArray; + }) + } + SdfValueTypeNames::Matrix2dArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Matrix2dArray; + }) + } + SdfValueTypeNames::Matrix3dArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Matrix3dArray; + }) + } + SdfValueTypeNames::Matrix4dArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Matrix4dArray; + }) + } + SdfValueTypeNames::Frame4dArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->Frame4dArray; + }) + } + SdfValueTypeNames::TexCoord2hArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TexCoord2hArray; + }) + } + SdfValueTypeNames::TexCoord2fArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TexCoord2fArray; + }) + } + SdfValueTypeNames::TexCoord2dArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TexCoord2dArray; + }) + } + SdfValueTypeNames::TexCoord3hArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TexCoord3hArray; + }) + } + SdfValueTypeNames::TexCoord3fArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TexCoord3fArray; + }) + } + SdfValueTypeNames::TexCoord3dArray => { + cpp!([] -> pxr::SdfValueTypeName as "pxr::SdfValueTypeName" { + return pxr::SdfValueTypeNames->TexCoord3dArray; + }) + } + } + }) + } +} diff --git a/pxr_sys/src/ffi/pxr/usd_geom/geom_xform.rs b/pxr_sys/src/ffi/pxr/usd_geom/geom_xform.rs index 12bc945..0068037 100644 --- a/pxr_sys/src/ffi/pxr/usd_geom/geom_xform.rs +++ b/pxr_sys/src/ffi/pxr/usd_geom/geom_xform.rs @@ -19,4 +19,13 @@ impl pxr::UsdGeomXformOp { }) } } + + #[must_use] + pub fn set_quatf(self: Pin<&mut Self>, value: &pxr::GfQuatf) -> bool { + unsafe { + cpp!([self as "pxr::UsdGeomXformOp *", value as "const pxr::GfQuatf *"] -> bool as "bool" { + return self->Set(*value); + }) + } + } } diff --git a/pxr_sys/src/ffi/pxr/usd_geom/mod.rs b/pxr_sys/src/ffi/pxr/usd_geom/mod.rs index 4fc0dee..865c3d4 100644 --- a/pxr_sys/src/ffi/pxr/usd_geom/mod.rs +++ b/pxr_sys/src/ffi/pxr/usd_geom/mod.rs @@ -1 +1,8 @@ pub mod geom_xform; + +crate::macros::impl_vector_element!( + [Opaque] + "pxrInternal_v0_22__pxrReserved__$UsdGeomSubset", + "UsdGeomSubset", + crate::pxr::UsdGeomSubset +); diff --git a/pxr_sys/src/ffi/pxr/usd_shade/material_binding_api.rs b/pxr_sys/src/ffi/pxr/usd_shade/material_binding_api.rs new file mode 100644 index 0000000..b2a432c --- /dev/null +++ b/pxr_sys/src/ffi/pxr/usd_shade/material_binding_api.rs @@ -0,0 +1,18 @@ +use crate::pxr; + +crate::macros::impl_vector_element!( + [Opaque] + "pxrInternal_v0_22__pxrReserved__$UsdShadeMaterialBindingAPI_CollectionBinding", + "UsdShadeMaterialBindingAPI_CollectionBinding", + pxr::UsdShadeMaterialBindingAPI_CollectionBinding +); + +impl pxr::UsdShadeMaterialBindingAPI { + pub fn bind(self: std::pin::Pin<&mut Self>, material: &pxr::UsdShadeMaterial) { + unsafe { + cpp::cpp!([self as "pxr::UsdShadeMaterialBindingAPI *", material as "const pxr::UsdShadeMaterial *"] { + self->Bind(*material); + }); + }; + } +} diff --git a/pxr_sys/src/ffi/pxr/usd_shade/mod.rs b/pxr_sys/src/ffi/pxr/usd_shade/mod.rs index 1da76e1..09fcdb9 100644 --- a/pxr_sys/src/ffi/pxr/usd_shade/mod.rs +++ b/pxr_sys/src/ffi/pxr/usd_shade/mod.rs @@ -1 +1,9 @@ +pub mod material_binding_api; pub mod output; + +crate::macros::impl_vector_element!( + [Opaque] + "pxrInternal_v0_22__pxrReserved__$UsdShadeMaterial", + "UsdShadeMaterial", + crate::pxr::UsdShadeMaterial +);