بنقرة واحدة
application-flow
// High-level overview of a typical ovrtx application lifecycle. Use when user asks how to structure an ovrtx program, what the main steps are, or how the pieces fit together.
// High-level overview of a typical ovrtx application lifecycle. Use when user asks how to structure an ovrtx program, what the main steps are, or how the pieces fit together.
Asynchronous operation patterns including polling, timeouts, and non-blocking workflows. Use when user asks about async rendering, non-blocking operations, polling, timeouts, or parallel rendering.
Creating persistent attribute bindings for efficient repeated writes to the same prims and attribute. Use when user asks about persistent bindings, repeated writes, efficient animation loops, bind_attribute, or updating transforms every frame with caller-owned tensors. Use mapping-attributes when the hot path needs zero-copy direct writes into ovrtx buffers.
Binding materials to prims at runtime. Use when user asks to assign a material, change a material, set material binding, or swap materials on a prim.
Available camera render outputs for Real-Time Path-Tracing (RT2) mode. Use when user asks what AOVs/render vars are available, what format or dtype an output has, or how to read a specific output like depth, normals, albedo, or distance.
Cloning USD subtrees to create copies at new paths. Use when user asks to clone, duplicate, copy a prim, or create instances of existing geometry.
Authoring and configuring OmniLidar sensor prims and lidar PointCloud render outputs. Use when user asks to create a lidar scene, configure an OmniLidar prim, choose lidar output frame/coordinate behavior, or request lidar PointCloud channels.
| name | application-flow |
| description | High-level overview of a typical ovrtx application lifecycle. Use when user asks how to structure an ovrtx program, what the main steps are, or how the pieces fit together. |
| license | LicenseRef-NvidiaProprietary |
| version | 0.3.0 |
| author | NVIDIA ovrtx |
| tags | ["ovrtx","workflow","lifecycle"] |
| tools | ["Read","Grep"] |
Use this skill when the user asks how to structure an ovrtx program, what the main steps are, or how the pieces fit together.
Resolve inputs in this order: existing repository files and referenced snippets, explicit user request, then broader agent context.
> **Source:** snippet before writing or explaining API usage.This skill has no scripts.
Every ovrtx application follows the same core lifecycle, whether in Python or C. This skill gives the high-level sequence and points to the detailed skill for each step.
The USD stage contains three prim types that work together to produce rendered output:
UsdGeomCamera prim in the scene hierarchy.rel camera), an output resolution (int2 resolution), and a list of output variables (via rel orderedVars). When you call step(), you pass RenderProduct paths, not Camera paths.LdrColor, HdrColor, DepthSD) that the renderer produces for its parent RenderProduct./World/Camera ← Camera prim (sensor definition)
/Render/Camera ← RenderProduct prim (render configuration)
/Render/Camera/LdrColor ← RenderVar prim (output variable)
/Render/Camera/HdrColor ← RenderVar prim (output variable)
Key implications for agents:
step() takes RenderProduct paths, not Camera paths. If you pass a Camera path, nothing will render.omni:rtx:rtpt:maxBounces) are written as attributes on the RenderProduct prim, not on the Camera prim. See the render-settings skill./World. Render configuration (resolution, outputs, render mode) is on RenderProduct prims, typically under /Render.1. Create renderer → renderer-creation
2. Load USD scene(s) → loading-usd
3. [Optional] Clone prims → cloning-prims
4. Render loop:
a. Write attributes → writing-transforms, writing-attributes
b. Step renderer → stepping-and-rendering
c. Read output → reading-render-output
5. Cleanup
Source:
examples/python/minimal/main.pysnippetcreate-rendererFollowed by:
examples/python/minimal/main.pysnippetadd-usdFollowed by:
examples/python/minimal/main.pysnippetstepFollowed by:
examples/python/minimal/main.pysnippetread-render-outputFor the full lifecycle with attribute writes, bindings, and cloning, compose the relevant skill snippets.
Source:
examples/c/minimal/main.cppsnippetcreate-rendererFollowed by:
examples/c/minimal/main.cppsnippetload-usd-and-waitFollowed by:
examples/c/minimal/main.cppsnippetstep-rendererFollowed by:
examples/c/minimal/main.cppsnippetfetch-resultsFollowed by:
examples/c/minimal/main.cppsnippetmap-rendered-output-cpuFollowed by:
examples/c/minimal/main.cppsnippetunmap-and-cleanup
| Aspect | Python | C |
|---|---|---|
| Renderer lifetime | GC or explicit del | ovrtx_destroy_renderer() |
| USD loading | open_usd() blocks | ovrtx_open_usd_from_file() is async; must poll/wait |
| Step | step() returns outputs directly | ovrtx_step() + ovrtx_wait_op() + ovrtx_fetch_results() |
| Output access | var = render_vars["..."].map() | ovrtx_map_render_var_output() + ovrtx_unmap_render_var_output() |
| Result cleanup | Automatic (GC) | Must call ovrtx_destroy_results() |
| Error handling | Python exceptions (RuntimeError) | Check ovrtx_result_t.status + ovrtx_get_last_error() |
libEGL.so when shared graphics resources are torn down between renderers. This can happen if keep_system_alive is configured to false, or if ovrtx_initialize() is not called before the multi-renderer lifecycle. In the implicit-initialization pattern (when ovrtx_initialize() is not called), the keep_system_alive config setting is effectively ignored. Avoid this by both configuring keep_system_alive to true (RendererConfig(keep_system_alive=True) in Python, ovrtx_config_entry_keep_system_alive(true) in C) and calling ovrtx_initialize() before creating renderers. If this is not possible, or the crash persists, a further workaround is to set the environment variable VK_LOADER_DISABLE_DYNAMIC_LIBRARY_UNLOADING=1.ovrtx_open_usd_from_file, ovrtx_clone_usd, ovrtx_step) returns an ovrtx_enqueue_result_t. You must wait on the op_index before using the results.ovrtx_destroy_results() after processing. ovrtx will log warnings if results are leaked.open_usd, step, clone_usd) handles waiting internally. Use the _async variants for explicit control.attribute-bindings skill) or mapping (see mapping-attributes skill) instead of per-frame write_attribute calls.error-handling skill for robust error checking patterns in both languages.> **Source:** directives in this skill to locate tested snippets before reusing API patterns.