10#include "utility/example_shared.h"
11#include "utility/index_resource.h"
13#include <nv/index/icamera.h>
14#include <nv/index/iconfig_settings.h>
15#include <nv/index/idata_distribution.h>
16#include <nv/index/iindex.h>
17#include <nv/index/ilight.h>
18#include <nv/index/imaterial.h>
19#include <nv/index/iregular_heightfield_patch.h>
20#include <nv/index/iscene.h>
21#include <nv/index/isession.h>
23#include <nv/index/app/index_connect.h>
24#include <nv/index/app/string_dict.h>
26#include "utility/app_rendering_context.h"
27#include "utility/canvas_utility.h"
34 public nv::index::app::Index_connect
40 m_heightfield_tag(mi::neuraylib:
:NULL_TAG),
56 virtual bool evaluate_options(nv::index::app::String_dict& sdict) CPP11_OVERRIDE;
59 mi::neuraylib::INetwork_configuration* network_configuration,
60 nv::index::app::String_dict& options) CPP11_OVERRIDE
65 const bool is_unittest = nv::index::app::get_bool(options.get(
"unittest"));
68 info_cout(
"NETWORK: disabled networking mode.", options);
69 network_configuration->set_mode(mi::neuraylib::INetwork_configuration:
:MODE_OFF);
73 return initialize_networking_as_default_udp(network_configuration, options);
79 bool render_frame(
const std::string& output_fname,
80 const std::string& verify_fname);
85 mi::Sint32 get_next_frame_idx()
const
99 void compute_heightfield(
100 bool is_normal_recalc,
101 bool is_set_constant_normal,
102 mi::Sint32 compute_id);
107 void setup_camera(nv::index::IPerspective_camera* cam)
const;
111 mi::neuraylib::Tag m_session_tag;
113 mi::base::Handle<nv::index::ICluster_configuration> m_cluster_configuration;
115 mi::base::Handle<nv::index::app::canvas_infrastructure::IIndex_image_file_canvas> m_image_file_canvas;
117 std::string m_outfbase;
119 std::string m_verify_image_path_base;
120 mi::math::Vector<mi::Uint32, 2> m_heightfield_size;
121 std::string m_heightfield_infile;
122 mi::math::Vector<mi::Float32, 2> m_heightfield_range;
123 mi::math::Vector<mi::Sint32, 2> m_use_normal_recalc;
124 mi::math::Vector<mi::Sint32, 2> m_set_normal_const;
125 mi::neuraylib::Tag m_heightfield_tag;
126 mi::Sint32 m_frame_idx;
127 mi::math::Bbox<mi::Float32, 3> m_roi;
133 m_cluster_configuration = get_index_interface()->get_api_component<nv::index::ICluster_configuration>();
137 m_image_file_canvas = create_image_file_canvas(get_application_layer_interface());
142 check_success(is_local_host_joined(m_cluster_configuration.get()));
144 mi::Sint32 exit_code = 0;
149 const mi::Sint32 fidx = get_next_frame_idx();
150 const std::string outfbase = get_output_file_name(m_outfbase, fidx);
151 const std::string refimg_fname = get_output_file_name(m_verify_image_path_base, fidx);
155 INFO_LOG <<
"use_normal_recalc: " << m_use_normal_recalc
156 <<
", set_normal_const: " << m_set_normal_const;
158 mi::Sint32 compute_id = 0;
160 const bool is_normal_recalc = (m_use_normal_recalc.x == 1) ?
true :
false;
161 const bool is_set_constant_normal = (m_set_normal_const.x == 1) ?
true :
false;
162 compute_heightfield(is_normal_recalc, is_set_constant_normal, compute_id);
164 const mi::Sint32 fidx = get_next_frame_idx();
165 const std::string outfbase = get_output_file_name(m_outfbase, fidx);
166 const std::string refimg_fname = get_output_file_name(m_verify_image_path_base, fidx);
173 const bool is_normal_recalc = (m_use_normal_recalc.y == 1) ?
true :
false;
174 const bool is_set_constant_normal = (m_set_normal_const.y == 1) ?
true :
false;
175 compute_heightfield(is_normal_recalc, is_set_constant_normal, compute_id);
177 const mi::Sint32 fidx = get_next_frame_idx();
178 const std::string outfbase = get_output_file_name(m_outfbase, fidx);
179 const std::string refimg_fname = get_output_file_name(m_verify_image_path_base, fidx);
189 const std::string com_name = sdict.get(
"command:",
"<unknown_command>");
190 m_is_unittest = nv::index::app::get_bool(sdict.get(
"unittest",
"false"));
194 if (nv::index::app::get_bool(sdict.get(
"is_call_from_test",
"false")))
196 sdict.insert(
"is_dump_comparison_image_when_failed",
"0");
198 sdict.insert(
"dice::verbose",
"2");
199 sdict.insert(
"outfbase",
"");
203 m_outfbase = sdict.get(
"outfbase",
"");
204 m_verify_image_path_base = sdict.get(
"verify_image_path_base",
"");
205 m_heightfield_size = nv::index::app::get_vector_from_string<mi::Uint32,2> (sdict.get(
"heightfield_size"));
206 m_heightfield_infile = sdict.get(
"heightfield_infile");
207 m_heightfield_range = nv::index::app::get_vector_from_string<mi::Float32,2>(sdict.get(
"heightfield_range"));
208 m_use_normal_recalc = nv::index::app::get_vector_from_string<mi::Sint32,2> (sdict.get(
"use_normal_recalc"));
209 m_set_normal_const = nv::index::app::get_vector_from_string<mi::Sint32,2> (sdict.get(
"set_normal_const"));
210 m_roi = nv::index::app::get_bbox_from_string<mi::Float32,3>(sdict.get(
"roi"));
214 if (m_heightfield_infile.empty())
216 ERROR_LOG <<
"No -heightfield_infile option specified. Need -heightfield_file.";
219 if (m_heightfield_size == mi::math::Vector<mi::Uint32, 2>(0, 0))
221 ERROR_LOG <<
"Invalid heightfield_size (0, 0). Need -heightfield_size.";
224 if (m_heightfield_range == mi::math::Vector<mi::Float32,2>(0.0f, 0.0f))
226 ERROR_LOG <<
"Invalid heightfield_range (0, 0). Need -heightfield_range.";
230 info_cout(std::string(
"running ") + com_name, sdict);
231 info_cout(
"outfbase = [" + m_outfbase +
232 "], verify_image_fname = [" + m_verify_image_path_base +
233 "], dice::verbose = " + sdict.get(
"dice::verbose"), sdict);
236 if (sdict.is_defined(
"h"))
239 <<
"info: Usage: " << com_name <<
" [option]\n"
241 <<
" print out this message\n"
242 <<
" [-dice::verbose severity_level]\n"
243 <<
" verbose severity level (3 is info).\n"
244 <<
" (default: " << sdict.get(
"dice::verbose") <<
")\n"
246 <<
" [-heightfield_size 'int int']\n"
247 <<
" Heightfield size heightfield.\n"
248 <<
" (default: [" << m_heightfield_size <<
"])\n"
250 <<
" [-heightfield_infile FILENAME]\n"
251 <<
" Heightfield input file path name.\n"
252 <<
" (default: [" << m_heightfield_infile <<
"])\n"
254 <<
" [-heightfield_range 'float float']\n"
255 <<
" Heightfield height range.\n"
256 <<
" (default: [" << m_heightfield_range <<
"])\n"
258 <<
" [-use_normal_recalc 'INT INT']\n"
259 <<
" Use normal recalculation of the height field when true.\n"
260 <<
" The first INT is for the first edit, the second INT is for the second edit.\n"
261 <<
" Use INT here since no BOOL vector. False when INT is 0, true when INT is 1.\n"
262 <<
" (default: [" << sdict.get(
"use_normal_recalc") <<
"])\n"
264 <<
" [-set_normal_const 'INT INT']\n"
265 <<
" Set normal a constant vector of the height field when true.\n"
266 <<
" The first INT is for the first edit, the second INT is for the second edit.\n"
267 <<
" This option is only effective when corresponding use_normal_recalc option is false.\n"
268 <<
" Use INT here since no BOOL vector. False when INT is 0, true when INT is 1.\n"
269 <<
" (default: [" << sdict.get(
"set_normal_const") <<
"])\n"
271 <<
" [-outfbase FILENAME]\n"
272 <<
" output ppm file base name. When empty, no output.\n"
273 <<
" A frame number and extension (.ppm) will be added.\n"
274 <<
" (default: [" << m_outfbase <<
"])\n"
276 <<
" [-verify_image_path_base FILEBASE]\n"
277 <<
" when FILEBAS exists, verify the rendering image with adding frame number.\n"
278 <<
" (default: [" << m_verify_image_path_base <<
"])\n"
281 <<
"Test and debug option\n"
284 <<
" [-unittest bool]\n"
285 <<
" when true, unit test mode.\n"
286 <<
" (default: [" << m_is_unittest <<
"])\n"
299 public mi::base::Interface_implement<nv::index::IRegular_heightfield_compute_task>
312 bool is_set_constant_normal,
313 mi::Sint32 compute_id)
315 m_is_normal_recalc(is_normal_recalc),
316 m_is_set_constant_normal(is_set_constant_normal),
317 m_compute_id(compute_id)
325 mi::math::Bbox_struct<mi::Sint32, 2>& roi)
const
333 const mi::math::Bbox_struct<mi::Sint32, 2>& ij_patch_bbox,
334 mi::Float32* elevation_values,
335 mi::neuraylib::IDice_transaction* dice_transaction)
const
337 INFO_LOG <<
"Example_height_fill_task: called with automatic normal calculation. compute_id: "
340 mi::math::Bbox<mi::Sint64, 2> ij_patch_bbox_s64;
341 ij_patch_bbox_s64.min.x =
static_cast< mi::Sint64
>(ij_patch_bbox.min.x);
342 ij_patch_bbox_s64.min.y =
static_cast< mi::Sint64
>(ij_patch_bbox.min.y);
343 ij_patch_bbox_s64.max.x =
static_cast< mi::Sint64
>(ij_patch_bbox.max.x);
344 ij_patch_bbox_s64.max.y =
static_cast< mi::Sint64
>(ij_patch_bbox.max.y);
346 this->compute_elevation_value(ij_patch_bbox_s64, elevation_values);
347 if (m_is_set_constant_normal)
349 WARN_LOG <<
"Turn off the is_set_constant_normal since is_normal_recalc is on.";
361 const mi::math::Bbox_struct<mi::Sint32, 2>& ij_patch_bbox,
362 mi::Float32* elevation_values,
363 mi::math::Vector_struct<mi::Float32, 3>* normal_values,
364 mi::neuraylib::IDice_transaction* dice_transaction)
const
366 std::string normal_set_type =
"";
367 if (m_is_set_constant_normal)
369 normal_set_type =
"set constant";
373 normal_set_type =
"empty";
375 INFO_LOG <<
"Example_height_fill_task: called with (" << normal_set_type
376 <<
") user defined normal calculation. compute_id: " << m_compute_id;
378 mi::math::Bbox<mi::Sint64, 2> ij_patch_bbox_s64;
379 ij_patch_bbox_s64.min.x =
static_cast< mi::Sint64
>(ij_patch_bbox.min.x);
380 ij_patch_bbox_s64.min.y =
static_cast< mi::Sint64
>(ij_patch_bbox.min.y);
381 ij_patch_bbox_s64.max.x =
static_cast< mi::Sint64
>(ij_patch_bbox.max.x);
382 ij_patch_bbox_s64.max.y =
static_cast< mi::Sint64
>(ij_patch_bbox.max.y);
384 this->compute_elevation_value(ij_patch_bbox_s64, elevation_values);
385 if (m_is_set_constant_normal)
387 this->compute_normal_value(ij_patch_bbox_s64, normal_values);
395 if (m_is_normal_recalc)
407 void compute_elevation_value(
408 const mi::math::Bbox<mi::Sint64, 2>& ij_patch_bbox_s64,
409 mi::Float32 * elevation_values)
const
411 INFO_LOG <<
"Compute_elevation_value (negation): ij patch bbox:" << ij_patch_bbox_s64;
414 mi::math::Vector<mi::Sint64, 2> patch_raw_dim = ij_patch_bbox_s64.max - ij_patch_bbox_s64.min;
415 inline_template_argument_ignore_fn(patch_raw_dim);
416 assert((patch_raw_dim[0] > 0) && (patch_raw_dim[1] > 0));
418 mi::math::Vector<mi::Sint64, 2> ij = ij_patch_bbox_s64.min;
419 for(ij[0] = ij_patch_bbox_s64.min[0]; ij[0] < ij_patch_bbox_s64.max[0]; ++ij[0])
421 for(ij[1] = ij_patch_bbox_s64.min[1]; ij[1] < ij_patch_bbox_s64.max[1]; ++ij[1])
423 mi::Sint64
const ij_idx = get_heightfield_index(ij, ij_patch_bbox_s64);
425 assert(ij_idx < patch_raw_dim[0] * patch_raw_dim[1]);
427 if (!nv::index::IRegular_heightfield_patch::is_hole(elevation_values[ij_idx]))
429 elevation_values[ij_idx] = -1.0f * elevation_values[ij_idx];
439 void compute_normal_value(
const mi::math::Bbox<mi::Sint64, 2>& ij_patch_bbox_s64,
440 mi::math::Vector_struct<mi::Float32, 3>* normal_values)
const
442 const mi::math::Vector<mi::Sint64, 2> patch_raw_dim =
443 ij_patch_bbox_s64.max - ij_patch_bbox_s64.min;
444 assert((patch_raw_dim[0] > 0) && (patch_raw_dim[1] > 0));
445 mi::Sint64
const patch_raw_size = patch_raw_dim[0] * patch_raw_dim[1];
447 const mi::math::Vector<mi::Float32, 3> normal_vec(0.0f, -1.0f, 0.0f);
448 INFO_LOG <<
"Example_height_fill_task: set all normal to " << normal_vec;
449 for(mi::Sint64 i = 0; i < patch_raw_size; i++)
451 normal_values[i] = normal_vec;
457 bool m_is_normal_recalc;
459 bool m_is_set_constant_normal;
461 mi::Sint32 m_compute_id;
467 public nv::index::Distributed_data_job<0xc1a29939,0x5853,0x4406,0x91,0x95,0xa6,0x9f,0xb3,0x28,0x6f,0xfb>
478 const mi::neuraylib::Tag& heightfield_tag,
479 bool is_normal_recalc,
480 bool is_set_constant_normal,
481 mi::Sint32 compute_id)
482 : m_heightfield_tag(heightfield_tag),
483 m_is_normal_recalc(is_normal_recalc),
484 m_is_set_constant_normal(is_set_constant_normal),
485 m_compute_id(compute_id) {}
489 : m_heightfield_tag(mi::neuraylib:
:NULL_TAG),
490 m_is_normal_recalc(true),
491 m_is_set_constant_normal(false),
496 return new nv::index::Regular_heightfield_locality_query_mode(m_heightfield_tag, mi::math::Bbox<mi::Uint32, 2>(),
true);
500 mi::neuraylib::IDice_transaction* dice_transaction,
501 const nv::index::IData_distribution* data_distribution,
502 nv::index::IData_subset_compute_task_processing* data_subset_processing,
503 mi::Size data_subset_index,
504 mi::Size data_subset_count)
507 data_subset_processing->execute_compute_task(&heightfield_operation_task, dice_transaction);
509 mi::base::Handle<nv::index::IRegular_heightfield_data_edit> compute_processing(
510 data_subset_processing->get_interface<nv::index::IRegular_heightfield_data_edit>());
511 if (compute_processing.is_valid_interface())
513 compute_processing->edit(&heightfield_operation_task, dice_transaction);
518 mi::neuraylib::ISerializer* serializer,
519 mi::neuraylib::IDice_transaction* dice_transaction,
520 const nv::index::IData_distribution* data_distribution,
521 nv::index::IData_subset_compute_task_processing* data_subset_processing,
522 mi::Size data_subset_index,
523 mi::Size data_subset_count)
526 data_subset_processing->execute_compute_task(&heightfield_operation_task, dice_transaction);
528 mi::base::Handle<nv::index::IRegular_heightfield_data_edit> compute_processing(
529 data_subset_processing->get_interface<nv::index::IRegular_heightfield_data_edit>());
530 if (compute_processing.is_valid_interface())
532 compute_processing->edit(&heightfield_operation_task, dice_transaction);
537 mi::neuraylib::IDeserializer* deserializer,
538 mi::neuraylib::IDice_transaction* dice_transaction,
539 const nv::index::IData_distribution* data_distribution,
540 mi::Size data_subset_index,
541 mi::Size data_subset_count) {}
543 virtual void serialize(mi::neuraylib::ISerializer *serializer)
const
545 serializer->write(&m_heightfield_tag.id, 1);
546 serializer->write(&m_is_normal_recalc, 1);
547 serializer->write(&m_is_set_constant_normal, 1);
548 serializer->write(&m_compute_id, 1);
551 virtual void deserialize(mi::neuraylib::IDeserializer* deserializer)
553 deserializer->read(&m_heightfield_tag.id, 1);
554 deserializer->read(&m_is_normal_recalc, 1);
555 deserializer->read(&m_is_set_constant_normal, 1);
556 deserializer->read(&m_compute_id, 1);
560 mi::neuraylib::Tag m_heightfield_tag;
561 bool m_is_normal_recalc;
562 bool m_is_set_constant_normal;
563 mi::Sint32 m_compute_id;
569void Normal_recalculation::create_scene()
571 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(create_transaction());
574 m_session_tag = m_index_session->create_session(dice_transaction.get());
576 mi::base::Handle<const nv::index::ISession> session(
577 dice_transaction->access<nv::index::ISession>(m_session_tag));
581 mi::base::Handle<nv::index::IScene> scene_edit(
582 dice_transaction->edit<nv::index::IScene>(session->get_scene()));
585 nv::index::app::String_dict heightfield_opt;
586 heightfield_opt.insert(
"args::type",
"heightfield");
587 heightfield_opt.insert(
"args::importer",
"nv::index::plugin::legacy_importer.Raw_heightfield_data_importer");
588 heightfield_opt.insert(
"args::input_file", m_heightfield_infile);
589 heightfield_opt.insert(
"args::size", nv::index::app::to_string(m_heightfield_size));
590 heightfield_opt.insert(
"args::range",
"0.1 1000");
591 heightfield_opt.insert(
"args::cache",
"false");
592 heightfield_opt.insert(
"args::serial_access",
"false");
593 heightfield_opt.insert(
"args::stats",
"false");
595 nv::index::IDistributed_data_import_callback* importer_callback =
596 get_importer_from_application_layer(
597 get_application_layer_interface(),
598 "nv::index::plugin::legacy_importer.Raw_heightfield_data_importer",
601 const mi::Float32 rotate_k = 0.0f;
602 const mi::math::Vector<mi::Float32, 3> translate(0.0f, 0.0f, 0.0f);
603 const mi::math::Vector<mi::Float32, 3> scale( 1.0f, 1.0f, 1.0f);
606 mi::base::Handle<nv::index::IRegular_heightfield>
heightfield(
607 scene_edit->create_regular_heightfield(
608 scale, rotate_k, translate,
612 dice_transaction.get()));
618 dice_transaction->store_for_reference_counting(
heightfield.get());
622 mi::base::Handle<nv::index::IStatic_scene_group> static_group_node(
623 scene_edit->create_scene_group<nv::index::IStatic_scene_group>());
629 mi::base::Handle<nv::index::IDirectional_headlight> headlight(
630 scene_edit->create_attribute<nv::index::IDirectional_headlight>());
632 const mi::math::Color_struct color_intensity = { 1.0f, 1.0f, 1.0f, 1.0f, };
633 headlight->set_intensity(color_intensity);
634 headlight->set_direction(mi::math::Vector<mi::Float32, 3>(1.0f, -1.0f, -1.0f));
635 const mi::neuraylib::Tag headlight_tag = dice_transaction->store_for_reference_counting(headlight.get());
637 static_group_node->append(headlight_tag, dice_transaction.get());
640 mi::base::Handle<nv::index::IPhong_gl> phong_1(scene_edit->create_attribute<nv::index::IPhong_gl>());
644 phong_1->set_ambient(mi::math::Color(0.0f, 0.3f, 0.0f, 0.3f));
645 phong_1->set_diffuse(mi::math::Color(0.0f, 0.8f, 0.2f, 0.3f));
646 phong_1->set_specular(mi::math::Color(0.6f));
647 phong_1->set_shininess(100.0f);
649 const mi::neuraylib::Tag phong_1_tag
650 = dice_transaction->store_for_reference_counting(phong_1.get());
652 static_group_node->append(phong_1_tag, dice_transaction.get());
656 static_group_node->append(m_heightfield_tag, dice_transaction.get());
657 mi::neuraylib::Tag static_group_node_tag =
658 dice_transaction->store_for_reference_counting(static_group_node.get());
662 scene_edit->append(static_group_node_tag, dice_transaction.get());
664 std::stringstream sstr;
665 sstr <<
"Created a heightfield: size = "
666 << m_heightfield_size <<
", tag = " << m_heightfield_tag.id;
667 INFO_LOG << sstr.str();
670 scene_edit->set_clipped_bounding_box(m_roi);
673 mi::math::Matrix<mi::Float32, 4, 4> transform_mat(
674 1.0f, 0.0f, 0.0f, 0.0f,
675 0.0f, 1.0f, 0.0f, 0.0f,
676 0.0f, 0.0f, -1.0f, 0.0f,
677 0.0f, 0.0f, 0.0f, 1.0f
680 scene_edit->set_transform_matrix(transform_mat);
683 mi::base::Handle< nv::index::IPerspective_camera > cam(
684 scene_edit->create_camera<nv::index::IPerspective_camera>());
686 setup_camera(cam.get());
688 const mi::neuraylib::Tag camera_tag = dice_transaction->store(cam.get());
691 scene_edit->set_camera(camera_tag);
693 const mi::math::Vector<mi::Uint32, 2> buffer_resolution(512, 512);
694 m_image_file_canvas->set_resolution(buffer_resolution);
696 dice_transaction->commit();
700void Normal_recalculation::setup_camera(
701 nv::index::IPerspective_camera* cam)
const
706 mi::math::Vector<mi::Float32, 3> from(2959.61f, 1993.47f, -1653.08f);
707 mi::math::Vector<mi::Float32, 3> dir (-0.5891f, -0.3783f, 0.7141f);
708 mi::math::Vector<mi::Float32, 3> up (-0.6795f, -0.2464f, -0.6911f);
711 cam->set(from, dir, up);
712 cam->set_aperture(0.033f);
713 cam->set_aspect(1.0f);
714 cam->set_focal(0.03f);
715 cam->set_clip_min(2.0f);
716 cam->set_clip_max(10000.0f);
720bool Normal_recalculation::render_frame(
const std::string& output_fname,
721 const std::string& verify_fname)
726 m_image_file_canvas->set_rgba_file_name(output_fname.c_str());
728 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
729 m_global_scope->create_transaction<mi::neuraylib::IDice_transaction>());
732 m_index_session->update(m_session_tag, dice_transaction.get());
733 mi::base::Handle<nv::index::IFrame_results> frame_results(
734 m_index_rendering->render(
736 m_image_file_canvas.get(),
737 dice_transaction.get()));
740 dice_transaction->commit();
742 if (!output_fname.empty())
744 INFO_LOG <<
"save the rendered image to: " << output_fname;
748 if (!verify_fname.empty())
750 if (!(verify_canvas_result(get_application_layer_interface(),
751 m_image_file_canvas.get(), verify_fname, get_options())))
764void Normal_recalculation::compute_heightfield(
765 bool is_normal_recalc,
766 bool is_set_constant_normal,
767 mi::Sint32 compute_id)
773 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(create_transaction());
777 mi::base::Handle<nv::index::IDistributed_data_job> distributed_compute_algorithm;
780 INFO_LOG <<
"Normal recalculation: " << (is_normal_recalc ?
"on" :
"off");
781 if (!is_normal_recalc)
783 INFO_LOG <<
"Set constant normal: " << (is_set_constant_normal ?
"on" :
"off");
786 mi::base::Handle< nv::index::IDistributed_data_job > eh_op(
789 is_set_constant_normal,
791 distributed_compute_algorithm.swap(eh_op);
793 mi::base::Handle<const nv::index::ISession> session(dice_transaction->access<
const nv::index::ISession>(m_session_tag));
796 const mi::neuraylib::Tag dist_layout_tag = session->get_distribution_layout();
797 mi::base::Handle<const nv::index::IData_distribution> distribution_layout(dice_transaction->access<nv::index::IData_distribution>(dist_layout_tag));
799 distribution_layout->create_scheduler()->execute(distributed_compute_algorithm.get(), dice_transaction.get());
801 INFO_LOG <<
"Done heightfield computation.";
804 dice_transaction->commit();
810int main(
int argc,
const char* argv[])
812 nv::index::app::String_dict sdict;
814 sdict.insert(
"dice::verbose",
"3");
815 sdict.insert(
"dice::network::mode",
"OFF");
816 sdict.insert(
"dice::network::multicast_address",
"224.1.3.2");
819 sdict.insert(
"heightfield_name",
"heightfield_1");
820 sdict.insert(
"heightfield_infile",
"");
821 sdict.insert(
"heightfield_size",
"0 0");
822 sdict.insert(
"heightfield_range",
"0 0");
823 sdict.insert(
"roi",
"0 0 -1024 2040 2040 1024");
824 sdict.insert(
"use_normal_recalc",
"0 1");
825 sdict.insert(
"set_normal_const",
"1 0");
826 sdict.insert(
"outfbase",
"frame_normal_recalculation");
829 sdict.insert(
"unittest",
"0");
830 sdict.insert(
"verify_image_path_base",
"");
831 sdict.insert(
"is_dump_comparison_image_when_failed",
"1");
832 sdict.insert(
"is_call_from_test",
"0");
835 sdict.insert(
"index::config::set_monitor_performance_values",
"true");
836 sdict.insert(
"index::service",
"rendering_and_compositing");
837 sdict.insert(
"index::cuda_debug_checks",
"false");
840 sdict.insert(
"index::app::components::application_layer::component_name_list",
841 "canvas_infrastructure image io");
843 sdict.insert(
"index::app::plugins::legacy_importer::enabled",
"true");
847 normal_recalculation.initialize(argc, argv, sdict);
851 const mi::Sint32 exit_code = normal_recalculation.
launch();
852 INFO_LOG <<
"Shutting down ...";
Example_height_fill_task(bool is_normal_recalc, bool is_set_constant_normal, mi::Sint32 compute_id)
virtual void get_region_of_interest_for_compute(mi::math::Bbox_struct< mi::Sint32, 2 > &roi) const
virtual bool compute(const mi::math::Bbox_struct< mi::Sint32, 2 > &ij_patch_bbox, mi::Float32 *elevation_values, mi::neuraylib::IDice_transaction *dice_transaction) const
virtual bool user_defined_normal_computation() const
virtual bool compute(const mi::math::Bbox_struct< mi::Sint32, 2 > &ij_patch_bbox, mi::Float32 *elevation_values, mi::math::Vector_struct< mi::Float32, 3 > *normal_values, mi::neuraylib::IDice_transaction *dice_transaction) const
virtual nv::index::IDistributed_data_locality_query_mode * get_scheduling_mode() const
virtual void serialize(mi::neuraylib::ISerializer *serializer) const
virtual void execute_subset_remote(mi::neuraylib::ISerializer *serializer, mi::neuraylib::IDice_transaction *dice_transaction, const nv::index::IData_distribution *data_distribution, nv::index::IData_subset_compute_task_processing *data_subset_processing, mi::Size data_subset_index, mi::Size data_subset_count)
virtual void deserialize(mi::neuraylib::IDeserializer *deserializer)
virtual void execute_subset(mi::neuraylib::IDice_transaction *dice_transaction, const nv::index::IData_distribution *data_distribution, nv::index::IData_subset_compute_task_processing *data_subset_processing, mi::Size data_subset_index, mi::Size data_subset_count)
Example_heightfield_operation()
Example_heightfield_operation(const mi::neuraylib::Tag &heightfield_tag, bool is_normal_recalc, bool is_set_constant_normal, mi::Sint32 compute_id)
virtual void receive_subset_result(mi::neuraylib::IDeserializer *deserializer, mi::neuraylib::IDice_transaction *dice_transaction, const nv::index::IData_distribution *data_distribution, mi::Size data_subset_index, mi::Size data_subset_count)
virtual ~Normal_recalculation()
virtual bool evaluate_options(nv::index::app::String_dict &sdict) CPP11_OVERRIDE
virtual bool initialize_networking(mi::neuraylib::INetwork_configuration *network_configuration, nv::index::app::String_dict &options) CPP11_OVERRIDE
int main(int argc, const char *argv[])
#define check_success(expr)