Home My Page Projects Code Snippets Project Openings 3D graphics for Standard ML
Summary Activity SCM

SCM Repository

[sml3d] Diff of /trunk/sml3d/src/particles/compiler/translate.sml
ViewVC logotype

Diff of /trunk/sml3d/src/particles/compiler/translate.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 915, Tue Jun 22 22:13:22 2010 UTC revision 974, Tue Aug 31 23:03:51 2010 UTC
# Line 402  Line 402 
402            val P.EMIT{maxNum, posDomain, velDomain, colDomain, ...} = emit            val P.EMIT{maxNum, posDomain, velDomain, colDomain, ...} = emit
403            val blk = newBlock (env, k)            val blk = newBlock (env, k)
404           in           in
405            letPRIM("isDead", IR.T_BOOL, IR.GT, [ttl, IR.newConst("small", IR.C_FLOAT 0.1)], fn isDead =>            letPRIM("isDead", IR.T_BOOL, IR.GT, [IR.newConst("small", IR.C_FLOAT 0.1), ttl], fn isDead =>
406        IR.mkIF(isDead,        IR.mkIF(isDead,
407         (* then *)         (* then *)
408         letPRIM("t1", IR.T_FLOAT, IR.ITOF, [psvToIRVar (env, maxNum)], fn t1 =>         letPRIM("t1", IR.T_FLOAT, IR.ITOF, [psvToIRVar (env, maxNum)], fn t1 =>
# Line 478  Line 478 
478                        goto(state, blk)))))                        goto(state, blk)))))
479                    end                    end
480    
481                | P.GRAVITY(dir) =>                | P.ACCEL dir =>
482                      letPRIM("scaledVec", IR.T_VEC, IR.SCALE, [psvToIRVar(env, PSV.timeStep), psvToIRVar(env, dir)], fn theScale =>                      letPRIM("scaledVec", IR.T_VEC, IR.SCALE, [psvToIRVar(env, PSV.timeStep), psvToIRVar(env, dir)], fn theScale =>
483                      letPRIM("ps_vel", IR.T_VEC, IR.ADD_VEC, [theScale, vel], fn newVel =>                      letPRIM("ps_vel", IR.T_VEC, IR.ADD_VEC, [theScale, vel], fn newVel =>
484                        k(PS{pos = pos, vel = newVel, size = size, ttl = ttl, color = color, pos2=pos2, dummy=dummy})))                        k(PS{pos = pos, vel = newVel, size = size, ttl = ttl, color = color, pos2=pos2, dummy=dummy})))
# Line 553  Line 553 
553                                | (PSV.T_FLOAT, PSV.FLOAT floatVal) => IR.newConst(name, IR.C_FLOAT(floatVal))                                | (PSV.T_FLOAT, PSV.FLOAT floatVal) => IR.newConst(name, IR.C_FLOAT(floatVal))
554                                | (PSV.T_VEC3F, PSV.UNDEF) => IR.newGlobal(x, IR.T_VEC)                                | (PSV.T_VEC3F, PSV.UNDEF) => IR.newGlobal(x, IR.T_VEC)
555                                | (PSV.T_VEC3F, PSV.VEC3F vecVal) => IR.newConst(name, IR.C_VEC(vecVal))                                | (PSV.T_VEC3F, PSV.VEC3F vecVal) => IR.newConst(name, IR.C_VEC(vecVal))
556                                | _ => raise Fail("Error in setup, type mismatch between IR and PSV vars.")                                | _ => raise Fail("Error in setup, type mismatch between PSV vars and their binding.")
557                              (* end case *))                              (* end case *))
558                        in                        in
559                          PSV.Map.insert (map, x, x')                          PSV.Map.insert (map, x, x')
# Line 562  Line 562 
562                    TE(blks, PSV.Set.foldl ins PSV.Map.empty vars)                    TE(blks, PSV.Set.foldl ins PSV.Map.empty vars)
563                  end                  end
564    
   
565        fun evalActs f [] state = f [] state        fun evalActs f [] state = f [] state
566              | evalActs f (psa :: psal) state = (case psa              | evalActs f (psa :: psal) state = (case psa
567                of P.SEQ(acts) => (case acts                of P.SEQ(acts) => (case acts
# Line 602  Line 601 
601            )            )
602    
603            (* The entry block is the emitter, and the rest of the blocks define the physics processing. *)            (* The entry block is the emitter, and the rest of the blocks define the physics processing. *)
604    
605          fun isGlobal(IR.V{scope, ...}) = (case scope
606            of IR.S_GLOBAL(v) => true
607             | _ => false
608            (* end case *))
609    
610          fun extractVarMap(TE(blks, map)) = map
611    
612            val outPgm = PSysIR.PGM {            val outPgm = PSysIR.PGM {
613                globals = PSV.Map.filter isGlobal (extractVarMap env),
614              emitter = entryBlock,              emitter = entryBlock,
615              physics = List.nth(!blks, 1),              physics = List.nth(!blks, 1),
616              render = render              render = render

Legend:
Removed from v.915  
changed lines
  Added in v.974

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0