--------------------------------------------------------------------------
| 2626 | |
| 2627 | //-------------------------------------------------------------------------- |
| 2628 | inline std::string ShadingSingleInput(vtkRenderer* vtkNotUsed(ren), vtkVolumeMapper* mapper, |
| 2629 | vtkVolume* vtkNotUsed(vol), vtkImageData* maskInput, vtkVolumeTexture* mask, int maskType, |
| 2630 | int noOfComponents, int independentComponents = 0) |
| 2631 | { |
| 2632 | auto glMapper = vtkOpenGLGPUVolumeRayCastMapper::SafeDownCast(mapper); |
| 2633 | |
| 2634 | std::string shaderStr; |
| 2635 | |
| 2636 | shaderStr += std::string("\ |
| 2637 | \n if (!g_skip)\ |
| 2638 | \n {\ |
| 2639 | \n vec4 scalar;\ |
| 2640 | \n"); |
| 2641 | if (vtkRectilinearGrid::SafeDownCast(mapper->GetInput())) |
| 2642 | { |
| 2643 | shaderStr += std::string("\ |
| 2644 | \n // Compute IJK vertex position for current sample in the rectilinear grid\ |
| 2645 | \n vec4 dataPosWorld = in_volumeMatrix[0] * in_textureDatasetMatrix[0] * vec4(g_dataPos, 1.0);\ |
| 2646 | \n dataPosWorld = dataPosWorld / dataPosWorld.w;\ |
| 2647 | \n dataPosWorld.w = 1.0;\ |
| 2648 | \n ivec3 ijk = ivec3(0);\ |
| 2649 | \n vec3 ijkTexCoord = vec3(0.0);\ |
| 2650 | \n vec3 pCoords = vec3(0.0);\ |
| 2651 | \n vec3 xPrev, xNext, tmp;\ |
| 2652 | \n int sz = textureSize(in_coordTexs, 0);\ |
| 2653 | \n vec4 dataPosWorldScaled = dataPosWorld * vec4(in_coordsScale, 1.0) +\ |
| 2654 | \n vec4(in_coordsBias, 1.0);\ |
| 2655 | \n for (int j = 0; j < 3; ++j)\ |
| 2656 | \n {\ |
| 2657 | \n xPrev = texture1D(in_coordTexs, 0.0).xyz;\ |
| 2658 | \n xNext = texture1D(in_coordTexs, (in_coordTexSizes[j] - 1) / sz).xyz;\ |
| 2659 | \n if (xNext[j] < xPrev[j])\ |
| 2660 | \n {\ |
| 2661 | \n tmp = xNext;\ |
| 2662 | \n xNext = xPrev;\ |
| 2663 | \n xPrev = tmp;\ |
| 2664 | \n }\ |
| 2665 | \n for (int i = 0; i < int(in_coordTexSizes[j]); i++)\ |
| 2666 | \n {\ |
| 2667 | \n xNext = texture1D(in_coordTexs, (i + 0.5) / sz).xyz;\ |
| 2668 | \n if (dataPosWorldScaled[j] >= xPrev[j] && dataPosWorldScaled[j] < xNext[j])\ |
| 2669 | \n {\ |
| 2670 | \n ijk[j] = i - 1;\ |
| 2671 | \n pCoords[j] = (dataPosWorldScaled[j] - xPrev[j]) / (xNext[j] - xPrev[j]);\ |
| 2672 | \n break;\ |
| 2673 | \n }\ |
| 2674 | \n else if (dataPosWorldScaled[j] == xNext[j])\ |
| 2675 | \n {\ |
| 2676 | \n ijk[j] = i - 1;\ |
| 2677 | \n pCoords[j] = 1.0;\ |
| 2678 | \n break;\ |
| 2679 | \n }\ |
| 2680 | \n xPrev = xNext;\ |
| 2681 | \n }\ |
| 2682 | \n ijkTexCoord[j] = (ijk[j] + pCoords[j]) / in_coordTexSizes[j];\ |
| 2683 | \n }\ |
| 2684 | \n scalar = texture3D(in_volume[0], sign(in_cellSpacing[0]) * ijkTexCoord);\ |
| 2685 | \n"); |
no test coverage detected