// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause

// Description
// This test creates a vtkImageData with two components.
// The data is volume rendered considering the two components as independent.

#include "vtkCamera.h"
#include "vtkColorTransferFunction.h"
#include "vtkGPUVolumeRayCastMapper.h"
#include "vtkImageData.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkNew.h"
#include "vtkPiecewiseFunction.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkTesting.h"
#include "vtkVolume.h"
#include "vtkVolumeProperty.h"

#include <iostream>

static const char* TestGPURayCastTwoComponentsIndependentLog =
  "# StreamVersion 1\n"
  "EnterEvent 298 198 0 0 0 0 0\n"
  "MouseMoveEvent 298 198 0 0 0 0 0\n"
  "MouseMoveEvent 292 200 0 0 0 0 0\n"
  "MouseMoveEvent 285 200 0 0 0 0 0\n"
  "MouseMoveEvent 281 202 0 0 0 0 0\n"
  "MouseMoveEvent 277 202 0 0 0 0 0\n"
  "MouseMoveEvent 274 203 0 0 0 0 0\n"
  "MouseMoveEvent 270 205 0 0 0 0 0\n"
  "MouseMoveEvent 266 205 0 0 0 0 0\n"
  "MouseMoveEvent 262 205 0 0 0 0 0\n"
  "MouseMoveEvent 260 205 0 0 0 0 0\n"
  "MouseMoveEvent 258 206 0 0 0 0 0\n"
  "MouseMoveEvent 255 206 0 0 0 0 0\n"
  "MouseMoveEvent 253 207 0 0 0 0 0\n"
  "MouseMoveEvent 251 207 0 0 0 0 0\n"
  "MouseMoveEvent 250 207 0 0 0 0 0\n"
  "MouseMoveEvent 248 207 0 0 0 0 0\n"
  "MouseMoveEvent 244 207 0 0 0 0 0\n"
  "MouseMoveEvent 237 208 0 0 0 0 0\n"
  "MouseMoveEvent 232 210 0 0 0 0 0\n"
  "MouseMoveEvent 226 210 0 0 0 0 0\n"
  "MouseMoveEvent 222 211 0 0 0 0 0\n"
  "MouseMoveEvent 220 211 0 0 0 0 0\n"
  "MouseMoveEvent 219 212 0 0 0 0 0\n"
  "MouseMoveEvent 216 212 0 0 0 0 0\n"
  "MouseMoveEvent 215 213 0 0 0 0 0\n"
  "MouseMoveEvent 213 213 0 0 0 0 0\n"
  "MouseMoveEvent 211 214 0 0 0 0 0\n"
  "MouseMoveEvent 210 214 0 0 0 0 0\n"
  "MouseMoveEvent 207 216 0 0 0 0 0\n"
  "MouseMoveEvent 206 217 0 0 0 0 0\n"
  "MouseMoveEvent 205 218 0 0 0 0 0\n"
  "MouseMoveEvent 203 220 0 0 0 0 0\n"
  "MouseMoveEvent 200 222 0 0 0 0 0\n"
  "MouseMoveEvent 197 224 0 0 0 0 0\n"
  "MouseMoveEvent 194 226 0 0 0 0 0\n"
  "MouseMoveEvent 193 227 0 0 0 0 0\n"
  "MouseMoveEvent 191 228 0 0 0 0 0\n"
  "MouseMoveEvent 190 229 0 0 0 0 0\n"
  "MouseMoveEvent 188 231 0 0 0 0 0\n"
  "MouseMoveEvent 187 232 0 0 0 0 0\n"
  "MouseMoveEvent 186 233 0 0 0 0 0\n"
  "MouseMoveEvent 185 234 0 0 0 0 0\n"
  "MouseMoveEvent 184 235 0 0 0 0 0\n"
  "MouseMoveEvent 184 236 0 0 0 0 0\n"
  "MouseMoveEvent 183 237 0 0 0 0 0\n"
  "MouseMoveEvent 182 238 0 0 0 0 0\n"
  "MouseMoveEvent 181 239 0 0 0 0 0\n"
  "MouseMoveEvent 179 240 0 0 0 0 0\n"
  "MouseMoveEvent 176 240 0 0 0 0 0\n"
  "MouseMoveEvent 174 241 0 0 0 0 0\n"
  "MouseMoveEvent 172 241 0 0 0 0 0\n"
  "MouseMoveEvent 170 242 0 0 0 0 0\n"
  "MouseMoveEvent 168 242 0 0 0 0 0\n"
  "MouseMoveEvent 166 242 0 0 0 0 0\n"
  "MouseMoveEvent 165 242 0 0 0 0 0\n"
  "MouseMoveEvent 164 242 0 0 0 0 0\n"
  "MouseMoveEvent 160 242 0 0 0 0 0\n"
  "MouseMoveEvent 156 242 0 0 0 0 0\n"
  "MouseMoveEvent 153 242 0 0 0 0 0\n"
  "MouseMoveEvent 150 242 0 0 0 0 0\n"
  "MouseMoveEvent 148 242 0 0 0 0 0\n"
  "MouseMoveEvent 147 242 0 0 0 0 0\n"
  "MouseMoveEvent 146 242 0 0 0 0 0\n"
  "MouseMoveEvent 144 242 0 0 0 0 0\n"
  "MouseMoveEvent 143 242 0 0 0 0 0\n"
  "MouseMoveEvent 142 242 0 0 0 0 0\n"
  "MouseMoveEvent 141 242 0 0 0 0 0\n"
  "MouseMoveEvent 140 242 0 0 0 0 0\n"
  "MouseMoveEvent 139 242 0 0 0 0 0\n"
  "MouseMoveEvent 138 242 0 0 0 0 0\n"
  "MouseMoveEvent 137 242 0 0 0 0 0\n"
  "LeftButtonPressEvent 137 242 0 0 0 0 0\n"
  "StartInteractionEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "TimerEvent 137 242 0 0 0 0 0\n"
  "RenderEvent 137 242 0 0 0 0 0\n"
  "MouseMoveEvent 136 241 0 0 0 0 0\n"
  "InteractionEvent 136 241 0 0 0 0 0\n"
  "TimerEvent 136 241 0 0 0 0 0\n"
  "RenderEvent 136 241 0 0 0 0 0\n"
  "MouseMoveEvent 136 240 0 0 0 0 0\n"
  "InteractionEvent 136 240 0 0 0 0 0\n"
  "MouseMoveEvent 136 239 0 0 0 0 0\n"
  "InteractionEvent 136 239 0 0 0 0 0\n"
  "TimerEvent 136 239 0 0 0 0 0\n"
  "RenderEvent 136 239 0 0 0 0 0\n"
  "MouseMoveEvent 136 238 0 0 0 0 0\n"
  "InteractionEvent 136 238 0 0 0 0 0\n"
  "MouseMoveEvent 136 237 0 0 0 0 0\n"
  "InteractionEvent 136 237 0 0 0 0 0\n"
  "TimerEvent 136 237 0 0 0 0 0\n"
  "RenderEvent 136 237 0 0 0 0 0\n"
  "MouseMoveEvent 136 236 0 0 0 0 0\n"
  "InteractionEvent 136 236 0 0 0 0 0\n"
  "MouseMoveEvent 136 235 0 0 0 0 0\n"
  "InteractionEvent 136 235 0 0 0 0 0\n"
  "TimerEvent 136 235 0 0 0 0 0\n"
  "RenderEvent 136 235 0 0 0 0 0\n"
  "MouseMoveEvent 136 234 0 0 0 0 0\n"
  "InteractionEvent 136 234 0 0 0 0 0\n"
  "TimerEvent 136 234 0 0 0 0 0\n"
  "RenderEvent 136 234 0 0 0 0 0\n"
  "MouseMoveEvent 136 233 0 0 0 0 0\n"
  "InteractionEvent 136 233 0 0 0 0 0\n"
  "MouseMoveEvent 136 232 0 0 0 0 0\n"
  "InteractionEvent 136 232 0 0 0 0 0\n"
  "TimerEvent 136 232 0 0 0 0 0\n"
  "RenderEvent 136 232 0 0 0 0 0\n"
  "MouseMoveEvent 136 231 0 0 0 0 0\n"
  "InteractionEvent 136 231 0 0 0 0 0\n"
  "MouseMoveEvent 136 230 0 0 0 0 0\n"
  "InteractionEvent 136 230 0 0 0 0 0\n"
  "TimerEvent 136 230 0 0 0 0 0\n"
  "RenderEvent 136 230 0 0 0 0 0\n"
  "TimerEvent 136 230 0 0 0 0 0\n"
  "RenderEvent 136 230 0 0 0 0 0\n"
  "TimerEvent 136 230 0 0 0 0 0\n"
  "RenderEvent 136 230 0 0 0 0 0\n"
  "TimerEvent 136 230 0 0 0 0 0\n"
  "RenderEvent 136 230 0 0 0 0 0\n"
  "TimerEvent 136 230 0 0 0 0 0\n"
  "RenderEvent 136 230 0 0 0 0 0\n"
  "TimerEvent 136 230 0 0 0 0 0\n"
  "RenderEvent 136 230 0 0 0 0 0\n"
  "TimerEvent 136 230 0 0 0 0 0\n"
  "RenderEvent 136 230 0 0 0 0 0\n"
  "LeftButtonReleaseEvent 136 230 0 0 0 0 0\n"
  "EndInteractionEvent 136 230 0 0 0 0 0\n"
  "RenderEvent 136 230 0 0 0 0 0\n"
  "MouseMoveEvent 136 228 0 0 0 0 0\n"
  "MouseMoveEvent 136 226 0 0 0 0 0\n"
  "MouseMoveEvent 136 224 0 0 0 0 0\n"
  "MouseMoveEvent 136 222 0 0 0 0 0\n"
  "MouseMoveEvent 136 220 0 0 0 0 0\n"
  "MouseMoveEvent 136 218 0 0 0 0 0\n"
  "MouseMoveEvent 136 216 0 0 0 0 0\n"
  "MouseMoveEvent 136 213 0 0 0 0 0\n"
  "MouseMoveEvent 136 210 0 0 0 0 0\n"
  "MouseMoveEvent 136 207 0 0 0 0 0\n"
  "MouseMoveEvent 136 204 0 0 0 0 0\n"
  "MouseMoveEvent 137 201 0 0 0 0 0\n"
  "MouseMoveEvent 138 198 0 0 0 0 0\n"
  "MouseMoveEvent 139 196 0 0 0 0 0\n"
  "MouseMoveEvent 139 194 0 0 0 0 0\n"
  "MouseMoveEvent 140 191 0 0 0 0 0\n"
  "MouseMoveEvent 142 187 0 0 0 0 0\n"
  "MouseMoveEvent 142 184 0 0 0 0 0\n"
  "MouseMoveEvent 144 181 0 0 0 0 0\n"
  "MouseMoveEvent 145 177 0 0 0 0 0\n"
  "MouseMoveEvent 148 173 0 0 0 0 0\n"
  "MouseMoveEvent 151 169 0 0 0 0 0\n"
  "MouseMoveEvent 156 164 0 0 0 0 0\n"
  "MouseMoveEvent 162 158 0 0 0 0 0\n"
  "MouseMoveEvent 166 153 0 0 0 0 0\n"
  "MouseMoveEvent 170 149 0 0 0 0 0\n"
  "MouseMoveEvent 174 145 0 0 0 0 0\n"
  "MouseMoveEvent 178 143 0 0 0 0 0\n"
  "MouseMoveEvent 184 142 0 0 0 0 0\n"
  "MouseMoveEvent 188 140 0 0 0 0 0\n"
  "MouseMoveEvent 193 139 0 0 0 0 0\n"
  "MouseMoveEvent 197 139 0 0 0 0 0\n"
  "MouseMoveEvent 201 137 0 0 0 0 0\n"
  "MouseMoveEvent 202 137 0 0 0 0 0\n"
  "MouseMoveEvent 204 137 0 0 0 0 0\n"
  "MouseMoveEvent 205 137 0 0 0 0 0\n"
  "MouseMoveEvent 206 137 0 0 0 0 0\n"
  "MouseMoveEvent 209 136 0 0 0 0 0\n"
  "MouseMoveEvent 211 136 0 0 0 0 0\n"
  "MouseMoveEvent 212 136 0 0 0 0 0\n"
  "MouseMoveEvent 213 135 0 0 0 0 0\n"
  "MouseMoveEvent 214 135 0 0 0 0 0\n"
  "MouseMoveEvent 215 134 0 0 0 0 0\n"
  "MouseMoveEvent 216 133 0 0 0 0 0\n"
  "LeftButtonPressEvent 216 133 0 0 0 0 0\n"
  "StartInteractionEvent 216 133 0 0 0 0 0\n"
  "TimerEvent 216 133 0 0 0 0 0\n"
  "RenderEvent 216 133 0 0 0 0 0\n"
  "MouseMoveEvent 219 132 0 0 0 0 0\n"
  "InteractionEvent 219 132 0 0 0 0 0\n"
  "MouseMoveEvent 220 131 0 0 0 0 0\n"
  "InteractionEvent 220 131 0 0 0 0 0\n"
  "TimerEvent 220 131 0 0 0 0 0\n"
  "RenderEvent 220 131 0 0 0 0 0\n"
  "MouseMoveEvent 221 130 0 0 0 0 0\n"
  "InteractionEvent 221 130 0 0 0 0 0\n"
  "MouseMoveEvent 222 129 0 0 0 0 0\n"
  "InteractionEvent 222 129 0 0 0 0 0\n"
  "TimerEvent 222 129 0 0 0 0 0\n"
  "RenderEvent 222 129 0 0 0 0 0\n"
  "MouseMoveEvent 223 128 0 0 0 0 0\n"
  "InteractionEvent 223 128 0 0 0 0 0\n"
  "TimerEvent 223 128 0 0 0 0 0\n"
  "RenderEvent 223 128 0 0 0 0 0\n"
  "TimerEvent 223 128 0 0 0 0 0\n"
  "RenderEvent 223 128 0 0 0 0 0\n"
  "TimerEvent 223 128 0 0 0 0 0\n"
  "RenderEvent 223 128 0 0 0 0 0\n"
  "TimerEvent 223 128 0 0 0 0 0\n"
  "RenderEvent 223 128 0 0 0 0 0\n"
  "TimerEvent 223 128 0 0 0 0 0\n"
  "RenderEvent 223 128 0 0 0 0 0\n"
  "LeftButtonReleaseEvent 223 128 0 0 0 0 0\n"
  "EndInteractionEvent 223 128 0 0 0 0 0\n"
  "RenderEvent 223 128 0 0 0 0 0\n"
  "MouseMoveEvent 224 126 0 0 0 0 0\n"
  "MouseMoveEvent 225 125 0 0 0 0 0\n"
  "MouseMoveEvent 226 123 0 0 0 0 0\n"
  "MouseMoveEvent 227 122 0 0 0 0 0\n"
  "MouseMoveEvent 228 121 0 0 0 0 0\n"
  "MouseMoveEvent 229 120 0 0 0 0 0\n"
  "MouseMoveEvent 230 119 0 0 0 0 0\n"
  "MouseMoveEvent 231 118 0 0 0 0 0\n"
  "MouseMoveEvent 232 117 0 0 0 0 0\n"
  "MouseMoveEvent 233 116 0 0 0 0 0\n"
  "MouseMoveEvent 233 115 0 0 0 0 0\n"
  "MouseMoveEvent 234 114 0 0 0 0 0\n"
  "MouseMoveEvent 234 113 0 0 0 0 0\n"
  "MouseMoveEvent 234 112 0 0 0 0 0\n"
  "MouseMoveEvent 234 111 0 0 0 0 0\n"
  "MouseMoveEvent 234 110 0 0 0 0 0\n"
  "MouseMoveEvent 233 108 0 0 0 0 0\n"
  "MouseMoveEvent 231 107 0 0 0 0 0\n"
  "MouseMoveEvent 229 106 0 0 0 0 0\n"
  "MouseMoveEvent 226 105 0 0 0 0 0\n"
  "MouseMoveEvent 223 105 0 0 0 0 0\n"
  "MouseMoveEvent 220 104 0 0 0 0 0\n"
  "MouseMoveEvent 216 103 0 0 0 0 0\n"
  "MouseMoveEvent 209 101 0 0 0 0 0\n"
  "MouseMoveEvent 202 99 0 0 0 0 0\n"
  "MouseMoveEvent 195 98 0 0 0 0 0\n"
  "MouseMoveEvent 188 96 0 0 0 0 0\n"
  "MouseMoveEvent 179 94 0 0 0 0 0\n"
  "MouseMoveEvent 168 93 0 0 0 0 0\n"
  "MouseMoveEvent 156 91 0 0 0 0 0\n"
  "MouseMoveEvent 144 89 0 0 0 0 0\n"
  "MouseMoveEvent 135 87 0 0 0 0 0\n"
  "MouseMoveEvent 127 86 0 0 0 0 0\n"
  "MouseMoveEvent 120 86 0 0 0 0 0\n"
  "MouseMoveEvent 116 84 0 0 0 0 0\n"
  "MouseMoveEvent 115 84 0 0 0 0 0\n"
  "MouseMoveEvent 114 83 0 0 0 0 0\n"
  "LeftButtonPressEvent 114 83 0 0 0 0 0\n"
  "StartInteractionEvent 114 83 0 0 0 0 0\n"
  "TimerEvent 114 83 0 0 0 0 0\n"
  "RenderEvent 114 83 0 0 0 0 0\n"
  "MouseMoveEvent 108 82 0 0 0 0 0\n"
  "InteractionEvent 108 82 0 0 0 0 0\n"
  "TimerEvent 108 82 0 0 0 0 0\n"
  "RenderEvent 108 82 0 0 0 0 0\n"
  "MouseMoveEvent 104 81 0 0 0 0 0\n"
  "InteractionEvent 104 81 0 0 0 0 0\n"
  "MouseMoveEvent 102 81 0 0 0 0 0\n"
  "InteractionEvent 102 81 0 0 0 0 0\n"
  "TimerEvent 102 81 0 0 0 0 0\n"
  "RenderEvent 102 81 0 0 0 0 0\n"
  "MouseMoveEvent 95 81 0 0 0 0 0\n"
  "InteractionEvent 95 81 0 0 0 0 0\n"
  "MouseMoveEvent 92 81 0 0 0 0 0\n"
  "InteractionEvent 92 81 0 0 0 0 0\n"
  "TimerEvent 92 81 0 0 0 0 0\n"
  "RenderEvent 92 81 0 0 0 0 0\n"
  "MouseMoveEvent 86 81 0 0 0 0 0\n"
  "InteractionEvent 86 81 0 0 0 0 0\n"
  "MouseMoveEvent 83 81 0 0 0 0 0\n"
  "InteractionEvent 83 81 0 0 0 0 0\n"
  "TimerEvent 83 81 0 0 0 0 0\n"
  "RenderEvent 83 81 0 0 0 0 0\n"
  "MouseMoveEvent 77 81 0 0 0 0 0\n"
  "InteractionEvent 77 81 0 0 0 0 0\n"
  "MouseMoveEvent 75 80 0 0 0 0 0\n"
  "InteractionEvent 75 80 0 0 0 0 0\n"
  "TimerEvent 75 80 0 0 0 0 0\n"
  "RenderEvent 75 80 0 0 0 0 0\n"
  "MouseMoveEvent 72 80 0 0 0 0 0\n"
  "InteractionEvent 72 80 0 0 0 0 0\n"
  "TimerEvent 72 80 0 0 0 0 0\n"
  "RenderEvent 72 80 0 0 0 0 0\n"
  "TimerEvent 72 80 0 0 0 0 0\n"
  "RenderEvent 72 80 0 0 0 0 0\n"
  "TimerEvent 72 80 0 0 0 0 0\n"
  "RenderEvent 72 80 0 0 0 0 0\n"
  "TimerEvent 72 80 0 0 0 0 0\n"
  "RenderEvent 72 80 0 0 0 0 0\n"
  "TimerEvent 72 80 0 0 0 0 0\n"
  "RenderEvent 72 80 0 0 0 0 0\n"
  "TimerEvent 72 80 0 0 0 0 0\n"
  "RenderEvent 72 80 0 0 0 0 0\n"
  "TimerEvent 72 80 0 0 0 0 0\n"
  "RenderEvent 72 80 0 0 0 0 0\n"
  "TimerEvent 72 80 0 0 0 0 0\n"
  "RenderEvent 72 80 0 0 0 0 0\n"
  "TimerEvent 72 80 0 0 0 0 0\n"
  "RenderEvent 72 80 0 0 0 0 0\n"
  "TimerEvent 72 80 0 0 0 0 0\n"
  "RenderEvent 72 80 0 0 0 0 0\n"
  "MouseMoveEvent 71 79 0 0 0 0 0\n"
  "InteractionEvent 71 79 0 0 0 0 0\n"
  "MouseMoveEvent 71 78 0 0 0 0 0\n"
  "InteractionEvent 71 78 0 0 0 0 0\n"
  "TimerEvent 71 78 0 0 0 0 0\n"
  "RenderEvent 71 78 0 0 0 0 0\n"
  "MouseMoveEvent 70 74 0 0 0 0 0\n"
  "InteractionEvent 70 74 0 0 0 0 0\n"
  "MouseMoveEvent 70 73 0 0 0 0 0\n"
  "InteractionEvent 70 73 0 0 0 0 0\n"
  "TimerEvent 70 73 0 0 0 0 0\n"
  "RenderEvent 70 73 0 0 0 0 0\n"
  "MouseMoveEvent 70 71 0 0 0 0 0\n"
  "InteractionEvent 70 71 0 0 0 0 0\n"
  "MouseMoveEvent 70 70 0 0 0 0 0\n"
  "InteractionEvent 70 70 0 0 0 0 0\n"
  "TimerEvent 70 70 0 0 0 0 0\n"
  "RenderEvent 70 70 0 0 0 0 0\n"
  "MouseMoveEvent 70 64 0 0 0 0 0\n"
  "InteractionEvent 70 64 0 0 0 0 0\n"
  "MouseMoveEvent 70 63 0 0 0 0 0\n"
  "InteractionEvent 70 63 0 0 0 0 0\n"
  "TimerEvent 70 63 0 0 0 0 0\n"
  "RenderEvent 70 63 0 0 0 0 0\n"
  "MouseMoveEvent 72 59 0 0 0 0 0\n"
  "InteractionEvent 72 59 0 0 0 0 0\n"
  "MouseMoveEvent 73 58 0 0 0 0 0\n"
  "InteractionEvent 73 58 0 0 0 0 0\n"
  "TimerEvent 73 58 0 0 0 0 0\n"
  "RenderEvent 73 58 0 0 0 0 0\n"
  "MouseMoveEvent 77 52 0 0 0 0 0\n"
  "InteractionEvent 77 52 0 0 0 0 0\n"
  "MouseMoveEvent 78 51 0 0 0 0 0\n"
  "InteractionEvent 78 51 0 0 0 0 0\n"
  "TimerEvent 78 51 0 0 0 0 0\n"
  "RenderEvent 78 51 0 0 0 0 0\n"
  "MouseMoveEvent 83 44 0 0 0 0 0\n"
  "InteractionEvent 83 44 0 0 0 0 0\n"
  "MouseMoveEvent 85 42 0 0 0 0 0\n"
  "InteractionEvent 85 42 0 0 0 0 0\n"
  "MouseMoveEvent 86 41 0 0 0 0 0\n"
  "InteractionEvent 86 41 0 0 0 0 0\n"
  "TimerEvent 86 41 0 0 0 0 0\n"
  "RenderEvent 86 41 0 0 0 0 0\n"
  "MouseMoveEvent 89 38 0 0 0 0 0\n"
  "InteractionEvent 89 38 0 0 0 0 0\n"
  "MouseMoveEvent 90 37 0 0 0 0 0\n"
  "InteractionEvent 90 37 0 0 0 0 0\n"
  "TimerEvent 90 37 0 0 0 0 0\n"
  "RenderEvent 90 37 0 0 0 0 0\n"
  "MouseMoveEvent 94 33 0 0 0 0 0\n"
  "InteractionEvent 94 33 0 0 0 0 0\n"
  "MouseMoveEvent 95 32 0 0 0 0 0\n"
  "InteractionEvent 95 32 0 0 0 0 0\n"
  "TimerEvent 95 32 0 0 0 0 0\n"
  "RenderEvent 95 32 0 0 0 0 0\n"
  "MouseMoveEvent 99 30 0 0 0 0 0\n"
  "InteractionEvent 99 30 0 0 0 0 0\n"
  "MouseMoveEvent 101 29 0 0 0 0 0\n"
  "InteractionEvent 101 29 0 0 0 0 0\n"
  "TimerEvent 101 29 0 0 0 0 0\n"
  "RenderEvent 101 29 0 0 0 0 0\n"
  "MouseMoveEvent 108 25 0 0 0 0 0\n"
  "InteractionEvent 108 25 0 0 0 0 0\n"
  "TimerEvent 108 25 0 0 0 0 0\n"
  "RenderEvent 108 25 0 0 0 0 0\n"
  "MouseMoveEvent 111 23 0 0 0 0 0\n"
  "InteractionEvent 111 23 0 0 0 0 0\n"
  "TimerEvent 111 23 0 0 0 0 0\n"
  "RenderEvent 111 23 0 0 0 0 0\n"
  "MouseMoveEvent 115 21 0 0 0 0 0\n"
  "InteractionEvent 115 21 0 0 0 0 0\n"
  "TimerEvent 115 21 0 0 0 0 0\n"
  "RenderEvent 115 21 0 0 0 0 0\n"
  "MouseMoveEvent 118 19 0 0 0 0 0\n"
  "InteractionEvent 118 19 0 0 0 0 0\n"
  "TimerEvent 118 19 0 0 0 0 0\n"
  "RenderEvent 118 19 0 0 0 0 0\n"
  "MouseMoveEvent 122 18 0 0 0 0 0\n"
  "InteractionEvent 122 18 0 0 0 0 0\n"
  "TimerEvent 122 18 0 0 0 0 0\n"
  "RenderEvent 122 18 0 0 0 0 0\n"
  "MouseMoveEvent 127 16 0 0 0 0 0\n"
  "InteractionEvent 127 16 0 0 0 0 0\n"
  "MouseMoveEvent 128 15 0 0 0 0 0\n"
  "InteractionEvent 128 15 0 0 0 0 0\n"
  "TimerEvent 128 15 0 0 0 0 0\n"
  "RenderEvent 128 15 0 0 0 0 0\n"
  "MouseMoveEvent 133 13 0 0 0 0 0\n"
  "InteractionEvent 133 13 0 0 0 0 0\n"
  "TimerEvent 133 13 0 0 0 0 0\n"
  "RenderEvent 133 13 0 0 0 0 0\n"
  "MouseMoveEvent 139 11 0 0 0 0 0\n"
  "InteractionEvent 139 11 0 0 0 0 0\n"
  "MouseMoveEvent 140 11 0 0 0 0 0\n"
  "InteractionEvent 140 11 0 0 0 0 0\n"
  "TimerEvent 140 11 0 0 0 0 0\n"
  "RenderEvent 140 11 0 0 0 0 0\n"
  "MouseMoveEvent 144 10 0 0 0 0 0\n"
  "InteractionEvent 144 10 0 0 0 0 0\n"
  "MouseMoveEvent 145 9 0 0 0 0 0\n"
  "InteractionEvent 145 9 0 0 0 0 0\n"
  "TimerEvent 145 9 0 0 0 0 0\n"
  "RenderEvent 145 9 0 0 0 0 0\n"
  "MouseMoveEvent 147 8 0 0 0 0 0\n"
  "InteractionEvent 147 8 0 0 0 0 0\n"
  "TimerEvent 147 8 0 0 0 0 0\n"
  "RenderEvent 147 8 0 0 0 0 0\n"
  "MouseMoveEvent 150 7 0 0 0 0 0\n"
  "InteractionEvent 150 7 0 0 0 0 0\n"
  "MouseMoveEvent 151 7 0 0 0 0 0\n"
  "InteractionEvent 151 7 0 0 0 0 0\n"
  "MouseMoveEvent 154 6 0 0 0 0 0\n"
  "InteractionEvent 154 6 0 0 0 0 0\n"
  "TimerEvent 154 6 0 0 0 0 0\n"
  "RenderEvent 154 6 0 0 0 0 0\n"
  "MouseMoveEvent 156 6 0 0 0 0 0\n"
  "InteractionEvent 156 6 0 0 0 0 0\n"
  "MouseMoveEvent 158 5 0 0 0 0 0\n"
  "InteractionEvent 158 5 0 0 0 0 0\n"
  "TimerEvent 158 5 0 0 0 0 0\n"
  "RenderEvent 158 5 0 0 0 0 0\n"
  "MouseMoveEvent 160 4 0 0 0 0 0\n"
  "InteractionEvent 160 4 0 0 0 0 0\n"
  "TimerEvent 160 4 0 0 0 0 0\n"
  "RenderEvent 160 4 0 0 0 0 0\n"
  "TimerEvent 160 4 0 0 0 0 0\n"
  "RenderEvent 160 4 0 0 0 0 0\n"
  "MouseMoveEvent 162 3 0 0 0 0 0\n"
  "InteractionEvent 162 3 0 0 0 0 0\n"
  "MouseMoveEvent 164 2 0 0 0 0 0\n"
  "InteractionEvent 164 2 0 0 0 0 0\n"
  "TimerEvent 164 2 0 0 0 0 0\n"
  "RenderEvent 164 2 0 0 0 0 0\n"
  "MouseMoveEvent 167 1 0 0 0 0 0\n"
  "InteractionEvent 167 1 0 0 0 0 0\n"
  "TimerEvent 167 1 0 0 0 0 0\n"
  "RenderEvent 167 1 0 0 0 0 0\n"
  "MouseMoveEvent 171 -1 0 0 0 0 0\n"
  "InteractionEvent 171 -1 0 0 0 0 0\n"
  "LeaveEvent 171 -1 0 0 0 0 0\n"
  "MouseMoveEvent 171 -1 0 0 0 0 0\n"
  "InteractionEvent 171 -1 0 0 0 0 0\n"
  "TimerEvent 171 -1 0 0 0 0 0\n"
  "RenderEvent 171 -1 0 0 0 0 0\n"
  "TimerEvent 171 -1 0 0 0 0 0\n"
  "RenderEvent 171 -1 0 0 0 0 0\n"
  "TimerEvent 171 -1 0 0 0 0 0\n"
  "RenderEvent 171 -1 0 0 0 0 0\n"
  "LeftButtonReleaseEvent 171 -1 0 0 0 0 0\n"
  "EndInteractionEvent 171 -1 0 0 0 0 0\n"
  "RenderEvent 171 -1 0 0 0 0 0\n"
  "LeaveEvent 171 -1 0 0 0 0 0\n"
  "EnterEvent 174 0 0 0 0 0 0\n"
  "MouseMoveEvent 174 0 0 0 0 0 0\n"
  "MouseMoveEvent 175 1 0 0 0 0 0\n"
  "MouseMoveEvent 175 2 0 0 0 0 0\n"
  "MouseMoveEvent 175 4 0 0 0 0 0\n"
  "MouseMoveEvent 175 6 0 0 0 0 0\n"
  "MouseMoveEvent 175 8 0 0 0 0 0\n"
  "MouseMoveEvent 175 10 0 0 0 0 0\n"
  "MouseMoveEvent 175 12 0 0 0 0 0\n"
  "MouseMoveEvent 175 15 0 0 0 0 0\n"
  "MouseMoveEvent 175 18 0 0 0 0 0\n"
  "MouseMoveEvent 175 21 0 0 0 0 0\n"
  "MouseMoveEvent 176 23 0 0 0 0 0\n"
  "MouseMoveEvent 178 27 0 0 0 0 0\n"
  "MouseMoveEvent 180 29 0 0 0 0 0\n"
  "MouseMoveEvent 188 33 0 0 0 0 0\n"
  "MouseMoveEvent 198 34 0 0 0 0 0\n"
  "MouseMoveEvent 207 36 0 0 0 0 0\n"
  "MouseMoveEvent 221 36 0 0 0 0 0\n"
  "MouseMoveEvent 238 36 0 0 0 0 0\n"
  "MouseMoveEvent 255 36 0 0 0 0 0\n"
  "MouseMoveEvent 272 36 0 0 0 0 0\n"
  "MouseMoveEvent 289 36 0 0 0 0 0\n"
  "LeaveEvent 306 36 0 0 0 0 0\n";

