text: /*=========================================================================
  
    Program:   Visualization Toolkit
    Module:    vtkRayCastImageDisplayHelper.h
  
    Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
    All rights reserved.
    See Copyright.txt or http://www.kitware.com/Copyright.htm 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.
  
  =========================================================================*/
  
  /**
   * @class   vtkRayCastImageDisplayHelper
   * @brief   helper class that draws the image to the screen
   *
   * This is a helper class for drawing images created from ray casting on the screen.
   * This is the abstract device-independent superclass.
   *
   * @sa
   * vtkUnstructuredGridVolumeRayCastMapper
   * vtkOpenGLRayCastImageDisplayHelper
  */
  
  #ifndef vtkRayCastImageDisplayHelper_h
  #define vtkRayCastImageDisplayHelper_h
  
  #include "vtkRenderingVolumeModule.h" // For export macro
  #include "vtkObject.h"
  
  class vtkFixedPointRayCastImage;
  class vtkRenderer;
  class vtkVolume;
  class vtkWindow;
  
  class VTKRENDERINGVOLUME_EXPORT vtkRayCastImageDisplayHelper : public vtkObject
  {
  public:
    static vtkRayCastImageDisplayHelper *New();
    vtkTypeMacro(vtkRayCastImageDisplayHelper,vtkObject);
    void PrintSelf(ostream& os, vtkIndent indent) override;
  
    virtual void RenderTexture( vtkVolume *vol, vtkRenderer *ren,
                                int imageMemorySize[2],
                                int imageViewportSize[2],
                                int imageInUseSize[2],
                                int imageOrigin[2],
                                float requestedDepth,
                                unsigned char *image ) = 0;
  
    virtual void RenderTexture( vtkVolume *vol, vtkRenderer *ren,
                                int imageMemorySize[2],
                                int imageViewportSize[2],
                                int imageInUseSize[2],
                                int imageOrigin[2],
                                float requestedDepth,
                                unsigned short *image ) = 0;
  
    virtual void RenderTexture( vtkVolume *vol, vtkRenderer *ren,
                                vtkFixedPointRayCastImage *image,
                                float requestedDepth ) = 0;
  
    vtkSetClampMacro( PreMultipliedColors, vtkTypeBool, 0, 1 );
    vtkGetMacro( PreMultipliedColors, vtkTypeBool );
    vtkBooleanMacro( PreMultipliedColors, vtkTypeBool );
  
  
    //@{
    /**
     * Set / Get the pixel scale to be applied to the image before display.
     * Can be set to scale the incoming pixel values - for example the
     * fixed point mapper uses the unsigned short API but with 15 bit
     * values so needs a scale of 2.0.
     */
    vtkSetMacro( PixelScale, float );
    vtkGetMacro( PixelScale, float );
    //@}
  
    /**
     * Derived class should implemen this if needed
     */
    virtual void ReleaseGraphicsResources(vtkWindow *) { }
  
  protected:
    vtkRayCastImageDisplayHelper();
    ~vtkRayCastImageDisplayHelper() override;
  
    /**
     * Have the colors already been multiplied by alpha?
     */
    vtkTypeBool PreMultipliedColors;
  
    float PixelScale;
  
  private:
    vtkRayCastImageDisplayHelper(const vtkRayCastImageDisplayHelper&) = delete;
    void operator=(const vtkRayCastImageDisplayHelper&) = delete;
  };
  
  #endif
  
  