File: test_framebuffer.cpp

package info (click to toggle)
ospray 3.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,048 kB
  • sloc: cpp: 80,569; ansic: 951; sh: 805; makefile: 170; python: 69
file content (124 lines) | stat: -rw-r--r-- 3,268 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// Copyright 2022 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#include "ArcballCamera.h"
#include "ospray_testing.h"
#include "rkcommon/utility/random.h"
#include "test_fixture.h"

extern OSPRayEnvironment *ospEnv;

namespace OSPRayTestScenes {

class IDBuffer
    : public Base,
      public ::testing::TestWithParam<std::tuple<OSPFrameBufferChannel,
          bool /*appIDs*/,
          const char * /*renderer*/>>
{
 public:
  IDBuffer();
  void SetUp() override;
  void PerformRenderTest() override;

 protected:
  OSPFrameBufferChannel idBuffer{OSP_FB_ID_PRIMITIVE};
  bool appIDs{false};
};

IDBuffer::IDBuffer()
{
  auto params = GetParam();
  idBuffer = std::get<0>(params);
  appIDs = std::get<1>(params);
  rendererType = std::get<2>(params);

  samplesPerPixel = 2;
}

void IDBuffer::SetUp()
{
  Base::SetUp();

  framebuffer =
      cpp::FrameBuffer(imgSize.x, imgSize.y, frameBufferFormat, idBuffer);

  instances.clear();

  auto builder = ospray::testing::newBuilder(
      idBuffer == OSP_FB_ID_PRIMITIVE ? "perlin_noise_volumes" : "instancing");
  ospray::testing::setParam(builder, "rendererType", rendererType);
  ospray::testing::setParam(builder, "numInstances", vec2ui(10, 3));
  ospray::testing::setParam(builder, "useIDs", appIDs);
  ospray::testing::commit(builder);

  world = ospray::testing::buildWorld(builder);
  ospray::testing::release(builder);
}

inline uint8_t to_uc(const float f)
{
  return 255.f * clamp(f, 0.f, 1.0f);
}
inline uint32_t to_rgba8(const vec3f c)
{
  return to_uc(c.x) | (to_uc(c.y) << 8) | (to_uc(c.z) << 16) | 0xff000000;
}

void IDBuffer::PerformRenderTest()
{
  if (!instances.empty())
    world.setParam("instance", cpp::CopiedData(instances));

  world.commit();

  ArcballCamera arcballCamera(world.getBounds<box3f>(), imgSize);
  camera.setParam("position", arcballCamera.eyePos());
  camera.setParam("direction", arcballCamera.lookDir());
  camera.setParam("up", arcballCamera.upDir());
  camera.setParam("fovy", 45.0f);
  camera.commit();

  renderer.commit();

  framebuffer.resetAccumulation();

  RenderFrame();

  auto *framebuffer_data = (uint32_t *)framebuffer.map(idBuffer);
  std::vector<uint32_t> framebufferData(imgSize.product());
  for (int i = 0; i < imgSize.product(); i++)
    framebufferData[i] = framebuffer_data[i] == -1u
        ? 0
        : to_rgba8(rkcommon::utility::makeRandomColor(framebuffer_data[i]));
  framebuffer.unmap(framebuffer_data);

  if (ospEnv->GetDumpImg()) {
    EXPECT_EQ(
        imageTool->saveTestImage(framebufferData.data()), OsprayStatus::Ok);
  } else {
    EXPECT_EQ(imageTool->compareImgWithBaseline(framebufferData.data()),
        OsprayStatus::Ok);
  }
}

// Test Instantiations //////////////////////////////////////////////////////

TEST_P(IDBuffer, IDBuffer)
{
  PerformRenderTest();
}

INSTANTIATE_TEST_SUITE_P(Primitive,
    IDBuffer,
    ::testing::Combine(::testing::Values(OSP_FB_ID_PRIMITIVE),
        ::testing::Values(false),
        ::testing::Values("scivis", "pathtracer")));

INSTANTIATE_TEST_SUITE_P(ObjectInstance,
    IDBuffer,
    ::testing::Combine(::testing::Values(OSP_FB_ID_OBJECT, OSP_FB_ID_INSTANCE),
        ::testing::Bool(),
        ::testing::Values("scivis", "pathtracer")));

} // namespace OSPRayTestScenes