int TestGPURayCastTwoComponentsIndependent(int argc, char* argv[])
{
  std::cout << "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)" << std::endl;

  int dims[3] = { 35, 35, 35 };

  // Create a vtkImageData with two components
  vtkNew<vtkImageData> image;
  image->SetDimensions(dims[0], dims[1], dims[2]);
  image->AllocateScalars(VTK_DOUBLE, 2);

  // Fill the first half rectangular parallelopiped along X with the
  // first component values and the second half with second component values
  double* ptr = static_cast<double*>(image->GetScalarPointer(0, 0, 0));

  for (int z = 0; z < dims[2]; ++z)
  {
    for (int y = 0; y < dims[1]; ++y)
    {
      for (int x = 0; x < dims[0]; ++x)
      {
        if (x < dims[0] / 2)
        {
          *ptr++ = 1.0;
          *ptr++ = 0.0;
        }
        else
        {
          *ptr++ = 0.0;
          *ptr++ = 1.0;
        }
      }
    }
  }

  vtkNew<vtkRenderWindow> renWin;
  renWin->SetSize(301, 300); // Intentional NPOT size
  renWin->SetMultiSamples(0);

  vtkNew<vtkRenderer> ren;
  renWin->AddRenderer(ren);

  vtkNew<vtkRenderWindowInteractor> iren;
  vtkNew<vtkInteractorStyleTrackballCamera> style;
  iren->SetInteractorStyle(style);
  iren->SetRenderWindow(renWin);

  renWin->Render();

  // Volume render the dataset
  vtkNew<vtkGPUVolumeRayCastMapper> mapper;
  mapper->AutoAdjustSampleDistancesOff();
  mapper->SetSampleDistance(0.9);
  mapper->SetInputData(image);

  // Color transfer function
  vtkNew<vtkColorTransferFunction> ctf1;
  ctf1->AddRGBPoint(0.0, 0.0, 0.0, 0.0);
  ctf1->AddRGBPoint(1.0, 1.0, 0.0, 0.0);

  vtkNew<vtkColorTransferFunction> ctf2;
  ctf2->AddRGBPoint(0.0, 0.0, 0.0, 0.0);
  ctf2->AddRGBPoint(1.0, 0.0, 0.0, 1.0);

  // Opacity functions
  vtkNew<vtkPiecewiseFunction> pf1;
  pf1->AddPoint(0.0, 0.0);
  pf1->AddPoint(1.0, 0.5);

  vtkNew<vtkPiecewiseFunction> pf2;
  pf2->AddPoint(0.0, 0.0);
  pf2->AddPoint(1.0, 0.5);

  // Volume property with independent components ON
  vtkNew<vtkVolumeProperty> property;
  property->IndependentComponentsOn();

  // Set color and opacity functions
  property->SetColor(0, ctf1);
  property->SetColor(1, ctf2);
  property->SetScalarOpacity(0, pf1);
  property->SetScalarOpacity(1, pf2);

  vtkNew<vtkVolume> volume;
  volume->SetMapper(mapper);
  volume->SetProperty(property);
  ren->AddVolume(volume);

  ren->ResetCamera();

  iren->Initialize();
  renWin->Render();

  return vtkTesting::InteractorEventLoop(
    argc, argv, iren, TestGPURayCastTwoComponentsIndependentLog);
}
