Add origin to Tangle, and use it for par render.

This commit is contained in:
Dave Pugmire 2023-01-24 14:25:39 -05:00
parent 00b078821f
commit 93bbe46073
6 changed files with 72 additions and 56 deletions

@ -1,19 +1,34 @@
//============================================================================
// Copyright (c) Kitware, Inc.
// All rights reserved.
// See LICENSE.txt for details.
//
// This software is distributed WITHOUT ANY WARRANTY; without even
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE. See the above copyright notice for more information.
//============================================================================
#include <vtkm/cont/EnvironmentTracker.h>
#include <vtkm/rendering/compositing/PayloadCompositor.h>
#include <vtkm/rendering/compositing/PayloadImageCompositor.h>
#include <vtkm/rendering/compositing/RadixKCompositor.h>
#include <algorithm>
#include <assert.h>
#ifdef VTKH_PARALLEL
#include <diy/mpi.hpp>
#ifdef VTKM_ENABLE_MPI
#include <mpi.h>
#include <vtkh/compositing/RadixKCompositor.hpp>
#include <vtkh/vtkh.hpp>
//#include <vtkh/vtkh.hpp>
#include <vtkm/rendering/compositing/RadixKCompositor.h>
//#include <diy/mpi.hpp>
#endif
using namespace vtkm::rendering::compositing;
namespace vtkh
namespace vtkm
{
namespace rendering
{
namespace compositing
{
PayloadCompositor::PayloadCompositor() {}
@ -23,7 +38,7 @@ void PayloadCompositor::ClearImages()
m_images.clear();
}
void PayloadCompositor::AddImage(PayloadImage& image)
void PayloadCompositor::AddImage(vtkm::rendering::compositing::PayloadImage& image)
{
assert(image.GetNumberOfPixels() != 0);
@ -36,27 +51,30 @@ void PayloadCompositor::AddImage(PayloadImage& image)
//
// Do local composite and keep a single image
//
PayloadImageCompositor compositor;
vtkm::rendering::compositing::PayloadImageCompositor compositor;
compositor.ZBufferComposite(m_images[0], image);
}
}
PayloadImage PayloadCompositor::Composite()
vtkm::rendering::compositing::PayloadImage PayloadCompositor::Composite()
{
assert(m_images.size() != 0);
// nothing to do here in serial. Images were composited as
// they were added to the compositor
#ifdef VTKH_PARALLEL
vtkhdiy::mpi::communicator diy_comm;
diy_comm = vtkhdiy::mpi::communicator(MPI_Comm_f2c(GetMPICommHandle()));
#ifdef VTKM_ENABLE_MPI
auto comm = vtkm::cont::EnvironmentTracker::GetCommunicator();
// vtkmdiy::mpi::communicator diy_comm;
// diy_comm = vtkmdiy::mpi::communicator(MPI_Comm_f2c(GetMPICommHandle()));
assert(m_images.size() == 1);
RadixKCompositor compositor;
compositor.CompositeSurface(diy_comm, this->m_images[0]);
vtkm::rendering::compositing::RadixKCompositor compositor;
compositor.CompositeSurface(comm, this->m_images[0]);
#endif
// Make this a param to avoid the copy?
return m_images[0];
}
} // namespace vtkh
}
}
} // namespace vtkm:rendering::compositing

@ -1,11 +1,25 @@
#ifndef VTKH_PAYLOAD_COMPOSITOR_HPP
#define VTKH_PAYLOAD_COMPOSITOR_HPP
//============================================================================
// Copyright (c) Kitware, Inc.
// All rights reserved.
// See LICENSE.txt for details.
//
// This software is distributed WITHOUT ANY WARRANTY; without even
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE. See the above copyright notice for more information.
//============================================================================
#ifndef vtk_m_rendering_compositing_PayloadCompositor_h
#define vtk_m_rendering_compositing_PayloadCompositor_h
#include <vtkm/rendering/vtkm_rendering_export.h>
#include <vtkm/rendering/compositing/PayloadImage.h>
namespace vtkh
namespace vtkm
{
namespace rendering
{
namespace compositing
{
class VTKM_RENDERING_EXPORT PayloadCompositor
@ -23,6 +37,9 @@ protected:
std::vector<vtkm::rendering::compositing::PayloadImage> m_images;
};
};
}
}
} // namespace vtkm:rendering::compositing
#endif
#endif //vtk_m_rendering_compositing_PayloadCompositor_h

@ -25,7 +25,7 @@ set(unit_tests
UnitTestMapperGlyphVector.cxx
)
vtkm_unit_tests(SOURCES ${unit_tests})
vtkm_unit_tests(SOURCES ${unit_tests} LIBRARIES vtkm_source)
#add distributed tests i.e.test to run with MPI
#if MPI is enabled.
@ -36,6 +36,7 @@ if (VTKm_ENABLE_MPI)
vtkm_unit_tests(
MPI
DEVICE_SOURCES ${mpi_unit_tests}
LIBRARIES vtkm_source
USE_VTKM_JOB_POOL
)
endif()

