Skip to content

Commit 97351b6

Browse files
committed
Revert this commit for Cortex 9!
Switched from using member variable to using ClassData, in order to preserve binary compatibility.
1 parent 28c40e7 commit 97351b6

File tree

4 files changed

+41
-11
lines changed

4 files changed

+41
-11
lines changed

include/IECoreRI/SHWDeepImageReader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class SHWDeepImageReader : public IECore::DeepImageReader
8989
Imath::Box2i m_dataWindow;
9090
Imath::M44f m_worldToCamera;
9191
Imath::M44f m_worldToNDC;
92-
Imath::M44f m_NDCToCamera;
92+
Imath::M44f &m_NDCToCamera();
9393
std::string m_inputFileName;
9494
std::string m_channelNames;
9595

include/IECoreRI/SHWDeepImageWriter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class SHWDeepImageWriter : public IECore::DeepImageWriter
8080
DtexImage *m_dtexImage;
8181
DtexPixel *m_dtexPixel;
8282

83-
Imath::M44f m_NDCToCamera;
83+
Imath::M44f &m_NDCToCamera();
8484
std::string m_outputFileName;
8585
int m_alphaOffset;
8686

src/IECoreRI/SHWDeepImageReader.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,16 @@
4343
using namespace IECore;
4444
using namespace IECoreRI;
4545

46+
#include "IECore/ClassData.h"
47+
48+
static IECore::ClassData< SHWDeepImageReader, Imath::M44f > g_ndcClassData;
49+
50+
Imath::M44f &SHWDeepImageReader::m_NDCToCamera()
51+
{
52+
return g_ndcClassData[ this ];
53+
}
54+
55+
4656
IE_CORE_DEFINERUNTIMETYPED( SHWDeepImageReader );
4757

4858
const Reader::ReaderDescription<SHWDeepImageReader> SHWDeepImageReader::g_readerDescription( "shw" );
@@ -52,6 +62,7 @@ SHWDeepImageReader::SHWDeepImageReader()
5262
m_inputFile( 0 ), m_dtexCache( 0 ), m_dtexImage( 0 ), m_dtexPixel( 0 ),
5363
m_dataWindow( Imath::V2i( 0 ), Imath::V2i( 0 ) )
5464
{
65+
g_ndcClassData.create( this, Imath::M44f() );
5566
}
5667

5768
SHWDeepImageReader::SHWDeepImageReader( const std::string &fileName )
@@ -60,11 +71,13 @@ SHWDeepImageReader::SHWDeepImageReader( const std::string &fileName )
6071
m_dataWindow( Imath::V2i( 0 ), Imath::V2i( 0 ) )
6172
{
6273
m_fileNameParameter->setTypedValue( fileName );
74+
g_ndcClassData.create( this, Imath::M44f() );
6375
}
6476

6577
SHWDeepImageReader::~SHWDeepImageReader()
6678
{
6779
clean();
80+
g_ndcClassData.erase( this );
6881
}
6982

7083
bool SHWDeepImageReader::canRead( const std::string &fileName )
@@ -154,13 +167,13 @@ DeepPixelPtr SHWDeepImageReader::doReadPixel( int x, int y )
154167
previous[j] = 0.0;
155168
}
156169

157-
float nearClip = m_NDCToCamera[3][2] / m_NDCToCamera[3][3];
170+
float nearClip = m_NDCToCamera()[3][2] / m_NDCToCamera()[3][3];
158171
float correction = 1;
159-
if( m_NDCToCamera[3][2] != 0 && m_NDCToCamera[2][3] != 0 )
172+
if( m_NDCToCamera()[3][2] != 0 && m_NDCToCamera()[2][3] != 0 )
160173
{
161174
// Compute a correction factor that converts from spherical distance to perpendicular distance,
162175
// by comparing the closest distance to the near clip with the distance to the near clip at the current pixel position
163-
correction = nearClip / ( Imath::V3f(((x+0.5f)/(m_dataWindow.max.x+1) * 2 - 1), -((y+0.5)/(m_dataWindow.max.y+1) * 2 - 1),0) * m_NDCToCamera ).length();
176+
correction = nearClip / ( Imath::V3f(((x+0.5f)/(m_dataWindow.max.x+1) * 2 - 1), -((y+0.5)/(m_dataWindow.max.y+1) * 2 - 1),0) * m_NDCToCamera() ).length();
164177
}
165178

166179
for ( int i=0; i < numSamples; ++i )
@@ -202,7 +215,7 @@ bool SHWDeepImageReader::open( bool throwOnFailure )
202215
m_dataWindow.max.y = 0;
203216
m_worldToCamera = Imath::M44f();
204217
m_worldToNDC = Imath::M44f();
205-
m_NDCToCamera = Imath::M44f();
218+
m_NDCToCamera() = Imath::M44f();
206219

