[Vm-dev] VM Maker: VMMaker.oscog-eem.578.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Jan 7 02:36:50 UTC 2014
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.578.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.578
Author: eem
Time: 6 January 2014, 6:32:56.636 pm
UUID: 11de99f6-118f-4f47-ab2b-b5c029f0045d
Ancestors: VMMaker.oscog-eem.577
Merge VMMaker-tpr.335:
fix typo bug in ScratchPlugin>primitiveWaterRipples1
=============== Diff against VMMaker.oscog-eem.577 ===============
Item was changed:
----- Method: ScratchPlugin>>primitiveWaterRipples1 (in category 'other filters') -----
primitiveWaterRipples1
| in out aArray bArray ripply temp pix dx dy dist inOop outOop width allPix aArOop bArOop height t1 blops x y power val val2 dx2 dy2 newLoc |
<export: true>
<var: 'in' declareC: 'unsigned int *in'>
<var: 'out' declareC: 'unsigned int *out'>
<var: 'aArray' declareC: 'double *aArray'>
<var: 'bArray' declareC: 'double *bArray'>
<var: 'ripply' declareC: 'int ripply'>
<var: 'temp' declareC: 'double temp'>
<var: 'pix' declareC: 'unsigned int pix'>
<var: 'dist' declareC: 'double dist'>
<var: 'dx2' declareC: 'double dx2'>
<var: 'dy2' declareC: 'double dy2'>
inOop := interpreterProxy stackValue: 5.
outOop := interpreterProxy stackValue: 4.
width := interpreterProxy stackIntegerValue: 3.
in := self checkedUnsignedIntPtrOf: inOop.
out := self checkedUnsignedIntPtrOf: outOop.
allPix := interpreterProxy stSizeOf: inOop.
ripply := interpreterProxy stackIntegerValue: 2.
aArOop := interpreterProxy stackValue: 1.
bArOop := interpreterProxy stackValue: 0.
aArray := self checkedFloatPtrOf: aArOop.
bArray := self checkedFloatPtrOf: bArOop.
interpreterProxy success: ((interpreterProxy stSizeOf: outOop) = allPix).
interpreterProxy failed ifTrue: [^ nil].
height := allPix // width.
t1 := self cCode: 'rand()'.
blops := t1 \\ ripply -1.
0 to: blops /2-1 do: [:t |
t1 := self cCode: 'rand()'.
x := t1 \\ width.
t1 := self cCode: 'rand()'.
y := t1 \\ height.
t1 := self cCode: 'rand()'.
power := t1 \\ 8.
-4 to: 4 do: [:g |
-4 to: 4 do: [:h |
dist := ((g*g) + (h*h)) asFloat.
((dist < 25) and: [dist > 0]) ifTrue: [
dx := (x + g) asInteger.
dy := (y + h) asInteger.
((dx >0) and: [(dy>0) and: [(dy < height) and: [dx < width]]]) ifTrue: [
aArray at: ((dy)*width + dx) put: (power *(1.0 asFloat -(dist/(25.0 asFloat))) asFloat).
].
].
].
].
].
1 to: width -2 do: [:f |
1 to: height -2 do: [:d |
val := (d)*width + f.
aArray at: val put: (((
(bArray at: (val+1)) + (bArray at: (val-1)) + (bArray at: (val + width)) + (bArray at: (val - width)) +
((bArray at: (val -1 -width))/2) + ((bArray at: (val-1+width))/2) + ((bArray at: (val+1-width))/2) + ((bArray at: (val+1+width))/2)) /4) - (aArray at: (val))).
aArray at: (val) put: ((aArray at: (val))*(0.9 asFloat)).
].
].
"temp := bArray.
bArray := aArray.
aArray := temp."
0 to: width*height do: [:q |
temp := bArray at: q.
bArray at: q put: (aArray at: q).
aArray at: q put: temp.
].
0 to: height-1 do: [:j |
0 to: width-1 do: [:i |
((i > 1) and: [(i<(width-1)) and: [(j>1) and: [(j<(height-1))]]]) ifTrue: [
val2 := (j)*width + i.
dx2 := ((((aArray at: (val2)) - (aArray at: (val2-1))) + ((aArray at: (val2+1)) - (aArray at: (val2)))) *64) asFloat.
dy2 := ((((aArray at: (val2)) - (aArray at: (val2-width))) + ((aArray at: (val2+width)) - (aArray at: (val2)))) /64) asFloat.
+ (dx2<2) ifTrue: [dx2 := -2].
- (dx2<-2) ifTrue: [dx2 := -2].
(dx2>2) ifTrue: [dx2 := 2].
+ (dy2<2) ifTrue: [dy2 := -2].
- (dy2<-2) ifTrue: [dy2 := -2].
(dy2>2) ifTrue: [dy2 := 2].
newLoc := ((j+dy2)*width + (i+dx2)) asInteger.
((newLoc < (width*height)) and: [newLoc >=0]) ifTrue: [
pix := in at: newLoc]
ifFalse: [
pix := in at: (i +(j*width)) ].
]
ifFalse: [
pix := in at: (i +(j*width)) ].
out at: (i + (j*width)) put: pix.
]].
interpreterProxy pop: 6. "pop args, leave rcvr on stack"
^ 0
!
More information about the Vm-dev
mailing list