11#include "utility/example_shared.h"
13#include <nv/index/iindex.h>
14#include <nv/index/isession.h>
15#include <nv/index/iscene.h>
16#include <nv/index/icamera.h>
21#include <nv/index/app/application_layer_common_utility.h>
22#include <nv/index/app/forwarding_logger.h>
23#include <nv/index/app/index_connect.h>
24#include <nv/index/app/string_dict.h>
25#include <nv/index/app/time_functions.h>
29 public nv::index::app::Index_connect
50 virtual bool evaluate_options(nv::index::app::String_dict& sdict) CPP11_OVERRIDE;
53 mi::neuraylib::INetwork_configuration* network_configuration,
54 nv::index::app::String_dict& options) CPP11_OVERRIDE
59 const bool is_unittest = nv::index::app::get_bool(options.get(
"unittest"));
62 info_cout(
"NETWORK: disabled networking mode.", options);
63 network_configuration->set_mode(mi::neuraylib::INetwork_configuration:
:MODE_OFF);
67 return initialize_networking_as_default_udp(network_configuration, options);
73 void setup_camera(nv::index::IPerspective_camera* cam)
const;
78 void setup_render_frame_scene(
79 nv::index::IScene* scene_edit,
80 const mi::math::Bbox_struct< mi::Float32, 3 >& xyz_roi_st,
81 const mi::neuraylib::Tag& camera_tag,
82 mi::neuraylib::IDice_transaction* dice_transaction)
const;
85 mi::neuraylib::Tag m_session_tag;
87 mi::base::Handle<nv::index::ICluster_configuration> m_cluster_configuration;
89 mi::base::Handle<nv::index::app::canvas_infrastructure::IIndex_image_file_canvas> m_image_file_canvas;
91 std::string m_outfname;
99 mi::Sint32 exit_code = 0;
101 m_cluster_configuration = get_index_interface()->get_api_component<nv::index::ICluster_configuration>();
105 m_image_file_canvas = create_image_file_canvas(get_application_layer_interface());
110 check_success(is_local_host_joined(m_cluster_configuration.get()));
114 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
115 m_global_scope->create_transaction<mi::neuraylib::IDice_transaction>());
119 m_session_tag = m_index_session->create_session(dice_transaction.get());
121 mi::base::Handle< nv::index::ISession const > session(
122 dice_transaction->access< nv::index::ISession
const >(
126 mi::base::Handle< nv::index::IScene > scene_edit(
127 dice_transaction->edit<nv::index::IScene>(session->get_scene()));
137 mi::base::Handle< nv::index::IPerspective_camera > cam(
138 scene_edit->create_camera<nv::index::IPerspective_camera>());
140 setup_camera(cam.get());
141 const mi::neuraylib::Tag camera_tag = dice_transaction->store(cam.get());
144 const mi::math::Vector<mi::Uint32, 2> buffer_resolution(512, 512);
145 m_image_file_canvas->set_resolution(buffer_resolution);
150 mi::math::Bbox_struct< mi::Float32, 3 >
const xyz_roi_st = {
151 { 0.0f, 0.0f, 0.0f, },
152 { 1.0f, 1.0f, 1.0f, },
154 setup_render_frame_scene(scene_edit.get(), xyz_roi_st, camera_tag,
155 dice_transaction.get());
159 ERROR_LOG <<
"The following error message about an invalid region of interest is expected";
161 mi::math::Bbox_struct< mi::Float32, 3 >
const zero_xyz_roi_st = {
162 { 0.0f, 0.0f, 0.0f, },
163 { 0.0f, 0.0f, 0.0f, },
165 setup_render_frame_scene(scene_edit.get(), zero_xyz_roi_st, camera_tag,
166 dice_transaction.get());
169 dice_transaction->commit();
177 const mi::Sint32 frame_idx = 0;
178 const std::string output_fname = get_output_file_name(m_outfname, frame_idx);
179 m_image_file_canvas->set_rgba_file_name(output_fname.c_str());
181 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
182 m_global_scope->create_transaction<mi::neuraylib::IDice_transaction>());
185 m_index_session->update(m_session_tag, dice_transaction.get());
187 mi::base::Handle<nv::index::IFrame_results> frame_results(
188 m_index_rendering->render(
190 m_image_file_canvas.get(),
191 dice_transaction.get()));
194 dice_transaction->commit();
203 const std::string com_name = sdict.get(
"command:",
"<unknown_command>");
204 m_is_unittest = nv::index::app::get_bool(sdict.get(
"unittest",
"false"));
208 if (nv::index::app::get_bool(sdict.get(
"is_call_from_test",
"false")))
210 sdict.insert(
"is_dump_comparison_image_when_failed",
"0");
212 sdict.insert(
"outfname",
"");
213 sdict.insert(
"dice::verbose",
"2");
216 m_outfname = sdict.get(
"outfname",
"");
217 m_test_set_roi = nv::index::app::get_bool(sdict.get(
"test_set_roi",
"false"));
219 info_cout(std::string(
"running ") + com_name, sdict);
220 info_cout(std::string(
"outfname = [") + m_outfname +
221 "], dice::verbose = " + sdict.get(
"dice::verbose"), sdict);
224 if(sdict.is_defined(
"h"))
227 <<
"Usage: " << com_name <<
" [option]\n"
229 <<
" printout this message\n"
230 <<
" [-dice::verbose severity_level]\n"
231 <<
" verbose severity level (3 is info.). (default: " + sdict.get(
"dice::verbose")
233 <<
" [-outfname string]\n"
234 <<
" output ppm file base name. When empty, no output.\n"
235 <<
" A frame number and extension (.ppm) will be added.\n"
236 <<
" (default: [" << m_outfname <<
"])\n"
237 <<
" [-test_set_roi bool]\n"
238 <<
" when false, no ROI set.\n"
239 <<
" (default: [" << m_test_set_roi <<
"])\n"
247void Render_frame::setup_camera(nv::index::IPerspective_camera* cam)
const
252 mi::math::Vector< mi::Float32, 3 >
const from(-3.67f, 24.35f, -40.85f);
253 mi::math::Vector< mi::Float32, 3 >
const to ( 9.5, 9.5, -9.5);
254 mi::math::Vector< mi::Float32, 3 >
const up ( 0.0f, 1.0f, 0.0f);
255 mi::math::Vector<mi::Float32, 3> viewdir = to - from;
258 cam->set(from, viewdir, up);
259 cam->set_aperture(0.033f);
260 cam->set_aspect(1.0f);
261 cam->set_focal(0.03f);
262 cam->set_clip_min(2.0f);
263 cam->set_clip_max(420.0f);
267void Render_frame::setup_render_frame_scene(
268 nv::index::IScene* scene_edit,
269 const mi::math::Bbox_struct< mi::Float32, 3 >& xyz_roi_st,
270 const mi::neuraylib::Tag& camera_tag,
271 mi::neuraylib::IDice_transaction* dice_transaction)
const
276 const mi::math::Bbox< mi::Float32, 3 > xyz_roi(xyz_roi_st);
277 if(xyz_roi.is_volume())
279 scene_edit->set_clipped_bounding_box(xyz_roi_st);
283 INFO_LOG <<
"ROI has no volume, not set the ROI.";
288 mi::math::Matrix<mi::Float32, 4, 4> transform_mat(
289 1.0f, 0.0f, 0.0f, 0.0f,
290 0.0f, 1.0f, 0.0f, 0.0f,
291 0.0f, 0.0f, -1.0f, 0.0f,
292 0.0f, 0.0f, 0.0f, 1.0f
294 scene_edit->set_transform_matrix(transform_mat);
298 scene_edit->set_camera(camera_tag);
303int main(
int argc,
const char* argv[])
305 nv::index::app::String_dict sdict;
306 sdict.insert(
"dice::verbose",
"3");
307 sdict.insert(
"outfname",
"frame_render_frame");
308 sdict.insert(
"unittest",
"0");
309 sdict.insert(
"test_set_roi",
"1");
310 sdict.insert(
"is_dump_comparison_image_when_failed",
"1");
311 sdict.insert(
"is_call_from_test",
"0");
314 sdict.insert(
"dice::network::mode",
"OFF");
317 sdict.insert(
"index::config::set_monitor_performance_values",
"true");
318 sdict.insert(
"index::service",
"rendering_and_compositing");
319 sdict.insert(
"index::cuda_debug_checks",
"false");
322 sdict.insert(
"index::app::components::application_layer::component_name_list",
323 "canvas_infrastructure image io");
332 INFO_LOG <<
"Shutting down ...";
virtual bool initialize_networking(mi::neuraylib::INetwork_configuration *network_configuration, nv::index::app::String_dict &options) CPP11_OVERRIDE
virtual bool evaluate_options(nv::index::app::String_dict &sdict) CPP11_OVERRIDE
nv::index::IFrame_results * render_frame(App_rendering_context &arc, const std::string &output_fname)
int main(int argc, const char *argv[])
#define check_success(expr)