Ejemplo n.º 1
0
void TextureDataObject::setTextureData_( const bool quantize )
{
    getUnconst_()->updateLastUsedWithCurrentTime_();

    ConstMemoryUnitPtr data = dataSourcePtr_->getData( *lodNodePtr_ );
    const T* rawData = data->getData< T >();
    if( quantize )
    {
        std::vector< T > textureData;
        getQuantizedData_< T >( rawData, textureData );
        data_->allocAndSetData( textureData );
    }
    else
        data_->allocAndSetData( rawData, getRawDataSize_( ));
}
Ejemplo n.º 2
0
void TextureDataObject::getQuantizedData_( const T* rawData,
                                         std::vector< T >& formattedData ) const
{
    const VolumeInformation& volumeInfo = dataSourcePtr_->getVolumeInformation();
    const uint32_t compCount = volumeInfo.compCount;
    const DataType dataType = volumeInfo.dataType;
    const size_t dataSize = getRawDataSize_();

    formattedData.resize( dataSize );

    switch( dataType )
    {
       case DT_UINT8:
       {
            const Vector3f min( std::numeric_limits< uint8_t >::min( ));
            const Vector3f max( std::numeric_limits< uint8_t >::max( ));
            unsignedQuantize( rawData, &formattedData[ 0 ], dataSize,
                              compCount, min, max );
            break;
       }
       case DT_UINT16:
       {
            const Vector3f min( std::numeric_limits< uint16_t >::min( ));
            const Vector3f max( std::numeric_limits< uint16_t >::max( ));
            unsignedQuantize( rawData, &formattedData[ 0 ], dataSize,
                              compCount, min, max );
            break;
       }
       case DT_UINT32:
       {
            const Vector3f min( std::numeric_limits< uint32_t >::min( ));
            const Vector3f max( std::numeric_limits< uint32_t >::max( ));
            unsignedQuantize( rawData, &formattedData[ 0 ], dataSize,
                              compCount, min, max );
            break;
       }
       case DT_INT8:
       {
            const Vector3f min( std::numeric_limits< int8_t >::min( ));
            const Vector3f max( std::numeric_limits< int8_t >::max( ));
            signedQuantize( rawData, &formattedData[ 0 ], dataSize,
                            compCount, min, max );
            break;
       }
       case DT_INT16:
       {
            const Vector3f min( std::numeric_limits< int16_t >::min( ));
            const Vector3f max( std::numeric_limits< int16_t >::max( ));
            signedQuantize( rawData, &formattedData[ 0 ], dataSize,
                            compCount, min, max);
            break;
       }
       case DT_INT32:
       {
            const Vector3f min( std::numeric_limits< int32_t >::min( ));
            const Vector3f max( std::numeric_limits< int32_t >::max( ));
            signedQuantize( rawData, &formattedData[ 0 ], dataSize,
                            compCount, min, max );
            break;
       }
       case DT_UNDEFINED:
       case DT_FLOAT32:
       case DT_FLOAT64:
       {
            LBTHROW( std::runtime_error( "Unimplemented data type." ));
       }
    }
}