Arithmetic functions for buffers More...
#include <Inventor/algorithms/SoArithmetic.h>
Public Member Functions | |
SoArithmetic () | |
virtual int | add (SoBufferObject *inputBufferA, const SbDataType typeA, SoBufferObject *inputBufferB, const SbDataType typeB, SoBufferObject *outputBufferC, const SbDataType typeC) |
int | add (SoCpuBufferObject *inputBufferA, const SbDataType typeA, SoCpuBufferObject *inputBufferB, const SbDataType typeB, SoCpuBufferObject *outputBufferC, const SbDataType typeC) |
virtual int | mult (SoBufferObject *inputBufferA, const SbDataType typeA, SoBufferObject *inputBufferB, const SbDataType typeB, SoBufferObject *outputBufferC, const SbDataType typeC) |
int | mult (SoCpuBufferObject *inputBufferA, const SbDataType typeA, SoCpuBufferObject *inputBufferB, const SbDataType typeB, SoCpuBufferObject *outputBufferC, const SbDataType typeC) |
virtual int | scale (SoBufferObject *inputBufferA, const SbDataType typeA, SoBufferObject *outputBufferB, const SbDataType typeB, const float scaleValue) |
int | scale (SoCpuBufferObject *inputBufferA, const SbDataType typeA, SoCpuBufferObject *outputBufferB, const SbDataType typeB, const float scaleValue) |
virtual int | shift (SoBufferObject *inputBufferA, const SbDataType typeA, SoBufferObject *outputBufferB, const SbDataType typeB, const float shiftFactor) |
int | shift (SoCpuBufferObject *inputBufferA, const SbDataType typeA, SoCpuBufferObject *outputBufferB, const SbDataType typeB, const float shiftFactor) |
virtual int | madd (SoBufferObject *inputBufferA, const SbDataType typeA, SoBufferObject *inputBufferB, const SbDataType typeB, SoBufferObject *outputBufferC, const SbDataType typeC, const float scaleValue) |
int | madd (SoCpuBufferObject *inputBufferA, const SbDataType typeA, SoCpuBufferObject *inputBufferB, const SbDataType typeB, SoCpuBufferObject *outputBufferC, const SbDataType typeC, const float scaleValue) |
virtual void | computeMinMax (SoBufferObject *inputBuffer, const SbDataType dataType, double &min, double &max) |
virtual void | computeMinMax (SoBufferObject *inputBuffer, const SbDataType dataType, const SbVec3i32 &arrayDim, const SbBox3i32 &range, double &min, double &max) |
void | computeMinMax (SoCpuBufferObject *inputBuffer, const SbDataType dataType, const SbVec3i32 &arrayDim, const SbBox3i32 &range, double &min, double &max) |
virtual void | computeMinMaxWithUndefinedValue (SoBufferObject *inputBuffer, const SbDataType dataType, const double undefinedValue, double &min, double &max) |
virtual void | computeMinMaxWithUndefinedValue (SoBufferObject *inputBuffer, const SbDataType dataType, const SbVec3i32 &arrayDim, const SbBox3i32 &range, const double undefinedValue, double &min, double &max) |
void | computeMinMaxWithUndefinedValue (SoCpuBufferObject *inputBuffer, const SbDataType dataType, const SbVec3i32 &arrayDim, const SbBox3i32 &range, const double undefinedValue, double &min, double &max) |
The Arithmetic module provides basic Add, Multiply, etc functions that operate on buffers.
Examples:
SoAlgorithms, SoConversion, SoConvolution, SoDataExtract, SoSeismic
SoArithmetic::SoArithmetic | ( | ) |
Constructor.
int SoArithmetic::add | ( | SoCpuBufferObject * | inputBufferA, | |
const SbDataType | typeA, | |||
SoCpuBufferObject * | inputBufferB, | |||
const SbDataType | typeB, | |||
SoCpuBufferObject * | outputBufferC, | |||
const SbDataType | typeC | |||
) |
Add two buffers into a third one.
Fast version for Cpu buffers.
virtual int SoArithmetic::add | ( | SoBufferObject * | inputBufferA, | |
const SbDataType | typeA, | |||
SoBufferObject * | inputBufferB, | |||
const SbDataType | typeB, | |||
SoBufferObject * | outputBufferC, | |||
const SbDataType | typeC | |||
) | [virtual] |
Add two buffers into a third one.
C = A + B
Note: C can be a reference to A or B.
Limitation: typeA and typeB must be the same as typeC.
Reimplemented in SoCudaArithmetic, and SoOpenCLArithmetic.
void SoArithmetic::computeMinMax | ( | SoCpuBufferObject * | inputBuffer, | |
const SbDataType | dataType, | |||
const SbVec3i32 & | arrayDim, | |||
const SbBox3i32 & | range, | |||
double & | min, | |||
double & | max | |||
) |
Compute min max of values contained in the specified range of the buffer.
Fast version for Cpu buffers.
virtual void SoArithmetic::computeMinMax | ( | SoBufferObject * | inputBuffer, | |
const SbDataType | dataType, | |||
const SbVec3i32 & | arrayDim, | |||
const SbBox3i32 & | range, | |||
double & | min, | |||
double & | max | |||
) | [virtual] |
Compute min max of values contained in the specified range of the buffer.
Assumes the buffer contains a 3D array of values. However 1D and 2D arrays can be handled as degenerate cases. For example, to use a 1D array of length N and compute over the range I to J:
inputBuffer | The source buffer object. | |
dataType | The type of the data in the source buffer object. | |
arrayDim | Dimensions of the array (can be degenerate, e.g. N,1,1) | |
range | Subset of the array to consider | |
min,max | Result values |
virtual void SoArithmetic::computeMinMax | ( | SoBufferObject * | inputBuffer, | |
const SbDataType | dataType, | |||
double & | min, | |||
double & | max | |||
) | [virtual] |
Compute min max of all values contained in a buffer.
inputBuffer | The source buffer object. | |
dataType | The type of the data in the source buffer object. | |
min,max | Result values |
void SoArithmetic::computeMinMaxWithUndefinedValue | ( | SoCpuBufferObject * | inputBuffer, | |
const SbDataType | dataType, | |||
const SbVec3i32 & | arrayDim, | |||
const SbBox3i32 & | range, | |||
const double | undefinedValue, | |||
double & | min, | |||
double & | max | |||
) |
Compute min max of values contained in the specified range of the buffer that are not equal to the specified undefined value.
Fast version for Cpu buffers.
virtual void SoArithmetic::computeMinMaxWithUndefinedValue | ( | SoBufferObject * | inputBuffer, | |
const SbDataType | dataType, | |||
const SbVec3i32 & | arrayDim, | |||
const SbBox3i32 & | range, | |||
const double | undefinedValue, | |||
double & | min, | |||
double & | max | |||
) | [virtual] |
Compute min max of values contained in the specified range of the buffer that are not equal to the specified undefined value.
Assumes the buffer contains a 3D array of values. However 1D and 2D arrays can be handled as degenerate cases. For example, to use a 1D array of length N and compute over the range I to J:
inputBuffer | The source buffer object. | |
dataType | The type of the data in the source buffer object. | |
arrayDim | Dimensions of the array (can be degenerate, e.g. N,1,1) | |
range | Subset of the array to consider | |
undefinedValue | ignored value | |
min,max | Result values |
virtual void SoArithmetic::computeMinMaxWithUndefinedValue | ( | SoBufferObject * | inputBuffer, | |
const SbDataType | dataType, | |||
const double | undefinedValue, | |||
double & | min, | |||
double & | max | |||
) | [virtual] |
Compute min max of all values contained in a buffer that are not equal to the specified undefined value.
inputBuffer | The source buffer object. | |
dataType | The type of the data in the source buffer object. | |
undefinedValue | ignored value | |
min,max | Result values |
int SoArithmetic::madd | ( | SoCpuBufferObject * | inputBufferA, | |
const SbDataType | typeA, | |||
SoCpuBufferObject * | inputBufferB, | |||
const SbDataType | typeB, | |||
SoCpuBufferObject * | outputBufferC, | |||
const SbDataType | typeC, | |||
const float | scaleValue | |||
) |
C = A * scale + B
Fast version for Cpu buffers.
virtual int SoArithmetic::madd | ( | SoBufferObject * | inputBufferA, | |
const SbDataType | typeA, | |||
SoBufferObject * | inputBufferB, | |||
const SbDataType | typeB, | |||
SoBufferObject * | outputBufferC, | |||
const SbDataType | typeC, | |||
const float | scaleValue | |||
) | [virtual] |
C = A * scale + B
Note: C can be a reference to A or B
Limitation: typeA and typeB must be the same as typeC.
Reimplemented in SoCudaArithmetic, and SoOpenCLArithmetic.
int SoArithmetic::mult | ( | SoCpuBufferObject * | inputBufferA, | |
const SbDataType | typeA, | |||
SoCpuBufferObject * | inputBufferB, | |||
const SbDataType | typeB, | |||
SoCpuBufferObject * | outputBufferC, | |||
const SbDataType | typeC | |||
) |
Multiply two buffers into a third one.
Fast version for Cpu buffers.
virtual int SoArithmetic::mult | ( | SoBufferObject * | inputBufferA, | |
const SbDataType | typeA, | |||
SoBufferObject * | inputBufferB, | |||
const SbDataType | typeB, | |||
SoBufferObject * | outputBufferC, | |||
const SbDataType | typeC | |||
) | [virtual] |
Multiply two buffers into a third one.
C = A * B Note: C can be a reference to A or B
Limitation: typeA and typeB must be the same as typeC
Reimplemented in SoCudaArithmetic, and SoOpenCLArithmetic.
int SoArithmetic::scale | ( | SoCpuBufferObject * | inputBufferA, | |
const SbDataType | typeA, | |||
SoCpuBufferObject * | outputBufferB, | |||
const SbDataType | typeB, | |||
const float | scaleValue | |||
) |
B = A * scaleFactor
Fast version for Cpu buffers.
virtual int SoArithmetic::scale | ( | SoBufferObject * | inputBufferA, | |
const SbDataType | typeA, | |||
SoBufferObject * | outputBufferB, | |||
const SbDataType | typeB, | |||
const float | scaleValue | |||
) | [virtual] |
B = A * scaleFactor
Note: B can be a reference to A
Limitation: typeA must be the same as typeC.
Reimplemented in SoCudaArithmetic, and SoOpenCLArithmetic.
int SoArithmetic::shift | ( | SoCpuBufferObject * | inputBufferA, | |
const SbDataType | typeA, | |||
SoCpuBufferObject * | outputBufferB, | |||
const SbDataType | typeB, | |||
const float | shiftFactor | |||
) |
B = A + shiftFactor
Fast version for Cpu buffers.
virtual int SoArithmetic::shift | ( | SoBufferObject * | inputBufferA, | |
const SbDataType | typeA, | |||
SoBufferObject * | outputBufferB, | |||
const SbDataType | typeB, | |||
const float | shiftFactor | |||
) | [virtual] |
B = A + shiftFactor
Note: B can be a reference to A
Limitation: typeA must be the same as typeC.
Reimplemented in SoCudaArithmetic, and SoOpenCLArithmetic.