nvidia-omniverse/ovrtx/update-0-3-0-4-c
Claude Code and agent skill by nvidia-omniverse/ovrtx
- community
Checking that the SKILL.md file is still in the repository.
Upgrade skill: migrate user C/C++ application code from ovrtx 0.3.x standalone stage APIs to ovrtx 0.4.x attached to ovstage 0.1.x. Use when the user asks to "upgrade from 0.3 to 0.4 with ovstage", "ovrtx 0.4 ovstage 0.1 migration", "migrate my ovrtx app", or "port my application to ovstage". Reference implementations: `examples/c/minimal` and `examples/c/status-queries` (Recipe A).
Install
npx vskill@latest install nvidia-omniverse/ovrtx/update-0-3-0-4-cSKILL.md
Update 0.3 to 0.4 + ovstage 0.1 (C API)
Standalone ovrtx 0.3.x stage APIs -> ovrtx 0.4.x + ovstage 0.1.x attached mode, for user application code.
Version Scope
| Version | What changes | ||
|---|---|---|---|
| Source | ovrtx 0.3.x | Standalone stage ownership: ovrtx_open_usd_*, ovrtx_write_attribute, ovrtx_query_prims, ovrtx_step with the renderer-owned runtime stage | |
| Target ovrtx | ovrtx 0.4.x | Attach APIs (ovrtx_attach_ovstage, ovrtx_update_from_stage, ovrtx_step_with_stage); OVRTX_DEPRECATED markers on stage-building/query/write/read entry points in `../../include/ovrtx/ovrtx.h` | |
| New dependency | ovstage 0.1.x | Scene data plane (<ovstage/ovstage.h>), population bridge (<ovstage/ovstage_population.h>), ordinal-keyed writes |
When to Use
Use this skill when the user asks to upgrade an existing C/C++ ovrtx application from 0.3.x to 0.4.x, where the same code must now feed the renderer through an attached ovstage instance. Typical prompts: "upgrade from 0.3 to 0.4 with ovstage", "ovrtx 0.4 ovstage 0.1 migration", "migrate my ovrtx app", "port my application to ovstage".
Do not use this skill for:
- 0.2 -> 0.3 (see `update-0_2-0_3`).
- Python migration — only the C API is covered here.
In scope for example work: porting or validating the public C examples minimal and status-queries (Recipe A — one-shot load + render). These are the canonical reference implementations for this skill.
Out of scope for example work: material-editor, vulkan-interop, lidar, radar, and Python examples — blocked on ovstage API gaps or sensor output (see Example Port Status below).
Inputs
Resolve inputs in this order:
- Target language: C or C++ (skill covers only the C API surface).
- Dependency manager and package pin (the app's
CMakeLists.txt/ovrtx.cmakeor equivalent must be able to addovstage::ovstage_static). - Which deprecated ovrtx entry points the app currently calls (see the mapping table below).
- Whether the app does one-shot scene loading (open a USD file once, then step) or incremental scene edits (references, resets, attribute writes, time samples).
- Whether the app uses picking, selection outlines, or the renderer's path dictionary — these stay on ovrtx and change independently.
Prerequisites
- Read `../update-0_3-0_4-common/Reference.md` for language-agnostic ownership, ordering, path-dictionary, transform, exposure, and async-boundary guidance.
- Read the
CHANGELOG.md[0.4.0]section in `../../CHANGELOG.md` for release-level context, but if any bullet contradicts this skill or the current doxygen inovrtx.h, trust the header and this skill. The definitive statements for the attach-mode update contract live at the top of the[0.4.0]### Changedblock. - The app must be able to pull
ovstage0.1.x (a new dependency in 0.4). Confirm the CMake / package fetch step provides bothovrtx::ovrtx_staticandovstage::ovstage_static. - Preserve user code structure. This is an API migration, not a refactor.
C API Notes After Reading The Common Reference
The common reference covers language-agnostic migration gotchas. This section only adds C API specifics for those topics.
Renderer-side APIs that stay on ovrtx
Keep renderer-side selection and picking calls on ovrtx:
ovrtx_enqueue_pick_queryand theOVRTX_RENDER_VAR_PICK_HITrender variable in `ovrtx.h`.ovrtx_set_selection_group_stylesin `ovrtx.h`.ovrtx_set_selection_outline_groupandovrtx_set_pickablein `ovrtx_attributes.h`.
The `picking-selection` topic skill stays authoritative for the API shape; only the scene-ingest and step calls around it change.
Path dictionaries
- For ovstage queries and writes, use
ovstage_get_path_dictionary(stage). - For ovrtx outputs and functions that expose or consume ovrtx path IDs, use
ovrtx_get_path_dictionary(renderer).
Transform and attribute helpers
The ovstage public include tree does not provide an equivalent ovstage_attributes.h. Convenience helpers in `ovrtx_attributes.h` - transform writers, ovrtx_set_path_attributes, ovrtx_set_token_attributes, ovrtx_set_selection_outline_group, and ovrtx_set_pickable - do not have drop-in ovstage counterparts. For ovstage writes, user code must:
- Build a path list or query with
ovstage_query/ovstage_query_from_path_list. - Intern any tokens with
ovstage_get_path_dictionary. - Fill
ovstage_write_data_texplicitly and callovstage_write_attribute.
Ovstage transform writes use canonical omni:xform as a 2-D 4x4 `double` matrix with OVSTAGE_SEMANTIC_MATRIX (row-vector convention, translation in the last row; ndim=2, shape=[4,4], dtype={kDLFloat,64,1}, is_array=false). See the transform recipe in `ovstage examples/c/runtime-loop/main.cpp`. If the 0.3 app used ovrtx_set_reset_xform_stack, author omni:resetXformStack = true on the affected prims so the ovstage-side transforms are still interpreted as world-space.
Async wait APIs
Ovstage exposes two independent async models. Using the wrong waiter is a common porting bug.
| Work kind | Enqueue returns | Wait with | Per-op error detail | |
|---|---|---|---|---|
USD population (ovstage_population_open_usd_*, add_usd_reference_*, apply_usd_changes, apply_usd_time, reset_usd) | ovstage_population_enqueue_result_t | ovstage_population_wait_op(stage, op_index, ...) | ovstage_population_get_last_op_error(op_id) or ovstage_population_get_last_error() | |
Data-plane writes / write floor (ovstage_advance_write_floor, ovstage_write_attribute, reads, queries) | ovstage_enqueue_result_t | ovstage_wait_op(stage, op_index, ...) | ovstage_get_last_op_error(stage, op_id) or ovstage_get_last_error() |
Notes:
ovstage_get_last_error()andovstage_population_get_last_error()take no instance argument (parameterless). Do not passstage— older drafts did and will not compile against current headers.ovrtx_query_op_status/ovrtx_wait_opapply only to ovrtx ops (e.g.ovrtx_step_with_stage). They do not report progress for ovstage population loads. The portedstatus-queriesexample polls status while waiting on render steps; USD open useswait_population_op(blocking wait, noquery_op_status).
What 0.4 Adds
From CHANGELOG.md [0.4.0]:
- Attach APIs.
ovrtx_attach_ovstage,ovrtx_detach_ovstage, andovrtx_step_with_stage(renderer, render_products, delta_time, ordinal, ...)in `ovrtx.h`. While attached, stage-building / write / map entry points returnOVRTX_API_ERROR; read-only queries and rendering flow through the attached stage. - State refresh.
ovrtx_update_from_stage(renderer, ordinal)— required after incremental population / attribute changes (see Recipe B). It performs a Hydra rebuild after a wholesaleovstage_population_open_usd_*, but that rebuild also happens implicitly on the firstovrtx_step_with_stage, so it can be skipped for one-shot loads. Time-only updates (ovstage_population_apply_usd_time) are documented no-ops. - Write-floor gates.
ovrtx_step_with_stageandovrtx_update_from_stagereject calls untilovstage_advance_write_floorhas run at least once (write floor must be > 0), pointing users atovstage_population_open_usd_*/ovstage_write_* + ovstage_advance_write_floor. - Picking NDC.
ovrtx_pick_query_desc_tnow usesleft_ndc/top_ndc/right_ndc/bottom_ndcinstead of pixel fields. - Read handle release.
ovrtx_release_read_result(renderer, read_handle, cuda_sync)now takes theovrtx_read_handle_tdirectly; theovrtx_read_map_handle_ttypedef andovrtx_read_output_t::map_handleare removed.
The 0.3 deprecated entry points still compile in 0.4 — the compiler emits OVRTX_DEPRECATED warnings for each — but they should be replaced with the ovstage-based equivalents below.
For a phased migration, ovrtx_config_entry_suppress_deprecation_warnings(true) temporarily suppresses native runtime warnings. It does not suppress OVRTX_DEPRECATED compiler diagnostics, change deprecated behavior, or extend the API removal schedule.
Architecture
Headers, CMake, and Runtime Setup
Headers
- Include both headers in user code:
#include <ovrtx/ovrtx.h>and#include <ovstage/ovstage.h>. They coexist in the same translation unit via the sharedOVX_SHARED_STRING_TYPES_DEFINEDsentinel guard (seeCHANGELOG.md[0.4.0]). <ovrtx/ovrtx.h>already pulls in<ovstage/ovstage_api/ovstage_api_types.h>internally for the attach types. Do not add a second explicit include of<ovstage/ovstage_api/ovstage_api_types.h>alongside<ovrtx/ovrtx.h>— the direct-include path redefinesovstage_instance_tincompatibly.<ovstage/ovstage.h>transitively includes<ovstage/ovstage_population.h>— no separate population include is required forovstage_population_open_usd_from_file.
CMake and linking
Each library is an independent package with its own FetchContent / find_package target:
Copy ovstage.cmake from the examples tree — do not reduce it to "copy ovstage.dll next to the exe." The runtime setup is load-order sensitive.
Windows: ovstage.dll must not load at process init
Attach mode needs one shared USD runtime in-process. On Windows, ovstage.dll statically imports ov_25.11usd_ms.dll and tbb12.dll. If the OS loads ovstage.dll at process init (before ovrtx_create_renderer has loaded the single plugins/ov_25.11usd_ms.dll from ovrtx's package), you get a second USD module instance → split PlugRegistry / TfType state → crashes or subtle corruption.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/update-0_3-0_4-c/SKILL.md
Popularity
- Repository stars
- 257
- Repository forks
- 41
- 7-day trend score
- 27
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/nvidia-omniverse/ovrtx/update-0-3-0-4-c)