207220
clean();
208221

@@ -227,7 +240,7 @@ bool SHWDeepImageReader::open( bool throwOnFailure )
227240

228241
DtexNl( m_dtexImage, m_worldToCamera.getValue() );
229242
DtexNP( m_dtexImage, m_worldToNDC.getValue() );
230-
m_NDCToCamera = m_worldToNDC.inverse() * m_worldToCamera;
243+
m_NDCToCamera() = m_worldToNDC.inverse() * m_worldToCamera;
231244
}
232245
else
233246
{

src/IECoreRI/SHWDeepImageWriter.cpp

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,16 @@
4343
using namespace IECore;
4444
using namespace IECoreRI;
4545

46+
#include "IECore/ClassData.h"
47+
48+
static IECore::ClassData< SHWDeepImageWriter, Imath::M44f > g_ndcClassData;
49+
50+
Imath::M44f &SHWDeepImageWriter::m_NDCToCamera()
51+
{
52+
return g_ndcClassData[ this ];
53+
}
54+
55+
4656
IE_CORE_DEFINERUNTIMETYPED( SHWDeepImageWriter );
4757

4858
const DeepImageWriter::DeepImageWriterDescription<SHWDeepImageWriter> SHWDeepImageWriter::g_writerDescription( "shw" );
@@ -56,6 +66,9 @@ SHWDeepImageWriter::SHWDeepImageWriter()
5666

5767
m_tileSizeParameter = new V2iParameter( "tileSize", "The tile size for the image cache. Must be equal or less than resolution.", new V2iData( Imath::V2i( 32, 32 ) ) );
5868
parameters()->addParameter( m_tileSizeParameter );
69+
70+
g_ndcClassData.create( this, Imath::M44f() );
71+
5972
}
6073

6174
SHWDeepImageWriter::SHWDeepImageWriter( const std::string &fileName )
@@ -69,11 +82,15 @@ SHWDeepImageWriter::SHWDeepImageWriter( const std::string &fileName )
6982

7083
m_tileSizeParameter = new V2iParameter( "tileSize", "The tile size for the image cache. Must be equal or less than resolution.", new V2iData( Imath::V2i( 32, 32 ) ) );
7184
parameters()->addParameter( m_tileSizeParameter );
85+
86+
g_ndcClassData.create( this, Imath::M44f() );
7287
}
7388

7489
SHWDeepImageWriter::~SHWDeepImageWriter()
7590
{
7691
clean();
92+
g_ndcClassData.erase( this );
93+
7794
}
7895

7996
bool SHWDeepImageWriter::canWrite( const std::string &fileName )
@@ -110,13 +127,13 @@ void SHWDeepImageWriter::doWritePixel( int x, int y, const DeepPixel *pixel )
110127
unsigned numSamples = pixel->numSamples();
111128

112129
const Imath::V2i &resolution = m_resolutionParameter->getTypedValue();
113-
float nearClip = m_NDCToCamera[3][2] / m_NDCToCamera[3][3];
130+
float nearClip = m_NDCToCamera()[3][2] / m_NDCToCamera()[3][3];
114131
float correction = 1;
115-
if( m_NDCToCamera[3][2] != 0 && m_NDCToCamera[2][3] != 0 )
132+
if( m_NDCToCamera()[3][2] != 0 && m_NDCToCamera()[2][3] != 0 )
116133
{
117134
// Compute a correction factor that converts from perpendicular distance to spherical distance,
118135
// by comparing the closest distance to the near clip with the distance to the near clip at the current pixel position
119-
correction = ( Imath::V3f(((x+0.5f)/resolution.x * 2 - 1), -((y+0.5)/resolution.y * 2 - 1),0) * m_NDCToCamera ).length() / nearClip;
136+
correction = ( Imath::V3f(((x+0.5f)/resolution.x * 2 - 1), -((y+0.5)/resolution.y * 2 - 1),0) * m_NDCToCamera() ).length() / nearClip;
120137
}
121138

122139
for ( unsigned i=0; i < numSamples; ++i )
@@ -200,7 +217,7 @@ void SHWDeepImageWriter::open()
200217
float *NL = worldToCameraParameter()->getTypedValue().getValue();
201218
float *NP = worldToNDCParameter()->getTypedValue().getValue();
202219

203-
m_NDCToCamera = worldToNDCParameter()->getTypedValue().inverse() * worldToCameraParameter()->getTypedValue();
220+
m_NDCToCamera() = worldToNDCParameter()->getTypedValue().inverse() * worldToCameraParameter()->getTypedValue();
204221

205222
/// \todo: does image name mean anything for this format?
206223
int status = DtexAddImage(

0 commit comments

Comments
 (0)