@ -13,6 +13,7 @@
#include <vtkm/rendering/compositing/Image.h>
#include <vtkm/rendering/compositing/ImageCompositor.h>
#include <vtkm/rendering/testing/t_vtkm_test_utils.h>
#include <vtkm/source/Tangle.h>
#include <vtkm/rendering/Actor.h>
#include <vtkm/rendering/CanvasRayTracer.h>
@ -120,43 +121,21 @@ void TestRenderComposite()
int numBlocks = comm.size() * 1;
int rank = comm.rank();
//Create a sequence of datasets along the X direction.
std::string fieldName = "tangle";
std::string fname = "";
if (comm.rank() == 0)
fname = "/home/dpn/tangle0.vtk";
else
fname = "/home/dpn/tangle1.vtk";
vtkm::io::VTKDataSetReader reader(fname);
auto ds = reader.ReadDataSet();
ds.PrintSummary(std::cout);
/*
vtkm::source::Tangle tangle;
vtkm::Vec3f pt(1 * rank, 0, 0);
tangle.SetPointDimensions({ 50, 50, 50 });
tangle.SetOrigin(pt);
vtkm::cont::DataSet ds = tangle.Execute();
*/
//auto ds = CreateTestData(rank, numBlocks, 32);
//auto fieldName = "point_data_Float32";
/*
vtkm::rendering::testing::RenderTestOptions options;
options.Mapper = vtkm::rendering::testing::MapperType::RayTracer;
options.AllowAnyDevice = false;
options.ColorTable = vtkm::cont::ColorTable::Preset::Inferno;
vtkm::rendering::testing::RenderTest(ds, "point_data_Float32", "rendering/raytracer/regular3D.png", options);
*/
vtkm::rendering::Camera camera;
camera.SetLookAt(vtkm::Vec3f_32(0.5, 0.5, 0.5));
camera.SetLookAt(vtkm::Vec3f_32(1.0, 0.5, 0.5));
camera.SetViewUp(vtkm::make_Vec(0.f, 1.f, 0.f));
camera.SetClippingRange(1.f, 10.f);
camera.SetFieldOfView(60.f);
camera.SetPosition(vtkm::Vec3f_32(1.5, 1.5, 1.5));
camera.SetPosition(vtkm::Vec3f_32(3, 3, 3));
camera.SetPosition(vtkm::Vec3f_32(-2, 1.75, 1.75));
vtkm::cont::ColorTable colorTable("inferno");
// Background color:
@ -171,18 +150,16 @@ void TestRenderComposite()
vtkm::rendering::View3D view(scene, MapperVolume(), canvas, camera, bg);
view.Paint();
if (comm.rank() == 0)
view.SaveAs("volume0.png");
else
view.SaveAs("volume1.png");
auto colors = &GetVTKMPointer(canvas.GetColorBuffer())[0][0];
auto depths = GetVTKMPointer(canvas.GetDepthBuffer());
vtkm::rendering::compositing::Compositor compositor;
compositor.AddImage(colors, depths, width, height);
auto res = compositor.Composite();
res.Save("RESULT.png", { "" });
if (comm.rank() == 0)
{
res.Save("RESULT.png", { "" });
}
}
void RenderTests()

@ -78,13 +78,12 @@ vtkm::cont::DataSet Tangle::DoExecute() const
vtkm::cont::ArrayHandle<vtkm::Float32> pointFieldArray;
this->Invoke(tangle::TangleField{ cellDims, mins, maxs }, cellSet, pointFieldArray);
const vtkm::Vec3f origin(0.0f, 0.0f, 0.0f);
const vtkm::Vec3f spacing(1.0f / static_cast<vtkm::FloatDefault>(cellDims[0]),
1.0f / static_cast<vtkm::FloatDefault>(cellDims[1]),
1.0f / static_cast<vtkm::FloatDefault>(cellDims[2]));
vtkm::cont::ArrayHandleUniformPointCoordinates coordinates(
this->PointDimensions, origin, spacing);
this->PointDimensions, this->Origin, spacing);
dataSet.AddCoordinateSystem(vtkm::cont::CoordinateSystem("coordinates", coordinates));
dataSet.AddField(vtkm::cont::make_FieldPoint("tangle", pointFieldArray));

@ -44,6 +44,9 @@ public:
{
}
VTKM_CONT vtkm::Vec3f GetOrigin() const { return this->Origin; }
VTKM_CONT void SetOrigin(vtkm::Vec3f& pt) { this->Origin = pt; }
VTKM_CONT vtkm::Id3 GetPointDimensions() const { return this->PointDimensions; }
VTKM_CONT void SetPointDimensions(vtkm::Id3 dims) { this->PointDimensions = dims; }
@ -54,6 +57,7 @@ private:
vtkm::cont::DataSet DoExecute() const override;
vtkm::Id3 PointDimensions = { 16, 16, 16 };
vtkm::Vec3f Origin = { 0, 0, 0 };
};
} //namespace source
} //namespace vtkm