mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-10-05 01:49:02 +00:00
Add origin to Tangle, and use it for par render.
This commit is contained in:
parent
00b078821f
commit
93bbe46073
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user