Describes resource parameters constraints for a specific LDM data set. More...
#include <LDM/nodes/SoLDMResourceParameters.h>
This class contains fields and functions for setting resource parameters for one specific SoDataset.
Global LDM parameters can be set using static methods in class SoLDMGlobalResourceParameters. See the SoLDMGlobalResourceParameters class description for an overview of LDM memory management.
SoDataSet, SoVolumeData, SoLDMGlobalResourceParameters
typedef void SoLDMResourceParameters::FixedResolutionCB(FixedResolutionReport &, void *) |
When using the fixed resolution mode, this callback is used by the application to get a report back from LDM as far as progress achieved and requests made.
SoLDMResourceParameters::SoLDMResourceParameters | ( | ) |
Constructor.
virtual SoLDMResourceParameters::~SoLDMResourceParameters | ( | ) | [virtual] |
Destructor.
SoDEPRECATED void SoLDMResourceParameters::disableFixedResolutionMode | ( | ) |
void SoLDMResourceParameters::enableFixedResolutionMode | ( | int | resolution, | |
FixedResolutionCB * | func | |||
) |
Use this method only if you need a callback.
Otherwise use the fields fixedResolution and resolution.
SoDEPRECATED void SoLDMResourceParameters::fixParams | ( | SbBool | flag | ) |
static SoType SoLDMResourceParameters::getClassTypeId | ( | ) | [static] |
Returns the type identifier for this class.
Reimplemented from SoFieldContainer.
int SoLDMResourceParameters::getDataSize | ( | ) |
Gets the size of a voxel in bytes.
SoDEPRECATED int SoLDMResourceParameters::getFixedResolution | ( | ) |
Returns the priority of the specified geometry type.
The function will return FALSE if the geometry is of unknown type. See setGeometryPriority().
SoDEPRECATED int SoLDMResourceParameters::getLoadNotificationRate | ( | ) |
SoDEPRECATED LoadPolicy SoLDMResourceParameters::getLoadPolicy | ( | ) |
SoDEPRECATED int SoLDMResourceParameters::getMax2DTextures | ( | ) |
SoDEPRECATED int SoLDMResourceParameters::getMaxMainMemory | ( | ) |
SoDEPRECATED int SoLDMResourceParameters::getMaxResolutionThreshold | ( | ) |
SoDEPRECATED int SoLDMResourceParameters::getMaxTexMemory | ( | ) |
SoDEPRECATED int SoLDMResourceParameters::getMaxTilesInMainMem | ( | ) |
Since OIV9.1 only maxMainMemory should be accessed.
maxTilesInMainMem does not have any meaning since OIV 9.1
SoDEPRECATED int SoLDMResourceParameters::getMaxTilesInTexMem | ( | ) |
SoDEPRECATED int SoLDMResourceParameters::getMinResolutionThreshold | ( | ) |
float SoLDMResourceParameters::getMovingTimeOut | ( | ) |
Returns the amount of time during which LDM continues not loading data once a user stops interaction.
Considered only in NO_USER_INTERACTION mode. See setMovingTimeOut().
SoDEPRECATED int SoLDMResourceParameters::getOverlapping | ( | ) |
SoDEPRECATED int SoLDMResourceParameters::getTex2LoadRate | ( | ) |
SoDEPRECATED int SoLDMResourceParameters::getTex3LoadRate | ( | ) |
SoDEPRECATED float SoLDMResourceParameters::getTileHalfLife | ( | ) |
SoDEPRECATED int SoLDMResourceParameters::getTileSize | ( | ) |
virtual SoType SoLDMResourceParameters::getTypeId | ( | ) | const [virtual] |
Returns the type identifier for this specific instance.
Implements SoTypedObject.
SoDEPRECATED SbBool SoLDMResourceParameters::isFixedResolutionMode | ( | ) |
SoDEPRECATED SbBool SoLDMResourceParameters::isParamsFixed | ( | ) |
void SoLDMResourceParameters::setGeometryPriority | ( | SoType | geometryType, | |
float | priority | |||
) |
Sets the importance of one type of geometry relative to others.
The geometry type should be one of the VolumeViz geometry classes. For example, SoOrthoSlice::getClassTypeId().
The priority passed must be between 0 and 1, 0 being lowest priority and 1 the highest. LDM will refine tiles first where geometries are the most important. For example, if an SoVolumeRender node has a higher priority than slices, then the tiles required for this SoVolumeRender node will be refined first.
Default is 0.5 for a volume, 0.9 for other geometry.
SoDEPRECATED void SoLDMResourceParameters::setLoadNotificationRate | ( | int | rate | ) |
SoDEPRECATED void SoLDMResourceParameters::setLoadPolicy | ( | LoadPolicy | policy | ) |
SoDEPRECATED void SoLDMResourceParameters::setMax2DTextures | ( | int | numTextures | ) |
SoDEPRECATED void SoLDMResourceParameters::setMaxMainMemory | ( | int | maxMainMemory | ) |
SoDEPRECATED void SoLDMResourceParameters::setMaxResolutionThreshold | ( | int | threshold | ) |
SoDEPRECATED void SoLDMResourceParameters::setMaxTexMemory | ( | int | maxTexMemory | ) |
SoDEPRECATED void SoLDMResourceParameters::setMaxTilesInMainMem | ( | int | numTiles | ) |
Since OIV9.1 only maxMainMemory can be changed.
maxTilesInMainMem does not have any meaning since OIV 9.1
SoDEPRECATED void SoLDMResourceParameters::setMaxTilesInTexMem | ( | int | numTiles | ) |
SoDEPRECATED void SoLDMResourceParameters::setMinResolutionThreshold | ( | int | threshold | ) |
void SoLDMResourceParameters::setMovingTimeOut | ( | float | timeout | ) |
Sets the amount of time (in seconds) during which LDM continues not loading once a user stops interaction.
In other words, LDM will start loading again timeOut seconds after the user stops interaction. Considered only in NO_USER_INTERACTION mode. Default is 0.3 seconds.
SoDEPRECATED void SoLDMResourceParameters::setOverlapping | ( | int | ) |
SoDEPRECATED void SoLDMResourceParameters::setTex2LoadRate | ( | int | loadRate | ) |
SoDEPRECATED void SoLDMResourceParameters::setTex3LoadRate | ( | int | loadRate | ) |
SoDEPRECATED void SoLDMResourceParameters::setTileHalfLife | ( | float | timeInSec | ) |
SoDEPRECATED void SoLDMResourceParameters::setTileSize | ( | int | tileDim | ) |
SoDEPRECATED SoSFBool SoLDMResourceParameters::fixedParams |
Lock parameter values.
Default is FALSE. By default, the resource parameters are automatically recalculated if the parameters for another data set change or a new data set is created (to respect the global amount of resources). If this field is TRUE, the resources for this data set are not allowed to change.
In Since OIV 9.1 memory parameters are fixed as soon as the user change the value of one of the field managing memory (CPU and/or GPU). If field is set to -1, LDM is allowed to change the amount of memory given to the dataset. If field is not equal to -1 it means the user define a specific value that LDM won't be allowed to change
Fixed resolution mode.
Default is FALSE. This mode allows you to request that LDM render using tiles at the specified resolution level (see resolution field). If the requested resolution requires more memory than currently allowed (see maxMainMemory, maxTexMemory and SoLDMGlobalResourceParameters) the highest resolution that fits in memory will be used. Note that tiles at lower resolution levels are always loaded into memory, but tiles at higher resolution levels (if any) will not be loaded.
Tile loading notification rate.
Default is 50 tiles. When rate tiles have been loaded in main memory, a redraw will be scheduled. Which means, for the default rate, that if each voxel is one byte and the tile size is 64x64x64, a redraw will be scheduled whenever 13 MB of data has been loaded.
Default value is -1, meaning LDM is in charge of the automatic sharing of a given resource. Automatic sharing means LDM will compute, by itself, the amount of associated resource it allocates to each dataset. The automatic allocation takes into account all nodes in scenegraph.
If value is not -1 (default) LDM will not consider this node in automatic allocation, and allocated Notification rate for this node will be the exact value set in the field. In this case, the fixed value of notification rate is then removed from Global value. All other dataset will share (SoLDMGlobalResourceParameters::getLoadNotificationRate - ( Sum of memory of all datasets with * loadNotificationRate != -1 )) / ( number of datasets with loadNotificationRate == -1 )
Tile loading policy.
Use enum LoadPolicy. Default is NO_USER_INTERACTION. NO_USER_INTERACTION means the asynchronous loading threads will only load tiles when the user is not interacting with the scene (i.e. the application is idle).
The loading occurs as long as there is something to load if ALWAYS is passed. No loading occurs if NEVER is passed, however at least the resolution 0 is loaded.
Maximum of 2D textures memory in MB for this data set.
This field is only considered for SoSlice nodes.
Each tile needed to render a slice (SoOrthoSlice, SoVolumeSkin, etc) must be stored in GPU memory as a 2D texture. This method limits the amount of GPU memory that can be used by (for example) SoOrthoSlice and SoVolumeSkin nodes. This can be useful when combining slices and volume rendering because the 3D textures used by volume rendering require much more GPU memory.
Default value is -1, meaning LDM is in charge of the automatic sharing of a given resource. Automatic sharing means LDM will compute, by itself, the amount of associated resource it allocates to each dataset. The automatic allocation takes into account all nodes in scenegraph.
If value is not -1 (default) LDM will not consider this node in memory allocation, and allocated CPU memory for this node will be the exact value set in the field. In this case, the amount of memory is removed from Global value. All other dataset will share (SoLDMGlobalResourceParameters::setMax2DTexMemory - ( Sum of memory of all datasets with max2DTexMemory != -1 )) / ( number of datasets with max2DTexMemory == -1 )
NOTE: field available since Open Inventor 9.6.0SoDEPRECATED SoSFInt32 SoLDMResourceParameters::max2DTextures |
Maximum number of 2D tiles allowed in texture (GPU) memory for this data set.
Each tile needed to render a slice (SoOrthoSlice, SoVolumeSkin, etc) must be stored in GPU memory as a 2D texture. This method limits the amount of GPU memory that can be used by (for example) SoOrthoSlice and SoVolumeSkin nodes. This can be useful when combining slices and volume rendering because the 3D textures used by volume rendering require much more GPU memory.
Default value is -1, meaning LDM is in charge of the automatic sharing of a given resource. Automatic sharing means LDM will compute, by itself, the amount of associated resource it allocates to each dataset. The automatic allocation takes into account all nodes in scenegraph.
If value is not -1 (default) LDM will not consider this node in memory allocation, and allocated CPU memory for this node will be the exact value set in the field. In this case, the amount of memory is removed from Global value. All other dataset will share (SoLDMGlobalResourceParameters::getMax2DTextures - ( Sum of memory of all datasets with max2DTextures != -1 )) / ( number of datasets with max2DTextures == -1 )
Maximum allowed main memory in MB that LDM is allowed to use for this data set.
Default value is -1, meaning LDM is in charge of the automatic sharing of a given resource. Automatic sharing means LDM will compute, by itself, the amount of associated resource it allocates to each dataset. The automatic allocation take in account all nodes in scenegraph.
If value is not -1 (default) LDM will not consider this node in memory allocation, and allocated CPU memory for this node will be the exact value set in the field. In this case, the amount of memory is removed from Global value. All other dataset will share (SoLDMGlobalResourceParameters::getMaxMainMemory - ( Sum of memory of all datasets with maxMainMemory != -1 )) / ( number of datasets with maxMainMemory == -1 )
SoDEPRECATED SoSFInt32 SoLDMResourceParameters::maxNumTriangles |
Maximum number of triangles allowed to be rendered by LDM render nodes.
Mainly for SoHeightFieldRender. Default value is 0 meaning no limits.
This is an approximate value because some nodes using this parameter draw indivisible chunks of triangles. Particularly useful to limit the number of triangles generated for an SoHeightFieldGeometry. A global limit for all nodes can be set using SoLDMGlobalResourceParameters.
Maximum loading threshold for the LDM module.
LDM will never load tiles below this resolution threshold. Threshold is the power of 2 of the desired subsample level. For instance, passing 1 means never load tiles of full resolution. Default is 0, full resolution, i.e., load everything.
Maximum allowed texture (GPU) memory in MB for this data set.
This field is only considered for SoVolumeRender nodes.
Default value is -1, meaning LDM is in charge of the automatic sharing of a given resource. Automatic sharing means LDM will compute, by itself, the amount of associated resource it allocates to each dataset. The automatic allocation take in account all nodes in scenegraph.
If value is not -1 (default) LDM will not consider this node in memory allocation, and allocated CPU memory for this node will be the exact value set in the field. In this case, the amount of memory is removed from Global value. All other dataset will share (SoLDMGlobalResourceParameters::getMaxTexMemory - ( Sum of memory of all datasets with maxTexMemory != -1 )) / ( number of datasets with maxTexMemory == -1 )
SoDEPRECATED SoSFInt32 SoLDMResourceParameters::maxTilesInMainMem |
Maximum number of tiles in main memory for this data set.
Changing this number will automatically adjust the maximum amount of memory set by maxMainMemory (memory required for each tile depends on tile size and voxel size). Default is (maxMainMemory/numDatasets)/(tileSize in MB).
Only maxMainMemory can be used. Field as no more any effect on others parameters
SoDEPRECATED SoSFInt32 SoLDMResourceParameters::maxTilesInTexMem |
Maximum number of 3D tiles in texture memory for this data set.
Each tile needed for volume rendering (SoVolumeRender) and volume geometry must be stored in GPU memory as a 3D texture. Changing this number will automatically adjust the field maxTexMemory (maximum amount of texture memory). Default is maxTexMemory/(tileSize in MB).
Only maxTexMemory can be used. Field as no more any effect on others parameters
Minimum loading threshold for LDM module.
Specifies to LDM to never unload tiles below this resolution threshold. Threshold is the power of 2 of the desired subsample level. For instance, passing 2 means never unload tiles of resolution 1/4. Default is -1, meaning the minimum subsample level.
If used with an ROI enabled, only tiles below the min resolution threshold and within the ROI subvolume will never be unloaded. All tiles outside the ROI subvolume will be unloaded. The ROI box allows you to specify where it is the most important to increase the resolution within the subvolume. By default, (subvolume ROI flag enabled) this would be within the box. If for example using the exclusion box mode, then lower resolution tiles will be within the box and higher resolution ones outside the box and within the subvolume.
The minimum subsample level can be queried using SoLDMNodeFrontManager::getMinResolution. NOTE: SoLDMNodeFrontManager is declared SoEXTENDER and is intended for advanced users. For details see its header file.
Number of threads used by the tile prefetch mechanism.
Tile prefetch is activated when LDM_USE_PREFETCH_OPTIM and LDM_USE_IN_MEM_COMPRESSION are set to true. Default value is -1, meaning the maximum number of threads will be used.
SoDEPRECATED SoSFInt32 SoLDMResourceParameters::overlapping |
Sets the tile overlap value (number of voxels) for non-LDM data.
0 is the only supported value since Open Inventor 9.0.
Resolution level for fixed resolution mode.
Default is 1, i.e., 1 out of 2 voxels resolution. The requested resolution is specified as the power of 2 of the desired subsample level. Resolution level 0 is full resolution data. If requested resolution requires more memory than allowed (see maxMainMemory, maxTexMemory, SoLDMGlobalResourceParameters) the highest resolution that fits is used.
Size of subtiles used by some accelerated algorithms.
Default is (16, 16, 16). This field is only considered for SoVolumeRender nodes when field SoVolumeRender::subdivideTile is set to TRUE. Notes:
Maximum number of 2D tiles to be loaded in texture memory per frame.
This affects rendering nodes that use 2D textures, for example SoOrthoSlice and SoVolumeSkin. Default is SoLDMGlobalResourceParameters::getTex2LoadRate(). This field is only considered for SoSlice nodes.
Each tile needed to render a slice (SoOrthoSlice, SoVolumeSkin, etc) must be loaded into GPU memory as a 2D texture. Increasing the loadRate value reduces the number of frames required to reach maximum resolution. But the render traversal has to wait for the data transfer to finish, so each frame may take longer to render, increasing the total time to reach maximum resolution.
Default value is -1, meaning LDM is in charge of the automatic sharing of a given resource. Automatic sharing means LDM will compute, by itself, the amount of associated resource it allocates to each dataset. The automatic allocation takes into account all nodes in scenegraph.
If value is not -1 (default) LDM will not consider this node in automatic allocation, and allocated 2D texture for this node will be the exact value set in the field. In this case, the amount of LoadRate is removed from Global value. All other dataset will share (SoLDMGlobalResourceParameters::getTex2LoadRate - ( Sum of memory of all datasets with tex2LoadRate != -1 )) / ( number of datasets with tex2LoadRate == -1 )
Maximum number of 3D tiles to be loaded into texture memory per frame for this data set.
You can set this number for all data sets by calling SoLDMGlobalResourceParameters::setTex3LoadRate(). This field is only considered for SoVolumeRender nodes.
Each tile needed for volume rendering (SoVolumeRender) and volume geometry must be transfered to GPU memory as a 3D texture. So, for example, transfering 1000 tiles at the loadRate 10 requires 100 frames. (How many seconds this takes depends on the frames per second possible, which in turn depends on many factors including the complexity of the scene graph.) Increasing the loadRate value reduces the number of frames required to reach maximum resolution. But the render traversal has to wait for the data transfer to finish, so each frame may take longer to render, increasing the total time to reach maximum resolution.
Default value is -1, meaning LDM is in charge of the automatic sharing of a given resource. Automatic sharing means LDM will compute, by itself, the amount of associated resource it allocates to each dataset. The automatic allocation takes into account all nodes in scenegraph.
If value is not -1 (default) LDM will not consider this node in automatic allocation, and allocated 3D texture LoadRate for this node will be the exact value set in the field. In this case, the amount of memory is removed from Global value. All other dataset will share (SoLDMGlobalResourceParameters::getTex3LoadRate - ( Sum of memory of all datasets with tex3LoadRate != -1 )) / ( number of datasets with tex3LoadRate == -1 )
Sets the tile size for non-LDM data.
VolumeViz always manages volume data in CPU memory as a hierarchy of tiles and data is transferred to GPU memory as tiles. When using VolumeViz with in-memory data or a file format other than LDM, the data is converted to tiles "on the fly". In this case, it is possible to use this field to specify the tile size and this may affect performance.
When loading data using an LDM volume reader, e.g. loading an LDM format file or using a custom volume reader that implements the readTile() method, the tile size is the value returned by the reader's getTileSize() method and cannot be modified by the application, so this field is ignored.
The default tile size is (64, 64, 64). Specifying a larger tile size than the default can improve performance and reduce the time required to fully refine the image. For example, a larger tile size reduces the total number of tiles that must be managed. However there are some trade-offs and limitations. A larger tile size means that the volume reader must load more data from the disk for each tile requested. That makes a larger tile size potentially more efficient for volume rendering, but means it will take longer to load the data to render a single slice because most of the data in each tile is not relevant for rendering that slice (but see also SoSlice::largeSliceSupport). In general we recommend setting the tile size to 128 or 256. For relatively small volumes, especially in-memory volumes 512^3 or less, it can be effective to set the tile size equal to the volume size. This allows the entire volume to be handled as a single tile.
Notes:
Tile half-life (seconds).
Default is 2 seconds. When calling SoDataSet::getLdmDataAccess::getData(), once a tile is unlocked by the application (call to SoDataSet::getLdmDataAccess::releaseData), its weight will decrease until the tile is weighted again by LDM. This function allows you to set how long it takes for the tile's weight to be divided by 2 (initial weight is 1). The tile weight will be set to 0 when the weight becomes less than 0.05.