You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
4.1 KiB
C++
120 lines
4.1 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkOpenGLImageSliceMapper.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 vtkOpenGLImageSliceMapper
|
|
* @brief OpenGL mapper for image slice display
|
|
*
|
|
* vtkOpenGLImageSliceMapper is a concrete implementation of the abstract
|
|
* class vtkImageSliceMapper that interfaces to the OpenGL library.
|
|
* @par Thanks:
|
|
* Thanks to David Gobbi at the Seaman Family MR Centre and Dept. of Clinical
|
|
* Neurosciences, Foothills Medical Centre, Calgary, for providing this class.
|
|
*/
|
|
|
|
#ifndef vtkOpenGLImageSliceMapper_h
|
|
#define vtkOpenGLImageSliceMapper_h
|
|
|
|
#include "vtkImageSliceMapper.h"
|
|
#include "vtkRenderingOpenGL2Module.h" // For export macro
|
|
|
|
class vtkRenderWindow;
|
|
class vtkOpenGLRenderWindow;
|
|
class vtkActor;
|
|
|
|
class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLImageSliceMapper : public vtkImageSliceMapper
|
|
{
|
|
public:
|
|
static vtkOpenGLImageSliceMapper* New();
|
|
vtkTypeMacro(vtkOpenGLImageSliceMapper, vtkImageSliceMapper);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
/**
|
|
* Implement base class method. Perform the render.
|
|
*/
|
|
void Render(vtkRenderer* ren, vtkImageSlice* prop) override;
|
|
|
|
/**
|
|
* Release any graphics resources that are being consumed by this
|
|
* mapper, the image texture in particular. Using the same texture
|
|
* in multiple render windows is NOT currently supported.
|
|
*/
|
|
void ReleaseGraphicsResources(vtkWindow*) override;
|
|
|
|
protected:
|
|
vtkOpenGLImageSliceMapper();
|
|
~vtkOpenGLImageSliceMapper() override;
|
|
|
|
/**
|
|
* Recursive internal method, will call the non-recursive method
|
|
* as many times as necessary if the texture must be broken up into
|
|
* pieces that are small enough for the GPU to render
|
|
*/
|
|
void RecursiveRenderTexturedPolygon(vtkRenderer* ren, vtkImageProperty* property,
|
|
vtkImageData* image, int extent[6], bool recursive);
|
|
|
|
/**
|
|
* Non-recursive internal method, generate a single texture
|
|
* and its corresponding geometry.
|
|
*/
|
|
void RenderTexturedPolygon(vtkRenderer* ren, vtkImageProperty* property, vtkImageData* image,
|
|
int extent[6], bool recursive);
|
|
|
|
/**
|
|
* Basic polygon rendering, if the textured parameter is set the tcoords
|
|
* are included, otherwise they aren't.
|
|
*/
|
|
void RenderPolygon(vtkActor* actor, vtkPoints* points, const int extent[6], vtkRenderer* ren);
|
|
|
|
/**
|
|
* Render the background, which means rendering everything within the
|
|
* plane of the image except for the polygon that displays the image data.
|
|
*/
|
|
void RenderBackground(vtkActor* actor, vtkPoints* points, const int extent[6], vtkRenderer* ren);
|
|
|
|
/**
|
|
* Given an extent that describes a slice (it must have unit thickness
|
|
* in one of the three directions), return the dimension indices that
|
|
* correspond to the texture "x" and "y", provide the x, y image size,
|
|
* and provide the texture size (padded to a power of two if the hardware
|
|
* requires).
|
|
*/
|
|
void ComputeTextureSize(
|
|
const int extent[6], int& xdim, int& ydim, int imageSize[2], int textureSize[2]) override;
|
|
|
|
/**
|
|
* Test whether a given texture size is supported. This includes a
|
|
* check of whether the texture will fit into texture memory.
|
|
*/
|
|
bool TextureSizeOK(const int size[2], vtkRenderer* ren);
|
|
|
|
vtkRenderWindow* RenderWindow; // RenderWindow used for previous render
|
|
int TextureSize[2];
|
|
int TextureBytesPerPixel;
|
|
int LastOrientation;
|
|
int LastSliceNumber;
|
|
|
|
vtkActor* PolyDataActor;
|
|
vtkActor* BackingPolyDataActor;
|
|
vtkActor* BackgroundPolyDataActor;
|
|
|
|
vtkTimeStamp LoadTime;
|
|
|
|
private:
|
|
vtkOpenGLImageSliceMapper(const vtkOpenGLImageSliceMapper&) = delete;
|
|
void operator=(const vtkOpenGLImageSliceMapper&) = delete;
|
|
};
|
|
|
|
#endif
|