vtk-m2/vtkm/rendering/testing/glut/UnitTestMapperGLUT.cxx
2019-04-17 10:57:13 -06:00

114 lines
3.0 KiB
C++

//============================================================================
// 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/Bounds.h>
#include <vtkm/cont/testing/MakeTestDataSet.h>
#include <GL/glew.h>
#if defined(__APPLE__)
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include <string.h>
#include <vtkm/cont/DeviceAdapter.h>
#include <vtkm/cont/testing/Testing.h>
#include <vtkm/rendering/Actor.h>
#include <vtkm/rendering/CanvasGL.h>
#include <vtkm/rendering/MapperGL.h>
#include <vtkm/rendering/Scene.h>
#include <vtkm/rendering/View.h>
#include <vtkm/rendering/testing/RenderTest.h>
namespace
{
static constexpr vtkm::Id WIDTH = 512, HEIGHT = 512;
static vtkm::Id windowID, which = 0, NUM_DATASETS = 4;
static bool done = false;
static bool batch = false;
static void keyboardCall(unsigned char key, int vtkmNotUsed(x), int vtkmNotUsed(y))
{
if (key == 27)
glutDestroyWindow(windowID);
else
{
which = (which + 1) % NUM_DATASETS;
glutPostRedisplay();
}
}
static void displayCall()
{
vtkm::cont::testing::MakeTestDataSet maker;
vtkm::cont::ColorTable colorTable("inferno");
using M = vtkm::rendering::MapperGL;
using C = vtkm::rendering::CanvasGL;
using V3 = vtkm::rendering::View3D;
using V2 = vtkm::rendering::View2D;
if (which == 0)
vtkm::rendering::testing::Render<M, C, V3>(
maker.Make3DRegularDataSet0(), "pointvar", colorTable, "reg3D.pnm");
else if (which == 1)
vtkm::rendering::testing::Render<M, C, V3>(
maker.Make3DRectilinearDataSet0(), "pointvar", colorTable, "rect3D.pnm");
else if (which == 2)
vtkm::rendering::testing::Render<M, C, V3>(
maker.Make3DExplicitDataSet4(), "pointvar", colorTable, "expl3D.pnm");
else if (which == 3)
vtkm::rendering::testing::Render<M, C, V2>(
maker.Make2DRectilinearDataSet0(), "pointvar", colorTable, "rect2D.pnm");
glutSwapBuffers();
}
void batchIdle()
{
which++;
if (which >= NUM_DATASETS)
glutDestroyWindow(windowID);
else
glutPostRedisplay();
}
void RenderTests()
{
if (!batch)
std::cout << "Press any key to cycle through datasets. ESC to quit." << std::endl;
int argc = 0;
char* argv = nullptr;
glutInit(&argc, &argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(WIDTH, HEIGHT);
windowID = glutCreateWindow("GLUT test");
glutDisplayFunc(displayCall);
glutKeyboardFunc(keyboardCall);
if (batch)
glutIdleFunc(batchIdle);
glutMainLoop();
}
} //namespace
int UnitTestMapperGLUT(int argc, char* argv[])
{
if (argc > 1)
{
if (strcmp(argv[1], "-B") == 0)
{
batch = true;
}
}
return vtkm::cont::testing::Testing::Run(RenderTests);
}