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.

126 lines
3.6 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkOpenGLVolumeLookupTable.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.
=========================================================================*/
/*=============================================================================
Copyright and License information
=============================================================================*/
/**
* @class vtkOpenGLVolumeLookupTable
* @brief Base class for OpenGL texture management of scalar color,
* opacity and gradient opacity lookup tables.
*/
#ifndef vtkOpenGLVolumeLookupTable_h
#define vtkOpenGLVolumeLookupTable_h
#ifndef __VTK_WRAP__
#include "vtkObject.h"
// Forward declarations
class vtkOpenGLRenderWindow;
class vtkTextureObject;
class vtkWindow;
class vtkOpenGLVolumeLookupTable : public vtkObject
{
public:
vtkTypeMacro(vtkOpenGLVolumeLookupTable, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent) override;
// static vtkOpenGLVolumeLookupTable* New();
/**
* Get the texture unit associated with the managed texture object
*/
int GetTextureUnit();
/**
* Activate / deactivate the internal texture object
*/
//@{
void Activate();
void Deactivate();
//@}
/**
* Get the maximum supported texture width for the target OpenGL environment.
*/
int GetMaximumSupportedTextureWidth(vtkOpenGLRenderWindow* renWin, int idealWidth);
/**
* Release graphics resources
*/
void ReleaseGraphicsResources(vtkWindow* window);
/**
* Update the internal texture object using the transfer function provided.
*/
virtual void Update(vtkObject* func, double scalarRange[2], int blendMode, double sampleDistance,
double unitDistance, int filterValue, vtkOpenGLRenderWindow* renWin);
/**
* Get access to the texture height used by this object
*/
vtkGetMacro(TextureHeight, int);
/**
* Get access to the texture width used by this object
*/
vtkGetMacro(TextureWidth, int);
protected:
vtkOpenGLVolumeLookupTable() = default;
virtual ~vtkOpenGLVolumeLookupTable() override;
double LastRange[2] = { 0.0, 0.0 };
float* Table = nullptr;
int LastInterpolation = -1;
int NumberOfColorComponents = 1;
int TextureWidth = 1024;
int TextureHeight = 1;
vtkTextureObject* TextureObject = nullptr;
vtkTimeStamp BuildTime;
/**
* Test whether the internal function needs to be updated.
*/
virtual bool NeedsUpdate(
vtkObject* func, double scalarRange[2], int blendMode, double sampleDistance);
/**
* Internal method to actually update the texture object
*/
virtual void InternalUpdate(
vtkObject* func, int blendMode, double sampleDistance, double unitDistance, int filterValue);
/**
* Compute ideal width and height for the texture based on function provided
*/
virtual void ComputeIdealTextureSize(
vtkObject* func, int& width, int& height, vtkOpenGLRenderWindow* renWin);
/**
* Allocate internal data table
*/
virtual void AllocateTable();
private:
vtkOpenGLVolumeLookupTable(const vtkOpenGLVolumeLookupTable&) = delete;
void operator=(const vtkOpenGLVolumeLookupTable&) = delete;
};
#endif //__VTK_WRAP__
#endif // vtkOpenGLVolumeLookupTable_h
// VTK-HeaderTest-Exclude: vtkOpenGLVolumeLookupTable.h