3434
3535import unittest
3636import sys
37+ import os
3738import imath
3839
3940import IECore
4041import IECoreImage
4142
4243class DisplayDriverServerTest ( unittest .TestCase ) :
4344
45+ def __prepareBuf ( self , buf , width , offset , red , green , blue ):
46+ for i in range ( 0 , width ):
47+ buf [3 * i ] = blue [i + offset ]
48+ buf [3 * i + 1 ] = green [i + offset ]
49+ buf [3 * i + 2 ] = red [i + offset ]
50+
4451 def testPortNumber ( self ) :
4552
4653 s1 = IECoreImage .DisplayDriverServer ( 1559 )
@@ -122,22 +129,37 @@ def testPortRangeRegistry( self ) :
122129 def testMergeMap ( self ) :
123130 server = IECoreImage .DisplayDriverServer ( 45001 )
124131
125- displayWindow = imath .Box2i ( imath .V2i (0 ,0 ), imath .V2i (100 ,100 ) )
126- dataWindow = imath .Box2i ( imath .V2i (0 ,0 ), imath .V2i (100 ,100 ) )
132+ img = IECore .Reader .create ( os .path .join ( "test" , "IECoreImage" , "data" , "tiff" , "bluegreen_noise.400x300.tif" ) )()
133+ self .assertEqual ( img .keys (), [ 'B' , 'G' , 'R' ] )
134+ red = img ['R' ]
135+ green = img ['G' ]
136+ blue = img ['B' ]
137+ width = img .dataWindow .max ().x - img .dataWindow .min ().x + 1
127138
128139 params = IECore .CompoundData ()
129140 params ['displayHost' ] = IECore .StringData ('localhost' )
130141 params ['displayPort' ] = IECore .StringData ( '45001' )
131142 params ['displayDriverServer:mergeId' ] = IECore .IntData ( 42 )
132143 params ['displayDriverServer:mergeClients' ] = IECore .IntData ( 2 )
133144 params ["remoteDisplayType" ] = IECore .StringData ( "ImageDisplayDriver" )
145+ params ["handle" ] = IECore .StringData ( "myHandle1" )
146+
147+ idd1 = IECoreImage .ClientDisplayDriver ( img .displayWindow , img .dataWindow , list ( img .channelNames () ), params )
134148
135- idd1 = IECoreImage . ClientDisplayDriver ( displayWindow , dataWindow , list ( [ "R" , "G" ] ), params )
136- idd2 = IECoreImage .ClientDisplayDriver ( displayWindow , dataWindow , list ( [ "R" , "G" ] ), params )
149+ params [ "handle" ] = IECore . StringData ( "myHandle2" )
150+ idd2 = IECoreImage .ClientDisplayDriver ( img . displayWindow , img . dataWindow , list ( img . channelNames () ), params )
137151
138152 params ['displayDriverServer:mergeId' ] = IECore .IntData ( 666 )
139153 params ['displayDriverServer:mergeClients' ] = IECore .IntData ( 1 )
140- idd3 = IECoreImage .ClientDisplayDriver ( displayWindow , dataWindow , list ( ["R" , "G" ] ), params )
154+ params ["handle" ] = IECore .StringData ( "myHandle3" )
155+ idd3 = IECoreImage .ClientDisplayDriver ( img .displayWindow , img .dataWindow , list ( img .channelNames () ), params )
156+
157+ buf = IECore .FloatVectorData ( width * 3 )
158+ for i in range ( 0 , img .dataWindow .max ().y - img .dataWindow .min ().y + 1 ):
159+ self .__prepareBuf ( buf , width , i * width , red , green , blue )
160+ idd1 .imageData ( imath .Box2i ( imath .V2i ( img .dataWindow .min ().x , i + img .dataWindow .min ().y ), imath .V2i ( img .dataWindow .max ().x , i + img .dataWindow .min ().y ) ), buf )
161+ idd2 .imageData ( imath .Box2i ( imath .V2i ( img .dataWindow .min ().x , i + img .dataWindow .min ().y ), imath .V2i ( img .dataWindow .max ().x , i + img .dataWindow .min ().y ) ), buf )
162+ idd3 .imageData ( imath .Box2i ( imath .V2i ( img .dataWindow .min ().x , i + img .dataWindow .min ().y ), imath .V2i ( img .dataWindow .max ().x , i + img .dataWindow .min ().y ) ), buf )
141163
142164 # Test that the merge map has merge id 42 and that there are two clients
143165 mergeDriverInfo = IECoreImage .DisplayDriverServer .getMergeDriverInfo ( 42 )
@@ -158,6 +180,22 @@ def testMergeMap( self ) :
158180
159181 idd3 .imageClose ()
160182
183+ newImg = IECoreImage .ImageDisplayDriver .removeStoredImage ( "myHandle1" )
184+ newImg2 = IECoreImage .ImageDisplayDriver .removeStoredImage ( "myHandle2" )
185+ newImg3 = IECoreImage .ImageDisplayDriver .removeStoredImage ( "myHandle3" )
186+
187+ # merge drivers share the same display driver - so second image should be none,
188+ # as there is no image drivere associated with it.
189+ self .assertIsNone ( newImg2 )
190+
191+ # remove blindData for comparison
192+ newImg .blindData ().clear ()
193+ img .blindData ().clear ()
194+ self .assertEqual ( newImg , img )
195+
196+ newImg3 .blindData ().clear ()
197+ self .assertEqual ( newImg3 , img )
198+
161199 server = None
162200
163201if __name__ == "__main__" :
0 commit comments