[Vm-dev] VM Maker: VMMaker.oscog-eem.598.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Jan 31 01:10:47 UTC 2014


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.598.mcz

==================== Summary ====================

Name: VMMaker.oscog-eem.598
Author: eem
Time: 30 January 2014, 5:06:23.221 pm
UUID: b85d7330-2ddc-4d90-8592-4e37234f4ac2
Ancestors: VMMaker.oscog-eem.597

Eliminate declaratiosn for non-existent vars in ScratchPlugin>>primitiveFisheye

=============== Diff against VMMaker.oscog-eem.597 ===============

Item was changed:
  ----- Method: ScratchPlugin>>primitiveFisheye (in category 'other filters') -----
  primitiveFisheye
  
  	| inOop outOop width in out sz height centerX centerY dx dy ang pix power r srcX srcY scaledPower |
  	<export: true>
+ 	<var: 'in' type: #'unsigned int *'>
+ 	<var: 'out' type: #'unsigned int *'>
+ 	<var: 'dx' type: #double>
+ 	<var: 'dy' type: #double>
+ 	<var: 'ang' type: #double>
+ 	<var: 'r' type: #double>
+ 	<var: 'scaledPower' type: #double>
- 	<var: 'in' declareC: 'unsigned int *in'>
- 	<var: 'out' declareC: 'unsigned int *out'>
- 	<var: 'scaleX' declareC: 'double scaleX'>
- 	<var: 'scaleY' declareC: 'double scaleY'>
- 	<var: 'whirlRadians' declareC: 'double whirlRadians'>
- 	<var: 'radiusSquared' declareC: 'double radiusSquared'>
- 	<var: 'dx' declareC: 'double dx'>
- 	<var: 'dy' declareC: 'double dy'>
- 	<var: 'd' declareC: 'double d'>
- 	<var: 'factor' declareC: 'double factor'>
- 	<var: 'ang' declareC: 'double ang'>
- 	<var: 'sina' declareC: 'double sina'>
- 	<var: 'cosa' declareC: 'double cosa'>
- 	<var: 'r' declareC: 'double r'>
- 	<var: 'scaledPower' declareC: 'double scaledPower'>
  
  	inOop := interpreterProxy stackValue: 3.
  	outOop := interpreterProxy stackValue: 2.
  	width := interpreterProxy stackIntegerValue: 1.
  	power := interpreterProxy stackIntegerValue: 0.
  	in := self checkedUnsignedIntPtrOf: inOop.
  	out := self checkedUnsignedIntPtrOf: outOop.
  	sz := interpreterProxy stSizeOf: inOop.
  	interpreterProxy success: ((interpreterProxy stSizeOf: outOop) = sz).
  	interpreterProxy failed ifTrue: [^ nil].
  
  	"calculate height, center, scales, radius, whirlRadians, and radiusSquared"
  	height := sz // width.
  	centerX := width // 2.
  	centerY := height // 2.
  
  	height := sz // width.
  	centerX := width // 2.
  	centerY := height // 2.
  	scaledPower := power / 100.0.
  
  	0 to: width - 1 do: [:x |
  		0 to: height - 1 do: [:y |
  			dx := (x - centerX) / centerX asFloat.
  			dy := (y - centerY) / centerY asFloat.
  			r := ((dx * dx) + (dy * dy)) sqrt raisedTo: scaledPower.
  			r <= 1.0
  				ifTrue: [
  					ang := self cCode: 'atan2(dy,dx)'.
  					srcX := (1024 * (centerX + ((r * ang cos) * centerX))) asInteger.
  					srcY := (1024 * (centerY + ((r * ang sin) * centerY))) asInteger]
  				ifFalse: [
  					srcX := 1024 * x.
  					srcY := 1024 * y].
  			pix := self interpolatedFrom: in
  					x: srcX
  					y: srcY
  					width: width
  					height: height.
  			out at: ((y * width) + x "+ 1 for Squeak") put: pix]].
  
  	interpreterProxy pop: 4.  "pop args, leave rcvr on stack"
  	^ 0
  !



More information about the Vm-dev mailing list