NVIDIA Index example code nvidia_logo_transpbg.gif Up
xac_compute.h
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright 2023 NVIDIA Corporation. All rights reserved.
3 *****************************************************************************/
6
7#pragma once
8
9#include <string>
10#include <map>
11#include <mi/math/vector.h>
12#include <mi/math/matrix.h>
13#include <mi/math/bbox.h>
14#include <mi/neuraylib/iserializer.h> // Tag_struct
15#include <sstream>
16#include <fstream>
17
18namespace xac_compute {
19
20// forward decls
21class IXac_compute_scene_setup;
22
23
24typedef mi::math::Bbox<mi::Sint32, 2> Bbox2i;
25typedef mi::math::Bbox<mi::Uint32, 2> Bbox2u;
26typedef mi::math::Bbox<mi::Float32, 2> Bbox2f;
27typedef mi::math::Bbox<mi::Sint32, 3> Bbox3i;
28typedef mi::math::Bbox<mi::Uint32, 3> Bbox3u;
29typedef mi::math::Bbox<mi::Float32, 3> Bbox3f;
30
31typedef mi::math::Vector<mi::Uint32, 2> Vec2u;
32typedef mi::math::Vector<mi::Sint32, 2> Vec2i;
33typedef mi::math::Vector<mi::Float32, 2> Vec2f;
34typedef mi::math::Vector<mi::Float64, 2> Vec2d;
35
36typedef mi::math::Vector<mi::Uint32, 3> Vec3u;
37typedef mi::math::Vector<mi::Sint32, 3> Vec3i;
38typedef mi::math::Vector<mi::Float32, 3> Vec3f;
39typedef mi::math::Vector<mi::Float64, 3> Vec3d;
40
41typedef mi::math::Vector<mi::Uint32, 4> Vec4u;
42typedef mi::math::Vector<mi::Sint32, 4> Vec4i;
43typedef mi::math::Vector<mi::Float32, 4> Vec4f;
44typedef mi::math::Vector<mi::Float64, 4> Vec4d;
45
46typedef mi::math::Matrix<mi::Float32, 2, 2> Mat2f;
47typedef mi::math::Matrix<mi::Float32, 3, 3> Mat3f;
48typedef mi::math::Matrix<mi::Float32, 4, 4> Mat4f;
49
50typedef mi::math::Matrix<mi::Float64, 2, 2> Mat2d;
51typedef mi::math::Matrix<mi::Float64, 3, 3> Mat3d;
52typedef mi::math::Matrix<mi::Float64, 4, 4> Mat4d;
53
54
55// Simple wrapper around map<string, string>
56// returns empty string for non-existing keys.
58{
59public:
60 typedef std::map<std::string, std::string> Map_type;
61
62 // non-const access creates key
63 std::string& operator[](const std::string& key)
64 {
65 return m_map[key];
66 }
67
68 // const access returns empty string, if key not present
69 std::string operator[](const std::string& key) const
70 {
71 Map_type::const_iterator it = m_map.find(key);
72 return (it != m_map.end()) ? it->second : std::string();
73 }
74
75
76 // access wrapped map for legacy code
77 Map_type& get_map() { return m_map; }
78 const Map_type& get_map() const { return m_map; }
79 bool has_key(const std::string& key) const { return m_map.find(key) != m_map.end(); }
80
81private:
82 Map_type m_map;
83};
84
85inline bool has_key(const Option_map& opt_map, const std::string& key) { return opt_map.has_key(key); }
86
87
89{
90public:
91 Usage_helper(const Option_map& opt_map)
92 : m_opt_map(opt_map), m_indent(" ") {}
93
94 void opt(const std::string& opt, const char* arg_info, const char* subline = "")
95 {
96 m_stream << m_indent << "[-" << opt;
97 if (arg_info) {
98 m_stream << " " << arg_info;
99 }
100 m_stream << "]";
101 const std::string def = m_opt_map[opt];
102 if (def.length() > 0) {
103 m_stream << " (default: " << def << " )";
104 }
105 m_stream << "\n";
106 if (subline && subline[0]) {
107 line(subline);
108 }
109 }
110
111 void line(const char* info = "")
112 {
113 m_stream << m_indent << " " << info << "\n";
114 }
115
116 std::string text() const { return m_stream.str(); }
117
118 std::ostringstream& stream() { return m_stream; }
119
120private:
121 std::ostringstream m_stream;
122 const Option_map& m_opt_map;
123 std::string m_indent;
124};
125
126
128{
129 mi::neuraylib::Tag compute_program_tag;
130 mi::neuraylib::Tag scene_element_tag;
131 mi::neuraylib::Tag plane_compute_program_tag;
132 mi::neuraylib::Tag plane_tag;
135};
136
137// to be filled by IXac_compute_scene_setup::create_scene()
139{
143};
144
145
146}//xac_compute
147
bool has_key(const std::string &key) const
Definition: xac_compute.h:79
std::string & operator[](const std::string &key)
Definition: xac_compute.h:63
const Map_type & get_map() const
Definition: xac_compute.h:78
std::string operator[](const std::string &key) const
Definition: xac_compute.h:69
Map_type & get_map()
Definition: xac_compute.h:77
std::map< std::string, std::string > Map_type
Definition: xac_compute.h:60
std::ostringstream & stream()
Definition: xac_compute.h:118
Usage_helper(const Option_map &opt_map)
Definition: xac_compute.h:91
std::string text() const
Definition: xac_compute.h:116
void line(const char *info="")
Definition: xac_compute.h:111
void opt(const std::string &opt, const char *arg_info, const char *subline="")
Definition: xac_compute.h:94
XAC compute example scenes.
Definition: xac_compute.cpp:27
mi::math::Vector< mi::Uint32, 4 > Vec4u
Definition: xac_compute.h:41
mi::math::Bbox< mi::Uint32, 2 > Bbox2u
Definition: xac_compute.h:25
mi::math::Vector< mi::Float64, 3 > Vec3d
Definition: xac_compute.h:39
mi::math::Vector< mi::Sint32, 2 > Vec2i
Definition: xac_compute.h:32
mi::math::Matrix< mi::Float64, 2, 2 > Mat2d
Definition: xac_compute.h:50
mi::math::Bbox< mi::Float32, 3 > Bbox3f
Definition: xac_compute.h:29
mi::math::Bbox< mi::Float32, 2 > Bbox2f
Definition: xac_compute.h:26
mi::math::Bbox< mi::Sint32, 2 > Bbox2i
Definition: xac_compute.h:24
bool has_key(const Option_map &opt_map, const std::string &key)
Definition: xac_compute.h:85
mi::math::Vector< mi::Sint32, 4 > Vec4i
Definition: xac_compute.h:42
mi::math::Vector< mi::Float64, 2 > Vec2d
Definition: xac_compute.h:34
mi::math::Matrix< mi::Float64, 3, 3 > Mat3d
Definition: xac_compute.h:51
mi::math::Vector< mi::Float32, 2 > Vec2f
Definition: xac_compute.h:33
mi::math::Vector< mi::Uint32, 3 > Vec3u
Definition: xac_compute.h:36
mi::math::Vector< mi::Float32, 4 > Vec4f
Definition: xac_compute.h:43
mi::math::Matrix< mi::Float32, 3, 3 > Mat3f
Definition: xac_compute.h:47
mi::math::Matrix< mi::Float32, 4, 4 > Mat4f
Definition: xac_compute.h:48
mi::math::Vector< mi::Float32, 3 > Vec3f
Definition: xac_compute.h:38
mi::math::Vector< mi::Uint32, 2 > Vec2u
Definition: xac_compute.h:31
mi::math::Vector< mi::Sint32, 3 > Vec3i
Definition: xac_compute.h:37
mi::math::Matrix< mi::Float64, 4, 4 > Mat4d
Definition: xac_compute.h:52
mi::math::Matrix< mi::Float32, 2, 2 > Mat2f
Definition: xac_compute.h:46
mi::math::Vector< mi::Float64, 4 > Vec4d
Definition: xac_compute.h:44
mi::math::Bbox< mi::Uint32, 3 > Bbox3u
Definition: xac_compute.h:28
mi::math::Bbox< mi::Sint32, 3 > Bbox3i
Definition: xac_compute.h:27
mi::neuraylib::Tag plane_tag
Definition: xac_compute.h:132
mi::neuraylib::Tag scene_element_tag
Definition: xac_compute.h:130
mi::neuraylib::Tag plane_compute_program_tag
Definition: xac_compute.h:131
mi::neuraylib::Tag compute_program_tag
Definition: xac_compute.h:129
std::string rtc_program_source
Definition: xac_compute.h:141
std::string plane_rtc_program_source
Definition: xac_compute.h:142
Compute_launch_info compute_launch_info
Definition: xac_compute.h:140