@@ -450,72 +450,109 @@ const vnr::range1f& vnrTransferFunctionGetValueRange(vnrTransferFunction tfn)
450
450
return tfn->range ;
451
451
}
452
452
453
-
454
453
// ------------------------------------------------------------------
455
454
//
456
455
// ------------------------------------------------------------------
457
456
458
457
vnrRenderer vnrCreateRenderer (vnrVolume v)
459
458
{
460
- auto self = std::make_shared<RendererContext >();
459
+ auto self = std::make_shared<RenderContext >();
461
460
self->volume = v;
462
461
463
- auto & renderer = self->renderer ;
462
+ // auto& renderer = self->renderer;
463
+
464
+ self->framebuffer .create ();
465
+ self->framebuffer_stream = self->framebuffer .current_stream ();
466
+ self->render .stream = self->framebuffer_stream ;
467
+
464
468
if (self->volume ->isNetwork ()) {
465
- auto & neural = std::dynamic_pointer_cast<NeuralVolumeContext>(self->volume )->neural ;
469
+ auto & source = std::dynamic_pointer_cast<NeuralVolumeContext>(self->volume )->neural ;
466
470
467
471
// std::cout << "INF MC " << neural.get_macrocell_value_range() << std::endl;
468
- renderer.set_scene (neural.texture (),
469
- neural.get_data_type (),
470
- neural.get_data_dims (),
471
- neural.get_data_value_range (),
472
- neural.get_data_transform (),
473
- neural.get_macrocell_dims (),
474
- neural.get_macrocell_spacings (),
475
- neural.get_macrocell_value_range (),
476
- neural.get_macrocell_max_opacity (),
477
- &neural);
472
+
473
+ self->render .init (
474
+ source.get_data_transform (),
475
+ source.get_data_type (),
476
+ source.get_data_dims (),
477
+ source.get_data_value_range (),
478
+ source.get_macrocell_dims (),
479
+ source.get_macrocell_spacings (),
480
+ source.get_macrocell_value_range (),
481
+ source.get_macrocell_max_opacity ()
482
+ );
483
+
484
+ // renderer.set_scene(neural.texture(),
485
+ // neural.get_data_type(),
486
+ // neural.get_data_dims(),
487
+ // neural.get_data_value_range(),
488
+ // neural.get_data_transform(),
489
+ // neural.get_macrocell_dims(),
490
+ // neural.get_macrocell_spacings(),
491
+ // neural.get_macrocell_value_range(),
492
+ // neural.get_macrocell_max_opacity(),
493
+ // &neural);
478
494
}
479
495
else {
480
496
auto & source = std::dynamic_pointer_cast<SimpleVolumeContext>(self->volume )->source ;
481
497
482
498
// std::cout << "REF MC " << source.get_macrocell_value_range() << std::endl;
483
- renderer.set_scene (source.texture (),
484
- source.get_data_type (),
485
- source.get_data_dims (),
486
- source.get_data_value_range (),
487
- source.get_data_transform (),
488
- source.get_macrocell_dims (),
489
- source.get_macrocell_spacings (),
490
- source.get_macrocell_value_range (),
491
- source.get_macrocell_max_opacity ());
492
- }
493
-
494
- renderer.set_scene_clipbox (self->volume ->clipbox );
495
- renderer.set_rendering_mode (5 );
496
- // 1179636.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov (without init, OKAY (1.893421 - 1.891434)GB = 1.987 MB), problem in init)
497
- renderer.init ();
499
+
500
+ self->render .init (
501
+ source.get_data_transform (),
502
+ source.get_data_type (),
503
+ source.get_data_dims (),
504
+ source.get_data_value_range (),
505
+ source.get_macrocell_dims (),
506
+ source.get_macrocell_spacings (),
507
+ source.get_macrocell_value_range (),
508
+ source.get_macrocell_max_opacity ()
509
+ );
510
+
511
+ // renderer.set_scene(source.texture(),
512
+ // source.get_data_type(),
513
+ // source.get_data_dims(),
514
+ // source.get_data_value_range(),
515
+ // source.get_data_transform(),
516
+ // source.get_macrocell_dims(),
517
+ // source.get_macrocell_spacings(),
518
+ // source.get_macrocell_value_range(),
519
+ // source.get_macrocell_max_opacity());
520
+ }
521
+
522
+ // renderer.set_scene_clipbox(self->volume->clipbox);
523
+ // renderer.set_rendering_mode(5);
524
+ // // 1179636.polaris-pbs-01.hsn.cm.polaris.alcf.anl.gov (without init, OKAY (1.893421 - 1.891434)GB = 1.987 MB), problem in init)
525
+ // renderer.init();
526
+
527
+ self->framebuffer_reset = true ;
528
+
498
529
return self;
499
530
}
500
531
501
532
void vnrRendererSetMode (vnrRenderer self, int mode)
502
533
{
503
- self->renderer .set_rendering_mode (mode);
534
+ // self->renderer.set_rendering_mode(mode);
535
+ self->rendering_mode = mode;
536
+ self->framebuffer_reset = true ;
504
537
}
505
538
506
539
void vnrRendererSetDenoiser (vnrRenderer self, bool flag)
507
540
{
508
- self->renderer .set_denoiser (flag);
541
+ // self->renderer.set_denoiser(flag);
509
542
}
510
543
511
544
void vnrRendererSetVolumeSamplingRate (vnrRenderer self, float rate)
512
545
{
513
- self->renderer .set_volume_sampling_rate (rate);
546
+ // self->renderer.set_volume_sampling_rate(rate);
547
+ self->sampling_rate = rate;
548
+ self->framebuffer_reset = true ;
514
549
}
515
550
516
551
void vnrRendererSetVolumeDensityScale (vnrRenderer self, float value)
517
552
{
518
- self->renderer .set_volume_density_scale (value);
553
+ // self->renderer.set_volume_density_scale(value);
554
+ self->density_scale = value;
555
+ self->framebuffer_reset = true ;
519
556
}
520
557
521
558
// ------------------------------------------------------------------
@@ -524,44 +561,87 @@ void vnrRendererSetVolumeDensityScale(vnrRenderer self, float value)
524
561
525
562
void vnrRendererSetTransferFunction (vnrRenderer self, vnrTransferFunction _tfn)
526
563
{
564
+ range1f original_data_range;
527
565
auto & tfn = *_tfn;
528
566
if (self->volume ->isNetwork ()) {
529
- auto nv = std::dynamic_pointer_cast<NeuralVolumeContext>(self->volume );
530
- nv->neural .set_transfer_function (tfn.color , tfn.alpha , tfn.range );
567
+ auto & source = std::dynamic_pointer_cast<NeuralVolumeContext>(self->volume )->neural ;
568
+ source.set_transfer_function (tfn.color , tfn.alpha , tfn.range );
569
+ original_data_range = source.get_data_value_range ();
531
570
}
532
571
else {
533
- auto sv = std::dynamic_pointer_cast<SimpleVolumeContext>(self->volume );
534
- sv->source .set_transfer_function (tfn.color , tfn.alpha , tfn.range );
572
+ auto & source = std::dynamic_pointer_cast<SimpleVolumeContext>(self->volume )->source ;
573
+ source.set_transfer_function (tfn.color , tfn.alpha , tfn.range );
574
+ original_data_range = source.get_data_value_range ();
535
575
}
536
576
537
- self->renderer .set_transfer_function (tfn.color , tfn.alpha , tfn.range );
577
+ // self->renderer.set_transfer_function(tfn.color, tfn.alpha, tfn.range);
578
+ self->tfn .update (tfn, original_data_range, self->framebuffer_stream );
579
+ self->framebuffer_reset = true ;
538
580
}
539
581
540
582
void vnrRendererSetCamera (vnrRenderer self, vnrCamera cam)
541
583
{
542
- self->renderer .set_camera (*cam);
584
+ // self->renderer.set_camera(*cam);
585
+ self->camera = *cam;
586
+ self->framebuffer_reset = true ;
543
587
}
544
588
545
589
void vnrRendererSetFramebufferSize (vnrRenderer self, vec2i fbsize)
546
590
{
547
- self->renderer .resize (fbsize);
591
+ // self->renderer.resize(fbsize);
592
+ self->framebuffer .resize (fbsize);
593
+ self->framebuffer_size = fbsize;
594
+ self->framebuffer_reset = true ;
548
595
}
549
596
550
597
vnr::vec4f *vnrRendererMapFrame (vnrRenderer self)
551
598
{
552
- vec4f *pixels = nullptr ;
553
- self->renderer .mapframe (&pixels);
599
+ // self->renderer.mapframe(&pixels);
600
+
601
+ CUDA_CHECK (cudaStreamSynchronize (self->framebuffer_stream ));
602
+ vec4f *pixels = self->framebuffer .host_pointer ();
603
+
604
+ self->framebuffer .safe_swap ();
605
+ self->framebuffer_stream = self->framebuffer .current_stream ();
606
+ self->render .stream = self->framebuffer_stream ;
607
+
554
608
return pixels;
555
609
}
556
610
557
611
void vnrRendererResetAccumulation (vnrRenderer self)
558
612
{
559
- self->renderer .reset_frame ();
613
+ // self->renderer.reset_frame();
614
+ self->framebuffer_reset = true ;
560
615
}
561
616
562
617
void vnrRender (vnrRenderer self)
563
618
{
564
- self->renderer .render ();
619
+ // self->renderer.render();
620
+
621
+ if (self->framebuffer_reset ) {
622
+ self->render .update (
623
+ self->rendering_mode ,
624
+ self->tfn .tfn ,
625
+ self->sampling_rate ,
626
+ self->density_scale ,
627
+ self->volume ->clipbox .lower ,
628
+ self->volume ->clipbox .upper ,
629
+ self->camera ,
630
+ self->framebuffer_size
631
+ );
632
+ self->framebuffer_reset = false ;
633
+ }
634
+
635
+ if (self->volume ->isNetwork ()) {
636
+ auto & source = std::dynamic_pointer_cast<NeuralVolumeContext>(self->volume )->neural ;
637
+ self->render .render (self->framebuffer .device_pointer (), &source, source.texture ());
638
+ }
639
+ else {
640
+ auto & source = std::dynamic_pointer_cast<SimpleVolumeContext>(self->volume )->source ;
641
+ self->render .render (self->framebuffer .device_pointer (), nullptr , source.texture ());
642
+ }
643
+
644
+ self->framebuffer .download_async ();
565
645
}
566
646
567
647
@@ -622,12 +702,6 @@ void vnrCompilationStatus(const char* str)
622
702
printf (" fV-SRN: disabled\n " );
623
703
#endif
624
704
625
- #ifdef ENABLE_OPTIX
626
- printf (" optix renderer: enabled\n " );
627
- #else
628
- printf (" optix renderer: disabled\n " );
629
- #endif
630
-
631
705
#ifdef ENABLE_IN_SHADER
632
706
printf (" in-shader renderer: enabled\n " );
633
707
#else
0 commit comments