TuttleOFX
1
|
00001 #include "AbstractLut.hpp" 00002 #include "Interpolator.hpp" 00003 #include "TrilinInterpolator.hpp" 00004 #include "Color.hpp" 00005 #include "LutReader.hpp" 00006 00007 namespace tuttle { 00008 00009 AbstractLut::AbstractLut() 00010 : _dimSize( 0 ) 00011 , _data( NULL ) 00012 , _shared( false ) 00013 , _interpolator( new TrilinInterpolator() ) 00014 {} 00015 00016 AbstractLut::AbstractLut( Interpolator* interpolator, size_t dimSize, double* data /* = NULL */ ) 00017 : _dimSize( dimSize ) 00018 , _data( data ) 00019 , _shared( false ) 00020 , _interpolator( interpolator ) 00021 {} 00022 00023 AbstractLut::AbstractLut( Interpolator* interpolator, LutReader& reader ) 00024 : _dimSize( reader.steps().size() ) 00025 , _data( &reader.data()[0] ) 00026 , _shared( true ) 00027 , _interpolator( interpolator ) 00028 {} 00029 00030 AbstractLut::~AbstractLut() 00031 { 00032 if( _data && !_shared ) 00033 { 00034 delete [] _data; 00035 } 00036 if( _interpolator ) 00037 delete _interpolator; 00038 } 00039 00040 void AbstractLut::reset( Interpolator* interpolator, LutReader& reader ) 00041 { 00042 if( !_shared && _data ) 00043 { 00044 delete [] _data; 00045 } 00046 _data = &reader.data()[0]; 00047 _dimSize = reader.steps().size(); 00048 _shared = true; 00049 if( _interpolator ) 00050 delete _interpolator; 00051 _interpolator = interpolator; 00052 } 00053 00054 void AbstractLut::reset( LutReader& reader ) 00055 { 00056 if( !_shared && _data ) 00057 { 00058 delete [] _data; 00059 } 00060 _data = &reader.data()[0]; 00061 _dimSize = reader.steps().size(); 00062 _shared = true; 00063 if( _interpolator ) 00064 delete _interpolator; 00065 _interpolator = new TrilinInterpolator(); 00066 } 00067 00068 void AbstractLut::reset( size_t dimSize, double* data /* = NULL */ ) 00069 { 00070 if( _data && !_shared ) 00071 delete [] _data; 00072 _dimSize = _dimSize; 00073 if( _data == NULL ) 00074 { 00075 _data = new double[ totalSize() * 3 ]; 00076 memset( _data, 0, sizeof( double ) * totalSize() * 3 ); 00077 } 00078 _data = data; 00079 _shared = false; 00080 if( _interpolator ) 00081 delete _interpolator; 00082 _interpolator = new TrilinInterpolator(); 00083 } 00084 00085 }