[Swift-commit] r7613 - in SwiftApps: . raytrace raytrace/c-ray raytrace/c-ray-1.1 raytrace/c-ray-1.1/x86 swift-galaxy/swift
ketan at ci.uchicago.edu
ketan at ci.uchicago.edu
Wed Feb 19 15:10:45 CST 2014
Author: ketan
Date: 2014-02-19 15:10:45 -0600 (Wed, 19 Feb 2014)
New Revision: 7613
Added:
SwiftApps/raytrace/
SwiftApps/raytrace/c-ray-1.1.tar.gz
SwiftApps/raytrace/c-ray-1.1/
SwiftApps/raytrace/c-ray-1.1/Makefile
SwiftApps/raytrace/c-ray-1.1/Makefile.gcc
SwiftApps/raytrace/c-ray-1.1/Makefile.mips
SwiftApps/raytrace/c-ray-1.1/README
SwiftApps/raytrace/c-ray-1.1/RUN
SwiftApps/raytrace/c-ray-1.1/RUN.full
SwiftApps/raytrace/c-ray-1.1/c-ray-f
SwiftApps/raytrace/c-ray-1.1/c-ray-f.c
SwiftApps/raytrace/c-ray-1.1/c-ray-mt
SwiftApps/raytrace/c-ray-1.1/c-ray-mt.c
SwiftApps/raytrace/c-ray-1.1/gen_fract.scm
SwiftApps/raytrace/c-ray-1.1/gen_fract.txt
SwiftApps/raytrace/c-ray-1.1/scene
SwiftApps/raytrace/c-ray-1.1/scene.jpg
SwiftApps/raytrace/c-ray-1.1/scene_1024x768.jpg
SwiftApps/raytrace/c-ray-1.1/sgi.txt
SwiftApps/raytrace/c-ray-1.1/sphfract
SwiftApps/raytrace/c-ray-1.1/sphfract.jpg
SwiftApps/raytrace/c-ray-1.1/x86/
SwiftApps/raytrace/c-ray-1.1/x86/c-ray-f.exe
SwiftApps/raytrace/c-ray-swift.tgz
SwiftApps/raytrace/c-ray/
SwiftApps/raytrace/c-ray/c-ray.swift
SwiftApps/raytrace/c-ray/cf
SwiftApps/raytrace/c-ray/cf.bgl
SwiftApps/raytrace/c-ray/coaster-service.conf
SwiftApps/raytrace/c-ray/command.sh
SwiftApps/raytrace/c-ray/genscenes.sh
SwiftApps/raytrace/c-ray/local.xml
SwiftApps/raytrace/c-ray/pool.txt
SwiftApps/raytrace/c-ray/sites-cipher.xml
SwiftApps/raytrace/c-ray/sites.beagle.xml
SwiftApps/raytrace/c-ray/sites.midway.xml
SwiftApps/raytrace/c-ray/sites.xml
SwiftApps/raytrace/c-ray/tc
SwiftApps/raytrace/c-ray/tscene
SwiftApps/raytrace/c-ray/tscene.original
Modified:
SwiftApps/swift-galaxy/swift/swiftforeach.xml
Log:
adding raytrace app
Added: SwiftApps/raytrace/c-ray/c-ray.swift
===================================================================
--- SwiftApps/raytrace/c-ray/c-ray.swift (rev 0)
+++ SwiftApps/raytrace/c-ray/c-ray.swift 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,56 @@
+type scene;
+type image;
+type scene_template;
+type movie;
+
+int threads;
+int steps;
+string resolution;
+int delay;
+int quality;
+
+threads = @toint(@arg("threads","1"));
+resolution = @arg("resolution","800x600");
+steps = @toint(@arg("steps","10"));
+delay = @toint(@arg("delay", "0"));
+quality = @toint(@arg("quality", "75"));
+
+scene_template template <"tscene">;
+
+app (scene out) generate (scene_template t, int i, int total)
+{
+ genscenes i total @t stdout=@out;
+}
+
+app (image o) render (scene i, string r, int t)
+{
+ cray "-s" r "-t" t stdin=@i stdout=@o;
+}
+
+app (movie o) convert (image i[], int d, int q)
+{
+ convert "-delay" d "-quality" q @filenames(i) @filename(o);
+}
+
+app (image outimg) ppm2gif (image inimg)
+{
+ convert @filename(inimg) @filename(outimg);
+}
+
+scene scene_files[] <simple_mapper; location=".", prefix="scene.", suffix=".data">;
+
+image image_files[] <simple_mapper; location=".", prefix="scene.", suffix=".ppm">;
+
+image gif_files[] <simple_mapper; location=".", prefix="scene.", suffix=".gif">;
+
+movie output_movie <"output.gif">;
+
+foreach i in [1:steps] {
+ scene_files[i] = generate(template, i, steps);
+ image_files[i] = render(scene_files[i], resolution, threads);
+ gif_files[i] = ppm2gif(image_files[i]);
+}
+
+#output_movie=convert(image_files, delay, quality);
+output_movie=convert(gif_files, delay, quality);
+
Added: SwiftApps/raytrace/c-ray/cf
===================================================================
--- SwiftApps/raytrace/c-ray/cf (rev 0)
+++ SwiftApps/raytrace/c-ray/cf 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,6 @@
+use.provider.staging=true
+wrapperlog.always.transfer=false
+execution.retries=0
+provider.staging.pin.swiftfiles=false
+sitedir.keep=true
+use.wrapper.staging=false
Added: SwiftApps/raytrace/c-ray/cf.bgl
===================================================================
--- SwiftApps/raytrace/c-ray/cf.bgl (rev 0)
+++ SwiftApps/raytrace/c-ray/cf.bgl 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,8 @@
+wrapperlog.always.transfer=true
+sitedir.keep=true
+execution.retries=1
+lazy.errors=true
+use.provider.staging=true
+provider.staging.pin.swiftfiles=false
+foreach.max.threads=100
+provenance.log=false
Added: SwiftApps/raytrace/c-ray/coaster-service.conf
===================================================================
--- SwiftApps/raytrace/c-ray/coaster-service.conf (rev 0)
+++ SwiftApps/raytrace/c-ray/coaster-service.conf 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,47 @@
+#Location of SWIFT. If empty, PATH is referenced
+ export SWIFT=
+
+ # Where to place/launch worker.pl on the remote machine for sites.xml
+ export WORKER_LOCATION=/root
+
+ # How to launch workers: local, ssh, or cobalt
+ export WORKER_MODE=ssh
+
+ # Worker logging setting passed to worker.pl for sites.xml
+ export WORKER_LOGGING_LEVEL=DEBUG
+
+ export SSH_TUNNELING=yes
+
+ # User name to use for all systems
+ export WORKER_USERNAME=root
+
+ # Worker host names for ssh
+# export WORKER_HOSTS="crush thwomp stomp crank grind churn trounce thrash vanquish"
+export WORKER_HOSTS="23.20.13.93 23.20.102.14 54.226.151.7 54.205.124.100"
+
+ # Directory to keep log files, relative to working directory when launching start-coaster-service
+ export LOG_DIR=logs
+ export WORKER_LOG_DIR=/root
+
+ # Manually define ports. If not specified, ports will be automatically generated
+ export LOCAL_PORT=50100
+ export SERVICE_PORT=50200
+
+ # Set shared filesystem to no since work will be done in local /sandbox directory
+ export SHARED_FILESYSTEM=no
+
+ # start-coaster-service tries to automatically detect IP address.
+ # Specify here if auto detection is not working correctly
+ export IPADDR=
+
+ # Below are various settings to give information about how to create sites.xml
+ export WORK=/tmp/ketan
+ export JOBS_PER_NODE=8
+ export JOBSPERNODE=8
+ export JOBTHROTTLE=$( echo "scale=5; ($JOBS_PER_NODE * $( echo $WORKER_HOSTS | wc -w ))/100 - 0.00001"|bc )
+
+ # Swift applications
+ #app cat=/bin/cat
+ #app bash=/bin/bash
+ #app echo=/bin/echo
+
Added: SwiftApps/raytrace/c-ray/command.sh
===================================================================
--- SwiftApps/raytrace/c-ray/command.sh (rev 0)
+++ SwiftApps/raytrace/c-ray/command.sh 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1 @@
+convert -delay 0 -quality 75 ./scene.0001.ppm ./scene.0002.ppm ./scene.0003.ppm ./scene.0004.ppm ./scene.0005.ppm ./scene.0006.ppm ./scene.0007.ppm ./scene.0008.ppm ./scene.0009.ppm ./scene.0010.ppm ./scene.0011.ppm ./scene.0012.ppm ./scene.0013.ppm ./scene.0014.ppm ./scene.0015.ppm ./scene.0016.ppm ./scene.0017.ppm ./scene.0018.ppm ./scene.0019.ppm ./scene.0020.ppm ./scene.0021.ppm ./scene.0022.ppm ./scene.0023.ppm ./scene.0024.ppm ./scene.0025.ppm ./scene.0026.ppm ./scene.0027.ppm ./scene.0028.ppm ./scene.0029.ppm ./scene.0030.ppm ./scene.0031.ppm ./scene.0032.ppm ./scene.0033.ppm ./scene.0034.ppm ./scene.0035.ppm ./scene.0036.ppm ./scene.0037.ppm ./scene.0038.ppm ./scene.0039.ppm ./scene.0040.ppm ./scene.0041.ppm ./scene.0042.ppm ./scene.0043.ppm ./scene.0044.ppm ./scene.0045.ppm ./scene.0046.ppm ./scene.0047.ppm ./scene.0048.ppm ./scene.0049.ppm ./scene.0050.ppm ./scene.0051.ppm ./scene.0052.ppm ./scene.0053.ppm ./scene.0054.ppm ./scene.0055.ppm ./scene.0056.ppm ./scene.
0057.ppm ./scene.0058.ppm ./scene.0059.ppm ./scene.0060.ppm ./scene.0061.ppm ./scene.0062.ppm ./scene.0063.ppm ./scene.0064.ppm ./scene.0065.ppm ./scene.0066.ppm ./scene.0067.ppm ./scene.0068.ppm ./scene.0069.ppm ./scene.0070.ppm ./scene.0071.ppm ./scene.0072.ppm ./scene.0073.ppm ./scene.0074.ppm ./scene.0075.ppm ./scene.0076.ppm ./scene.0077.ppm ./scene.0078.ppm ./scene.0079.ppm ./scene.0080.ppm ./scene.0081.ppm ./scene.0082.ppm ./scene.0083.ppm ./scene.0084.ppm ./scene.0085.ppm ./scene.0086.ppm ./scene.0087.ppm ./scene.0088.ppm ./scene.0089.ppm ./scene.0090.ppm ./scene.0091.ppm ./scene.0092.ppm ./scene.0093.ppm ./scene.0094.ppm ./scene.0095.ppm ./scene.0096.ppm ./scene.0097.ppm ./scene.0098.ppm ./scene.0099.ppm ./scene.0100.ppm ./scene.0101.ppm ./scene.0102.ppm ./scene.0103.ppm ./scene.0104.ppm ./scene.0105.ppm ./scene.0106.ppm ./scene.0107.ppm ./scene.0108.ppm ./scene.0109.ppm ./scene.0110.ppm ./scene.0111.ppm ./scene.0112.ppm ./scene.0113.ppm ./scene.0114.ppm ./scene.011
5.ppm ./scene.0116.ppm ./scene.0117.ppm ./scene.0118.ppm ./scene.0119.ppm ./scene.0120.ppm ./scene.0121.ppm ./scene.0122.ppm ./scene.0123.ppm ./scene.0124.ppm ./scene.0125.ppm ./scene.0126.ppm ./scene.0127.ppm ./scene.0128.ppm ./scene.0129.ppm ./scene.0130.ppm ./scene.0131.ppm ./scene.0132.ppm ./scene.0133.ppm ./scene.0134.ppm ./scene.0135.ppm ./scene.0136.ppm ./scene.0137.ppm ./scene.0138.ppm ./scene.0139.ppm ./scene.0140.ppm ./scene.0141.ppm ./scene.0142.ppm ./scene.0143.ppm ./scene.0144.ppm ./scene.0145.ppm ./scene.0146.ppm ./scene.0147.ppm ./scene.0148.ppm ./scene.0149.ppm ./scene.0150.ppm ./scene.0151.ppm ./scene.0152.ppm ./scene.0153.ppm ./scene.0154.ppm ./scene.0155.ppm ./scene.0156.ppm ./scene.0157.ppm ./scene.0158.ppm ./scene.0159.ppm ./scene.0160.ppm ./scene.0161.ppm ./scene.0162.ppm ./scene.0163.ppm ./scene.0164.ppm ./scene.0165.ppm ./scene.0166.ppm ./scene.0167.ppm ./scene.0168.ppm ./scene.0169.ppm ./scene.0170.ppm ./scene.0171.ppm ./scene.0172.ppm ./scene.0173.p
pm ./scene.0174.ppm ./scene.0175.ppm ./scene.0176.ppm ./scene.0177.ppm ./scene.0178.ppm ./scene.0179.ppm ./scene.0180.ppm ./scene.0181.ppm ./scene.0182.ppm ./scene.0183.ppm ./scene.0184.ppm ./scene.0185.ppm ./scene.0186.ppm ./scene.0187.ppm ./scene.0188.ppm ./scene.0189.ppm ./scene.0190.ppm ./scene.0191.ppm ./scene.0192.ppm ./scene.0193.ppm ./scene.0194.ppm ./scene.0195.ppm ./scene.0196.ppm ./scene.0197.ppm ./scene.0198.ppm ./scene.0199.ppm ./scene.0200.ppm ./scene.0201.ppm ./scene.0202.ppm ./scene.0203.ppm ./scene.0204.ppm ./scene.0205.ppm ./scene.0206.ppm ./scene.0207.ppm ./scene.0208.ppm ./scene.0209.ppm ./scene.0210.ppm ./scene.0211.ppm ./scene.0212.ppm ./scene.0213.ppm ./scene.0214.ppm ./scene.0215.ppm ./scene.0216.ppm ./scene.0217.ppm ./scene.0218.ppm ./scene.0219.ppm ./scene.0220.ppm ./scene.0221.ppm ./scene.0222.ppm ./scene.0223.ppm ./scene.0224.ppm ./scene.0225.ppm ./scene.0226.ppm ./scene.0227.ppm ./scene.0228.ppm ./scene.0229.ppm ./scene.0230.ppm ./scene.0231.ppm
./scene.0232.ppm ./scene.0233.ppm ./scene.0234.ppm ./scene.0235.ppm ./scene.0236.ppm ./scene.0237.ppm ./scene.0238.ppm ./scene.0239.ppm ./scene.0240.ppm ./scene.0241.ppm ./scene.0242.ppm ./scene.0243.ppm ./scene.0244.ppm ./scene.0245.ppm ./scene.0246.ppm ./scene.0247.ppm ./scene.0248.ppm ./scene.0249.ppm ./scene.0250.ppm ./scene.0251.ppm ./scene.0252.ppm ./scene.0253.ppm ./scene.0254.ppm ./scene.0255.ppm ./scene.0256.ppm ./scene.0257.ppm ./scene.0258.ppm ./scene.0259.ppm ./scene.0260.ppm ./scene.0261.ppm ./scene.0262.ppm ./scene.0263.ppm ./scene.0264.ppm ./scene.0265.ppm ./scene.0266.ppm ./scene.0267.ppm ./scene.0268.ppm ./scene.0269.ppm ./scene.0270.ppm ./scene.0271.ppm ./scene.0272.ppm ./scene.0273.ppm ./scene.0274.ppm ./scene.0275.ppm ./scene.0276.ppm ./scene.0277.ppm ./scene.0278.ppm ./scene.0279.ppm ./scene.0280.ppm ./scene.0281.ppm ./scene.0282.ppm ./scene.0283.ppm ./scene.0284.ppm ./scene.0285.ppm ./scene.0286.ppm ./scene.0287.ppm ./scene.0288.ppm ./scene.0289.ppm ./s
cene.0290.ppm ./scene.0291.ppm ./scene.0292.ppm ./scene.0293.ppm ./scene.0294.ppm ./scene.0295.ppm ./scene.0296.ppm ./scene.0297.ppm ./scene.0298.ppm ./scene.0299.ppm ./scene.0300.ppm ./scene.0301.ppm ./scene.0302.ppm ./scene.0303.ppm ./scene.0304.ppm ./scene.0305.ppm ./scene.0306.ppm ./scene.0307.ppm ./scene.0308.ppm ./scene.0309.ppm ./scene.0310.ppm ./scene.0311.ppm ./scene.0312.ppm ./scene.0313.ppm ./scene.0314.ppm ./scene.0315.ppm ./scene.0316.ppm ./scene.0317.ppm ./scene.0318.ppm ./scene.0319.ppm ./scene.0320.ppm ./scene.0321.ppm ./scene.0322.ppm ./scene.0323.ppm ./scene.0324.ppm ./scene.0325.ppm ./scene.0326.ppm ./scene.0327.ppm ./scene.0328.ppm ./scene.0329.ppm ./scene.0330.ppm ./scene.0331.ppm ./scene.0332.ppm ./scene.0333.ppm ./scene.0334.ppm ./scene.0335.ppm ./scene.0336.ppm ./scene.0337.ppm ./scene.0338.ppm ./scene.0339.ppm ./scene.0340.ppm ./scene.0341.ppm ./scene.0342.ppm ./scene.0343.ppm ./scene.0344.ppm ./scene.0345.ppm ./scene.0346.ppm ./scene.0347.ppm ./scen
e.0348.ppm ./scene.0349.ppm ./scene.0350.ppm ./scene.0351.ppm ./scene.0352.ppm ./scene.0353.ppm ./scene.0354.ppm ./scene.0355.ppm ./scene.0356.ppm ./scene.0357.ppm ./scene.0358.ppm ./scene.0359.ppm ./scene.0360.ppm ./scene.0361.ppm ./scene.0362.ppm ./scene.0363.ppm ./scene.0364.ppm ./scene.0365.ppm ./scene.0366.ppm ./scene.0367.ppm ./scene.0368.ppm ./scene.0369.ppm ./scene.0370.ppm ./scene.0371.ppm ./scene.0372.ppm ./scene.0373.ppm ./scene.0374.ppm ./scene.0375.ppm ./scene.0376.ppm ./scene.0377.ppm ./scene.0378.ppm ./scene.0379.ppm ./scene.0380.ppm ./scene.0381.ppm ./scene.0382.ppm ./scene.0383.ppm ./scene.0384.ppm ./scene.0385.ppm ./scene.0386.ppm ./scene.0387.ppm ./scene.0388.ppm ./scene.0389.ppm ./scene.0390.ppm ./scene.0391.ppm ./scene.0392.ppm ./scene.0393.ppm ./scene.0394.ppm ./scene.0395.ppm ./scene.0396.ppm ./scene.0397.ppm ./scene.0398.ppm ./scene.0399.ppm ./scene.0400.ppm ./scene.0401.ppm ./scene.0402.ppm ./scene.0403.ppm ./scene.0404.ppm ./scene.0405.ppm ./scene.0
406.ppm ./scene.0407.ppm ./scene.0408.ppm ./scene.0409.ppm ./scene.0410.ppm ./scene.0411.ppm ./scene.0412.ppm ./scene.0413.ppm ./scene.0414.ppm ./scene.0415.ppm ./scene.0416.ppm ./scene.0417.ppm ./scene.0418.ppm ./scene.0419.ppm ./scene.0420.ppm ./scene.0421.ppm ./scene.0422.ppm ./scene.0423.ppm ./scene.0424.ppm ./scene.0425.ppm ./scene.0426.ppm ./scene.0427.ppm ./scene.0428.ppm ./scene.0429.ppm ./scene.0430.ppm ./scene.0431.ppm ./scene.0432.ppm ./scene.0433.ppm ./scene.0434.ppm ./scene.0435.ppm ./scene.0436.ppm ./scene.0437.ppm ./scene.0438.ppm ./scene.0439.ppm ./scene.0440.ppm ./scene.0441.ppm ./scene.0442.ppm ./scene.0443.ppm ./scene.0444.ppm ./scene.0445.ppm ./scene.0446.ppm ./scene.0447.ppm ./scene.0448.ppm ./scene.0449.ppm ./scene.0450.ppm ./scene.0451.ppm ./scene.0452.ppm ./scene.0453.ppm ./scene.0454.ppm ./scene.0455.ppm ./scene.0456.ppm ./scene.0457.ppm ./scene.0458.ppm ./scene.0459.ppm ./scene.0460.ppm ./scene.0461.ppm ./scene.0462.ppm ./scene.0463.ppm ./scene.0464
.ppm ./scene.0465.ppm ./scene.0466.ppm ./scene.0467.ppm ./scene.0468.ppm ./scene.0469.ppm ./scene.0470.ppm ./scene.0471.ppm ./scene.0472.ppm ./scene.0473.ppm ./scene.0474.ppm ./scene.0475.ppm ./scene.0476.ppm ./scene.0477.ppm ./scene.0478.ppm ./scene.0479.ppm ./scene.0480.ppm ./scene.0481.ppm ./scene.0482.ppm ./scene.0483.ppm ./scene.0484.ppm ./scene.0485.ppm ./scene.0486.ppm ./scene.0487.ppm ./scene.0488.ppm ./scene.0489.ppm ./scene.0490.ppm ./scene.0491.ppm ./scene.0492.ppm ./scene.0493.ppm ./scene.0494.ppm ./scene.0495.ppm ./scene.0496.ppm ./scene.0497.ppm ./scene.0498.ppm ./scene.0499.ppm ./scene.0500.ppm ./scene.0501.ppm ./scene.0502.ppm ./scene.0503.ppm ./scene.0504.ppm ./scene.0505.ppm ./scene.0506.ppm ./scene.0507.ppm ./scene.0508.ppm ./scene.0509.ppm ./scene.0510.ppm ./scene.0511.ppm ./scene.0512.ppm ./scene.0513.ppm ./scene.0514.ppm ./scene.0515.ppm ./scene.0516.ppm ./scene.0517.ppm ./scene.0518.ppm ./scene.0519.ppm ./scene.0520.ppm ./scene.0521.ppm ./scene.0522.pp
m ./scene.0523.ppm ./scene.0524.ppm ./scene.0525.ppm ./scene.0526.ppm ./scene.0527.ppm ./scene.0528.ppm ./scene.0529.ppm ./scene.0530.ppm ./scene.0531.ppm ./scene.0532.ppm ./scene.0533.ppm ./scene.0534.ppm ./scene.0535.ppm ./scene.0536.ppm ./scene.0537.ppm ./scene.0538.ppm ./scene.0539.ppm ./scene.0540.ppm ./scene.0541.ppm ./scene.0542.ppm ./scene.0543.ppm ./scene.0544.ppm ./scene.0545.ppm ./scene.0546.ppm ./scene.0547.ppm ./scene.0548.ppm ./scene.0549.ppm ./scene.0550.ppm ./scene.0551.ppm ./scene.0552.ppm ./scene.0553.ppm ./scene.0554.ppm ./scene.0555.ppm ./scene.0556.ppm ./scene.0557.ppm ./scene.0558.ppm ./scene.0559.ppm ./scene.0560.ppm ./scene.0561.ppm ./scene.0562.ppm ./scene.0563.ppm ./scene.0564.ppm ./scene.0565.ppm ./scene.0566.ppm ./scene.0567.ppm ./scene.0568.ppm ./scene.0569.ppm ./scene.0570.ppm ./scene.0571.ppm ./scene.0572.ppm ./scene.0573.ppm ./scene.0574.ppm ./scene.0575.ppm ./scene.0576.ppm ./scene.0577.ppm ./scene.0578.ppm ./scene.0579.ppm ./scene.0580.ppm .
/scene.0581.ppm ./scene.0582.ppm ./scene.0583.ppm ./scene.0584.ppm ./scene.0585.ppm ./scene.0586.ppm ./scene.0587.ppm ./scene.0588.ppm ./scene.0589.ppm ./scene.0590.ppm ./scene.0591.ppm ./scene.0592.ppm ./scene.0593.ppm ./scene.0594.ppm ./scene.0595.ppm ./scene.0596.ppm ./scene.0597.ppm ./scene.0598.ppm ./scene.0599.ppm ./scene.0600.ppm ./scene.0601.ppm ./scene.0602.ppm ./scene.0603.ppm ./scene.0604.ppm ./scene.0605.ppm ./scene.0606.ppm ./scene.0607.ppm ./scene.0608.ppm ./scene.0609.ppm ./scene.0610.ppm ./scene.0611.ppm ./scene.0612.ppm ./scene.0613.ppm ./scene.0614.ppm ./scene.0615.ppm ./scene.0616.ppm ./scene.0617.ppm ./scene.0618.ppm ./scene.0619.ppm ./scene.0620.ppm ./scene.0621.ppm ./scene.0622.ppm ./scene.0623.ppm ./scene.0624.ppm ./scene.0625.ppm ./scene.0626.ppm ./scene.0627.ppm ./scene.0628.ppm ./scene.0629.ppm ./scene.0630.ppm ./scene.0631.ppm ./scene.0632.ppm ./scene.0633.ppm ./scene.0634.ppm ./scene.0635.ppm ./scene.0636.ppm ./scene.0637.ppm ./scene.0638.ppm ./sc
ene.0639.ppm ./scene.0640.ppm ./scene.0641.ppm ./scene.0642.ppm ./scene.0643.ppm ./scene.0644.ppm ./scene.0645.ppm ./scene.0646.ppm ./scene.0647.ppm ./scene.0648.ppm ./scene.0649.ppm ./scene.0650.ppm ./scene.0651.ppm ./scene.0652.ppm ./scene.0653.ppm ./scene.0654.ppm ./scene.0655.ppm ./scene.0656.ppm ./scene.0657.ppm ./scene.0658.ppm ./scene.0659.ppm ./scene.0660.ppm ./scene.0661.ppm ./scene.0662.ppm ./scene.0663.ppm ./scene.0664.ppm ./scene.0665.ppm ./scene.0666.ppm ./scene.0667.ppm ./scene.0668.ppm ./scene.0669.ppm ./scene.0670.ppm ./scene.0671.ppm ./scene.0672.ppm ./scene.0673.ppm ./scene.0674.ppm ./scene.0675.ppm ./scene.0676.ppm ./scene.0677.ppm ./scene.0678.ppm ./scene.0679.ppm ./scene.0680.ppm ./scene.0681.ppm ./scene.0682.ppm ./scene.0683.ppm ./scene.0684.ppm ./scene.0685.ppm ./scene.0686.ppm ./scene.0687.ppm ./scene.0688.ppm ./scene.0689.ppm ./scene.0690.ppm ./scene.0691.ppm ./scene.0692.ppm ./scene.0693.ppm ./scene.0694.ppm ./scene.0695.ppm ./scene.0696.ppm ./scene
.0697.ppm ./scene.0698.ppm ./scene.0699.ppm ./scene.0700.ppm ./scene.0701.ppm ./scene.0702.ppm ./scene.0703.ppm ./scene.0704.ppm ./scene.0705.ppm ./scene.0706.ppm ./scene.0707.ppm ./scene.0708.ppm ./scene.0709.ppm ./scene.0710.ppm ./scene.0711.ppm ./scene.0712.ppm ./scene.0713.ppm ./scene.0714.ppm ./scene.0715.ppm ./scene.0716.ppm ./scene.0717.ppm ./scene.0718.ppm ./scene.0719.ppm ./scene.0720.ppm ./scene.0721.ppm ./scene.0722.ppm ./scene.0723.ppm ./scene.0724.ppm ./scene.0725.ppm ./scene.0726.ppm ./scene.0727.ppm ./scene.0728.ppm ./scene.0729.ppm ./scene.0730.ppm ./scene.0731.ppm ./scene.0732.ppm ./scene.0733.ppm ./scene.0734.ppm ./scene.0735.ppm ./scene.0736.ppm ./scene.0737.ppm ./scene.0738.ppm ./scene.0739.ppm ./scene.0740.ppm ./scene.0741.ppm ./scene.0742.ppm ./scene.0743.ppm ./scene.0744.ppm ./scene.0745.ppm ./scene.0746.ppm ./scene.0747.ppm ./scene.0748.ppm ./scene.0749.ppm ./scene.0750.ppm ./scene.0751.ppm ./scene.0752.ppm ./scene.0753.ppm ./scene.0754.ppm ./scene.07
55.ppm ./scene.0756.ppm ./scene.0757.ppm ./scene.0758.ppm ./scene.0759.ppm ./scene.0760.ppm ./scene.0761.ppm ./scene.0762.ppm ./scene.0763.ppm ./scene.0764.ppm ./scene.0765.ppm ./scene.0766.ppm ./scene.0767.ppm ./scene.0768.ppm ./scene.0769.ppm ./scene.0770.ppm ./scene.0771.ppm ./scene.0772.ppm ./scene.0773.ppm ./scene.0774.ppm ./scene.0775.ppm ./scene.0776.ppm ./scene.0777.ppm ./scene.0778.ppm ./scene.0779.ppm ./scene.0780.ppm ./scene.0781.ppm ./scene.0782.ppm ./scene.0783.ppm ./scene.0784.ppm ./scene.0785.ppm ./scene.0786.ppm ./scene.0787.ppm ./scene.0788.ppm ./scene.0789.ppm ./scene.0790.ppm ./scene.0791.ppm ./scene.0792.ppm ./scene.0793.ppm ./scene.0794.ppm ./scene.0795.ppm ./scene.0796.ppm ./scene.0797.ppm ./scene.0798.ppm ./scene.0799.ppm ./scene.0800.ppm ./scene.0801.ppm ./scene.0802.ppm ./scene.0803.ppm ./scene.0804.ppm ./scene.0805.ppm ./scene.0806.ppm ./scene.0807.ppm ./scene.0808.ppm ./scene.0809.ppm ./scene.0810.ppm ./scene.0811.ppm ./scene.0812.ppm ./scene.0813.
ppm ./scene.0814.ppm ./scene.0815.ppm ./scene.0816.ppm ./scene.0817.ppm ./scene.0818.ppm ./scene.0819.ppm ./scene.0820.ppm ./scene.0821.ppm ./scene.0822.ppm ./scene.0823.ppm ./scene.0824.ppm ./scene.0825.ppm ./scene.0826.ppm ./scene.0827.ppm ./scene.0828.ppm ./scene.0829.ppm ./scene.0830.ppm ./scene.0831.ppm ./scene.0832.ppm ./scene.0833.ppm ./scene.0834.ppm ./scene.0835.ppm ./scene.0836.ppm ./scene.0837.ppm ./scene.0838.ppm ./scene.0839.ppm ./scene.0840.ppm ./scene.0841.ppm ./scene.0842.ppm ./scene.0843.ppm ./scene.0844.ppm ./scene.0845.ppm ./scene.0846.ppm ./scene.0847.ppm ./scene.0848.ppm ./scene.0849.ppm ./scene.0850.ppm ./scene.0851.ppm ./scene.0852.ppm ./scene.0853.ppm ./scene.0854.ppm ./scene.0855.ppm ./scene.0856.ppm ./scene.0857.ppm ./scene.0858.ppm ./scene.0859.ppm ./scene.0860.ppm ./scene.0861.ppm ./scene.0862.ppm ./scene.0863.ppm ./scene.0864.ppm ./scene.0865.ppm ./scene.0866.ppm ./scene.0867.ppm ./scene.0868.ppm ./scene.0869.ppm ./scene.0870.ppm ./scene.0871.ppm
./scene.0872.ppm ./scene.0873.ppm ./scene.0874.ppm ./scene.0875.ppm ./scene.0876.ppm ./scene.0877.ppm ./scene.0878.ppm ./scene.0879.ppm ./scene.0880.ppm ./scene.0881.ppm ./scene.0882.ppm ./scene.0883.ppm ./scene.0884.ppm ./scene.0885.ppm ./scene.0886.ppm ./scene.0887.ppm ./scene.0888.ppm ./scene.0889.ppm ./scene.0890.ppm ./scene.0891.ppm ./scene.0892.ppm ./scene.0893.ppm ./scene.0894.ppm ./scene.0895.ppm ./scene.0896.ppm ./scene.0897.ppm ./scene.0898.ppm ./scene.0899.ppm ./scene.0900.ppm ./scene.0901.ppm ./scene.0902.ppm ./scene.0903.ppm ./scene.0904.ppm ./scene.0905.ppm ./scene.0906.ppm ./scene.0907.ppm ./scene.0908.ppm ./scene.0909.ppm ./scene.0910.ppm ./scene.0911.ppm ./scene.0912.ppm ./scene.0913.ppm ./scene.0914.ppm ./scene.0915.ppm ./scene.0916.ppm ./scene.0917.ppm ./scene.0918.ppm ./scene.0919.ppm ./scene.0920.ppm ./scene.0921.ppm ./scene.0922.ppm ./scene.0923.ppm ./scene.0924.ppm ./scene.0925.ppm ./scene.0926.ppm ./scene.0927.ppm ./scene.0928.ppm ./scene.0929.ppm ./
scene.0930.ppm ./scene.0931.ppm ./scene.0932.ppm ./scene.0933.ppm ./scene.0934.ppm ./scene.0935.ppm ./scene.0936.ppm ./scene.0937.ppm ./scene.0938.ppm ./scene.0939.ppm ./scene.0940.ppm ./scene.0941.ppm ./scene.0942.ppm ./scene.0943.ppm ./scene.0944.ppm ./scene.0945.ppm ./scene.0946.ppm ./scene.0947.ppm ./scene.0948.ppm ./scene.0949.ppm ./scene.0950.ppm ./scene.0951.ppm ./scene.0952.ppm ./scene.0953.ppm ./scene.0954.ppm ./scene.0955.ppm ./scene.0956.ppm ./scene.0957.ppm ./scene.0958.ppm ./scene.0959.ppm ./scene.0960.ppm ./scene.0961.ppm ./scene.0962.ppm ./scene.0963.ppm ./scene.0964.ppm ./scene.0965.ppm ./scene.0966.ppm ./scene.0967.ppm ./scene.0968.ppm ./scene.0969.ppm ./scene.0970.ppm ./scene.0971.ppm ./scene.0972.ppm ./scene.0973.ppm ./scene.0974.ppm ./scene.0975.ppm ./scene.0976.ppm ./scene.0977.ppm ./scene.0978.ppm ./scene.0979.ppm ./scene.0980.ppm ./scene.0981.ppm ./scene.0982.ppm ./scene.0983.ppm ./scene.0984.ppm ./scene.0985.ppm ./scene.0986.ppm ./scene.0987.ppm ./sce
ne.0988.ppm ./scene.0989.ppm ./scene.0990.ppm ./scene.0991.ppm ./scene.0992.ppm ./scene.0993.ppm ./scene.0994.ppm ./scene.0995.ppm ./scene.0996.ppm ./scene.0997.ppm ./scene.0998.ppm ./scene.0999.ppm ./scene.1000.ppm output.gif
Added: SwiftApps/raytrace/c-ray/genscenes.sh
===================================================================
--- SwiftApps/raytrace/c-ray/genscenes.sh (rev 0)
+++ SwiftApps/raytrace/c-ray/genscenes.sh 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,10 @@
+step=$1
+steps=$2
+z=-2.0
+
+templ=$3
+sed -e "s/\@/$z/" $templ > scene.0.data
+
+incr=$(echo "scale=4; 4.0/$steps" | bc)
+z=$(echo "scale=4; $z+$incr*$step" | bc)
+sed -e "s/\@/$z/" $templ
Property changes on: SwiftApps/raytrace/c-ray/genscenes.sh
___________________________________________________________________
Added: svn:executable
+ *
Added: SwiftApps/raytrace/c-ray/local.xml
===================================================================
--- SwiftApps/raytrace/c-ray/local.xml (rev 0)
+++ SwiftApps/raytrace/c-ray/local.xml 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,8 @@
+<config>
+<pool handle="localhost">
+ <filesystem provider="local" />
+ <execution provider="local" />
+ <workdirectory>/tmp/swift.work</workdirectory>
+ <profile namespace="karajan" key="jobThrottle">0.03</profile>
+</pool>
+</config>
Added: SwiftApps/raytrace/c-ray/pool.txt
===================================================================
--- SwiftApps/raytrace/c-ray/pool.txt (rev 0)
+++ SwiftApps/raytrace/c-ray/pool.txt 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,4 @@
+23.20.13.93
+23.20.102.14
+54.226.151.7
+54.205.124.100
Added: SwiftApps/raytrace/c-ray/sites-cipher.xml
===================================================================
--- SwiftApps/raytrace/c-ray/sites-cipher.xml (rev 0)
+++ SwiftApps/raytrace/c-ray/sites-cipher.xml 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,143 @@
+<config>
+
+<!-- sites.xml specifies details of the sites that Swift can run on.
+
+The first entry entry, for localhost, should work on most linux-like systems
+without any change.
+
+It may be necessary to change the two occurences of /var/tmp to a different
+working directory.
+
+The jobThrottle profile is set to 0 so that Swift will not try to run more
+than two jobs at once (the minimum) when using the local sites. This is
+appropriate for local execution, but make sure if/when using another
+execution mechanism to submit to an HPC resource that this jobThrottle
+is removed.
+
+-->
+
+
+ <pool handle="localhost">
+ <filesystem provider="local" />
+ <execution provider="local" />
+ <workdirectory >/var/tmp</workdirectory>
+ <profile namespace="karajan" key="jobThrottle">0.03</profile>
+ </pool>
+
+
+
+
+
+<!-- The remainder of this file is commented out by default. It contains
+example site definitions for a number of sites on TeraGrid and OSG.
+
+How this list was constructed:
+
+1. Teragrid
+http://www.teragrid.org/userinfo/hardware/resources.php
+fill out the gatekeeper info and the gridftp hostname
+for the storage/workspace, login into the machine, and make yourself a
+temporary directory
+
+2. OSG
+http://osg-cat.grid.iu.edu/index.php?site_name=osgcat
+sort by CPUs
+Add the gatekeeper hostname into the jobmanager name and into the gridftp url
+Add the ($TMP) or ($WNTMP) to the storage element in the gridftp url AND
+into the workspace element
+
+TODO by user:
+customize the storage and workdirectory to use your personal working directories
+
+-->
+
+
+<!--
+ <pool handle="skynet" >
+ <gridftp url="gsiftp://skynet-login.isi.edu" >
+ </gridftp>
+ <jobmanager universe="vanilla" url="skynet-login.isi.edu/jobmanager-fork" major="2" />
+ <workdirectory >/nfs/scratch01/tiberius</workdirectory>
+ </pool>
+-->
+<!--
+ <pool handle="teraport" >
+ <gridftp url="gsiftp://tp-grid1.uchicago.edu" />
+ <jobmanager universe="vanilla" url="tp-grid1.uchicago.edu/jobmanager-pbs" major="2" />
+ <workdirectory >/home/tiberius/scratch/SWIFT-WORK</workdirectory>
+ </pool>
+-->
+<!--
+<pool handle="ncsa_32" >
+ <gridftp url="gsiftp://login-w.ncsa.teragrid.org" />
+ <jobmanager universe="vanilla" url="grid-w.ncsa.teragrid.org/jobmanager" major="2" />
+ <workdirectory >/u/ac/tstef</workdirectory>
+</pool>
+-->
+<!--
+<pool handle="purdue" >
+ <gridftp url="gsiftp://tg-data.purdue.teragrid.org" />
+ <jobmanager universe="vanilla" url="tg-gatekeeper.purdue.teragrid.org" major="2" />
+ <workdirectory >/scratch/teragrid/stef</workdirectory>
+</pool>
+-->
+<!--
+<pool handle="tacc" >
+ <gridftp url="gsiftp://tg-gridftp.lonestar.tacc.teragrid.org" />
+ <jobmanager universe="vanilla" url="tg-login.tacc.teragrid.org/jobmanager-lsf" major="2" />
+ <workdirectory >/work/teragrid/tstef</workdirectory>
+</pool>
+-->
+<!--
+<pool handle="UC" >
+ <gridftp url="gsiftp://tg-gridftp.uc.teragrid.org" />
+ <execution provider="gt4" jobmanager="PBS" url="tg-grid.uc.teragrid.org" />
+ <workdirectory >/disks/scratchgpfs1/tstef</workdirectory>
+</pool>
+ -->
+
+<!-- OSG SITES -->
+<!--
+<pool handle="OSG_LIGO_PSU" >
+ <gridftp url="gsiftp://grid3.aset.psu.edu" />
+ <jobmanager universe="vanilla" url="grid3.aset.psu.edu/jobmanager-pbs" major="2" />
+ <workdirectory >/usr1/grid3/data</workdirectory>
+</pool>
+ -->
+<!--
+<pool handle="fnal" >
+ <gridftp url="gsiftp://fngp-osg.fnal.gov" />
+ <jobmanager universe="vanilla" url="fngp-osg.fnal.gov/jobmanager-pbs" major="2" minor="2" />
+ <workdirectory >/grid/data</workdirectory>
+</pool>
+-->
+<!--
+<pool handle="prod_slac" >
+ <gridftp url="gsiftp://osgserv01.slac.stanford.edu" />
+ <jobmanager universe="vanilla" url="osgserv01.slac.stanford.edu/jobmanager-lsf" major="2" />
+ <workdirectory >/nfs/slac/g/grid/osg/data</workdirectory>
+</pool>
+-->
+<!--
+<pool handle="bnl_atlas_2" >
+ <gridftp url="gsiftp://gridgk02.racf.bnl.gov" />
+ <jobmanager universe="vanilla" url="gridgk02.racf.bnl.gov/jobmanager-condor" major="2" />
+ <workdirectory >/usatlas/prodjob/share/</workdirectory>
+</pool>
+-->
+<!--
+<pool handle="unm_hpc" >
+ <gridftp url="gsiftp://milta.alliance.unm.edu" />
+ <jobmanager universe="vanilla" url="milta.alliance.unm.edu/jobmanager-pbs" major="2" />
+ <workdirectory >/tmp</workdirectory>
+</pool>
+-->
+<!--
+<pool handle="UWM_CMS" >
+ <gridftp url="gsiftp://cmsgrid02.hep.wisc.edu" />
+ <jobmanager universe="vanilla" url="cmsgrid02.hep.wisc.edu/jobmanager-condor" major="2" />
+ <workdirectory >/tmp</workdirectory>
+</pool>
+-->
+
+</config>
Added: SwiftApps/raytrace/c-ray/sites.beagle.xml
===================================================================
--- SwiftApps/raytrace/c-ray/sites.beagle.xml (rev 0)
+++ SwiftApps/raytrace/c-ray/sites.beagle.xml 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,23 @@
+<config>
+ <pool handle="beagle">
+ <execution provider="coaster" jobmanager="local:pbs"/>
+ <!-- replace with your project -->
+ <profile namespace="globus" key="project">CI-CCR000013</profile>
+
+ <profile namespace="globus" key="providerAttributes">
+ pbs.aprun;pbs.mpp;depth=24</profile>
+
+ <profile namespace="globus" key="jobsPerNode">24</profile>
+ <profile namespace="globus" key="maxTime">6000</profile>
+ <profile namespace="globus" key="slots">2</profile>
+ <profile namespace="globus" key="nodeGranularity">1</profile>
+ <profile namespace="globus" key="maxNodes">1</profile>
+
+ <profile namespace="karajan" key="jobThrottle">.63</profile>
+ <profile namespace="karajan" key="initialScore">10000</profile>
+
+ <filesystem provider="local"/>
+ <!-- replace this with your home on lustre -->
+ <workdirectory >/lustre/beagle/ketan/swift.workdir</workdirectory>
+ </pool>
+</config>
Property changes on: SwiftApps/raytrace/c-ray/sites.beagle.xml
___________________________________________________________________
Added: svn:executable
+ *
Added: SwiftApps/raytrace/c-ray/sites.midway.xml
===================================================================
--- SwiftApps/raytrace/c-ray/sites.midway.xml (rev 0)
+++ SwiftApps/raytrace/c-ray/sites.midway.xml 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config xmlns="http://www.ci.uchicago.edu/swift/SwiftSites">
+ <pool handle="midway">
+ <!--<execution provider="coaster" jobmanager="ssh-cl:slurm" url="swift.rcc.uchicago.edu"/>-->
+ <execution provider="coaster" jobmanager="local:slurm"/>
+ <profile namespace="globus" key="queue">sandyb</profile>
+ <profile namespace="globus" key="jobsPerNode">16</profile>
+ <profile namespace="globus" key="maxWalltime">01:00:00</profile>
+ <profile namespace="globus" key="maxTime">8000</profile>
+ <profile namespace="globus" key="highOverAllocation">100</profile>
+ <profile namespace="globus" key="lowOverAllocation">100</profile>
+ <profile namespace="globus" key="slots">1</profile>
+ <profile namespace="globus" key="maxNodes">1</profile>
+ <profile namespace="globus" key="nodeGranularity">1</profile>
+ <profile namespace="karajan" key="jobThrottle">2.0</profile>
+ <profile namespace="karajan" key="initialScore">10000</profile>
+ <workdirectory>/tmp/{env.USER}/swift.workdir</workdirectory>
+ </pool>
+</config>
Added: SwiftApps/raytrace/c-ray/sites.xml
===================================================================
--- SwiftApps/raytrace/c-ray/sites.xml (rev 0)
+++ SwiftApps/raytrace/c-ray/sites.xml 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,13 @@
+<config>
+ <pool handle="persistent-coasters">
+ <execution provider="coaster-persistent"
+ url="http://localhost:50200"
+ jobmanager="local:local"/>
+ <profile namespace="globus" key="workerManager">passive</profile>
+ <profile namespace="globus" key="jobsPerNode">8</profile>
+ <profile key="jobThrottle" namespace="karajan">.31999</profile>
+ <profile namespace="karajan" key="initialScore">10000</profile>
+ <filesystem provider="local" url="none" />
+ <workdirectory>/tmp/ketan</workdirectory>
+ </pool>
+</config>
Added: SwiftApps/raytrace/c-ray/tc
===================================================================
--- SwiftApps/raytrace/c-ray/tc (rev 0)
+++ SwiftApps/raytrace/c-ray/tc 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,12 @@
+localhost convert convert
+localhost cray c-ray-mt
+localhost genscenes genscenes.sh
+persistent-coasters convert convert
+persistent-coasters cray c-ray-mt
+persistent-coasters genscenes genscenes.sh
+midway convert convert
+midway cray c-ray-mt
+midway genscenes genscenes.sh
+beagle convert convert
+beagle cray c-ray-mt
+beagle genscenes genscenes.sh
Added: SwiftApps/raytrace/c-ray/tscene
===================================================================
--- SwiftApps/raytrace/c-ray/tscene (rev 0)
+++ SwiftApps/raytrace/c-ray/tscene 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,192 @@
+s 0 0 0 1.0 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 @ 0.4 0.25 0.25 0.25 50.0 0.65
+s 1.96 0 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 2.184 0 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.96 0.224 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.96 -0.224 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.96 0 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.96 0 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.56 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 1.624 0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.176 0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.784 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.56 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.56 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.56 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 1.624 -0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.176 -0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.784 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.56 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.56 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 1.624 0 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.176 0 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.224 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.224 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 -0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 1.624 0 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.176 0 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.224 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.224 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 -0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 0 0.4 0.25 0.25 0.25 50.0 0.65
+s -1.96 0 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -2.184 0 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.96 0.224 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.96 -0.224 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.96 0 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.96 0 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.56 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -1.176 0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.624 0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.784 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.56 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.56 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.56 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -1.176 -0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.624 -0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.784 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.56 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.56 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s -1.176 0 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.624 0 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.224 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.224 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 -0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s -1.176 0 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.624 0 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.224 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.224 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 -0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 0 0.4 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.4 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.784 1.4 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.624 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.176 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.4 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.4 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.4 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -0.784 1.4 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.624 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.176 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.4 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.4 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.96 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 1.96 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 1.96 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 2.184 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.96 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.96 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 1.4 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 1.4 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.624 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.176 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 -0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 1.4 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 1.4 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.624 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.176 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 -0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 0 0.4 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.4 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.784 -1.4 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.176 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.624 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.4 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.4 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.4 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -0.784 -1.4 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.176 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.624 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.4 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.4 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.96 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -1.96 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -1.96 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -2.184 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.96 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.96 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -1.4 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -1.4 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.176 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.624 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 -0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -1.4 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -1.4 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.176 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.624 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 -0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 1.4 0.4 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.784 0 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0.224 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -0.224 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s -0.784 0 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0.224 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -0.224 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 0.56 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 0.56 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.784 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -0.56 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -0.56 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.784 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 1.96 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 0 1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 0 1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.224 1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.224 1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 2.184 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 -1.4 0.4 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 -1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.784 0 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0.224 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -0.224 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 -1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 -1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 -1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s -0.784 0 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0.224 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -0.224 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 -1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 -1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 -1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 0.56 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 0.56 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.784 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 -1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 -1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 -1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -0.56 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -0.56 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.784 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 -1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 -1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 -1.96 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 0 -1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 0 -1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.224 -1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.224 -1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 -2.184 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -10002.25 0 10000 0.2 0.35 0.5 80.0 0.4
+s 0 10100.00 0 10000 0.5 0.2 0.1 40.0 0.0
+l -50 68 -50
+l 40 40 150
+c -7 6 -12 45 0 -0.65 0
Added: SwiftApps/raytrace/c-ray/tscene.original
===================================================================
--- SwiftApps/raytrace/c-ray/tscene.original (rev 0)
+++ SwiftApps/raytrace/c-ray/tscene.original 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,192 @@
+s 0 0 0 1.0 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 0 0.4 0.25 0.25 0.25 50.0 0.65
+s 1.96 0 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 2.184 0 @ 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.96 0.224 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.96 -0.224 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.96 0 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.96 0 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.56 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 1.624 0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.176 0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.784 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.56 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.56 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.56 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 1.624 -0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.176 -0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.784 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.56 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.56 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 1.624 0 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.176 0 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.224 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.224 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 -0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 1.624 0 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.176 0 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.224 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.224 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 -0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 0 0.4 0.25 0.25 0.25 50.0 0.65
+s -1.96 0 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -2.184 0 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.96 0.224 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.96 -0.224 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.96 0 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.96 0 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.56 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -1.176 0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.624 0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.784 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.56 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.56 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.56 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -1.176 -0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.624 -0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.784 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.56 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.56 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s -1.176 0 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.624 0 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.224 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.224 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 -0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s -1.176 0 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.624 0 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.224 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.224 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 -0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 0 0.4 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.4 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.784 1.4 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.624 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.176 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.4 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.4 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.4 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -0.784 1.4 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.624 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.176 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.4 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.4 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.96 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 1.96 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 1.96 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 2.184 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.96 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.96 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 1.4 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 1.4 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.624 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.176 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 -0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 1.4 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 1.4 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.624 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.176 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 -0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 0 0.4 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.4 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.784 -1.4 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.176 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.624 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.4 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.4 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.4 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -0.784 -1.4 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.176 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.624 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.4 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.4 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.96 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -1.96 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -1.96 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -2.184 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.96 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.96 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -1.4 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -1.4 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.176 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.624 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 -0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -1.4 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -1.4 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.176 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.624 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 -0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 1.4 0.4 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.784 0 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0.224 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -0.224 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s -0.784 0 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0.224 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -0.224 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 0.56 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 0.56 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.784 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -0.56 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -0.56 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.784 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 1.96 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 0 1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 0 1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.224 1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.224 1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 2.184 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 -1.4 0.4 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 -1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.784 0 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0.224 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -0.224 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 -1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 -1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 -1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s -0.784 0 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0.224 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -0.224 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 -1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 -1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 -1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 0.56 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 0.56 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.784 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 -1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 -1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 -1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -0.56 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -0.56 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.784 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 -1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 -1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 -1.96 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 0 -1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 0 -1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.224 -1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.224 -1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 -2.184 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -10002.25 0 10000 0.2 0.35 0.5 80.0 0.4
+s 0 10100.00 0 10000 0.5 0.2 0.1 40.0 0.0
+l -50 68 -50
+l 40 40 150
+c -7 6 -12 45 0 -0.65 0
Added: SwiftApps/raytrace/c-ray-1.1/Makefile
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/Makefile (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/Makefile 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,20 @@
+obj = c-ray-mt.o
+bin = c-ray-mt
+
+CC = gcc
+CFLAGS = -O3 -ffast-math
+
+$(bin): $(obj)
+ $(CC) -o $@ $(obj) -lm -lpthread
+
+.PHONY: clean
+clean:
+ rm -f $(obj) $(bin)
+
+.PHONY: install
+install:
+ cp $(bin) /usr/local/bin/$(bin)
+
+.PHONY: uninstall
+uninstall:
+ rm -f /usr/local/bin/$(bin)
Added: SwiftApps/raytrace/c-ray-1.1/Makefile.gcc
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/Makefile.gcc (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/Makefile.gcc 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,20 @@
+obj = c-ray-mt.o
+bin = c-ray-mt
+
+CC = gcc
+CFLAGS = -O3 -ffast-math
+
+$(bin): $(obj)
+ $(CC) -o $@ $(obj) -lm -lpthread
+
+.PHONY: clean
+clean:
+ rm -f $(obj) $(bin)
+
+.PHONY: install
+install:
+ cp $(bin) /usr/local/bin/$(bin)
+
+.PHONY: uninstall
+uninstall:
+ rm -f /usr/local/bin/$(bin)
Added: SwiftApps/raytrace/c-ray-1.1/Makefile.mips
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/Makefile.mips (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/Makefile.mips 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,20 @@
+obj = c-ray-mt.o
+bin = c-ray-mt
+
+CC = cc
+CFLAGS = -O3 -mips4 -IPA -LNO -TARG:platform=ip30 -Ofast=ip30
+
+$(bin): $(obj)
+ $(CC) -o $@ $(obj) -lm -lpthread
+
+.PHONY: clean
+clean:
+ rm -f $(obj) $(bin)
+
+.PHONY: install
+install:
+ cp $(bin) /usr/local/bin/$(bin)
+
+.PHONY: uninstall
+uninstall:
+ rm -f /usr/local/bin/$(bin)
Added: SwiftApps/raytrace/c-ray-1.1/README
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/README (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/README 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,395 @@
+
+ C-Ray Simple Raytracing Tests
+
+ http://www.futuretech.blinkenlights.nl/c-ray.html
+
+ By: John Tsiombikas <nuclear at siggraph.org>
+
+ Test suite compiled by: Ian Mapleson <mapesdhs at yahoo.com>
+
+ Last Change: 10/Apr/2008
+
+
+1. Introduction
+2. The C-Ray Tests (how to compile)
+3. Running the Tests
+4. Submitting Results
+5. Background
+6. Appendix A: Invalid Tests
+
+**********************************************************************
+
+1. Introduction
+
+C-Ray is a simple raytracer written by John Tsiombikas; in his
+own words, it is:
+
+ "...an extremely small program I did one day to figure out how
+ would the simplest raytracer program look like in the least
+ ammount of code lines."
+
+The relevant discussion on Nekochan is at:
+
+ http://forums.nekochan.net/viewtopic.php?f=3&t=15719
+
+The default data set is very small, so C-ray really only tests the pure
+floating-point (fp) speed of a CPU core (or multiple CPUs/cores using the
+threaded version), ie. RAM speed is not a significant factor. John said:
+
+ This thing only measures 'floating point CPU performance' and
+ nothing more, and it's good that nothing else affects the results.
+ A real rendering program/scene would be still CPU-limited meaning
+ that by far the major part of the time spent would be CPU time in
+ the fpu, but it would have more overhead for disk I/O, shader
+ parsing, more strain for the memory bandwidth, and various other
+ things. So it's a good approximation being a renderer itself, but
+ it's definitely not representative."
+
+Nevertheless, the results are certainly interesting:
+
+ http://www.futuretech.blinkenlights.nl/c-ray.html
+
+If you wish to submit your own results, follow the instructions given
+below. Send the data to me, not to John, and I will add them to the
+relevant tables; please include all requested details.
+
+Comments and feedback welcome!
+
+Ian.
+
+mapesdhs at yahoo.com
+sgidepot at blueyonder.co.uk
+http://www.futuretech.blinkenlights.nl/sgidepot/
+
+**********************************************************************
+
+2. The C-Ray Tests
+
+Two programs are included in this archive for testing:
+
+c-ray-f:
+
+ This is for single-CPU systems, or for testing just a single core
+ of a multi-core CPU.
+
+c-ray-mt:
+
+ This is the multithreaded version for testing multi-CPU systems, and/or
+ systems with more than one CPU core. Note that on some systems c-ray-mt
+ with just one thread may be faster than c-ray-f. Use whichever version
+ gives you the best results in each case. Use the -t option to specify
+ the number of threads; without the -t option, only 1 thread is used.
+
+Compile the source files for your target platform with gcc or whatever
+compiler you have. Just enter 'make', though feel free to add any arch-
+specific optimizations for your compiler in CFLAGS first. By default,
+the Makefile is designed for use with GCC. If you are using an SGI and
+want to use MIPS Pro to compile the programs, then enter:
+
+ /bin/cp Makefile.mips Makefile
+
+and then enter 'make'.
+
+Note that the c-ray binaries as supplied were compiled for an SGI
+Octane2 R12K/R14 system (users of other SGI models should recompile
+if possible), while the example x86 binary in the x86 directory was
+compiled by John for a 3GHz P4.
+
+If you don't want to use make, then typical compile lines for each
+program on SGIs using MIPS Pro are as follows (in this case for an
+Octane system - use a different IP number for other SGI systems):
+
+ cc -O3 -mips4 -TARG:platform=ip30 -Ofast=ip30 c-ray-f.c -o c-ray-f -lm
+
+while for the threaded version the pthread library must be included:
+
+ cc -O3 -mips4 -TARG:platform=ip30 -Ofast=ip30 c-ray-mt.c -o c-ray-mt -lm -lpthread
+
+See the 'cc' man page for full details of available optimisation options.
+
+The file 'sgi.txt' has further example compile lines for SGI O2 and
+Octane machines, some with extra example optimisation options. Try
+them out, see which one works best on your system. Those using GCC
+should consult the gcc man page for full details of available options.
+
+NOTE: results for tests done with pre-run profiling/virtualisation
+compiler optimisations will NOT be accepted! (see Appendix A for details).
+
+Before running the tests, naturally you should shut down any other
+applications, processes, etc. which might interfere with the test.
+For example, on SGI systems, I shut down the mediad and sgi_apache
+daemons:
+
+ /etc/init.d/mediad stop
+ /etc/init.d/sgi_apache stop
+
+Better still, turn off timed, nsd, and rlogin remotely to run the tests.
+It should be possible to do the same thing on a Linux/BSD system.
+
+On a Windows machine, shut down all unnecessary processes, close any
+antivirus/firewall applications/processes, and it may be worthwhile
+forcing any pending idle tasks to complete before running the tests,
+ie. select Run from the Start menu and enter:
+
+ Rundll32.exe advapi32.dll,ProcessIdleTasks
+
+Assuming you are now ready to use the binary programs for the tests...
+
+**********************************************************************
+
+3. Running the Tests
+
+There are two data files used for the tests:
+
+'scene' is a simple environment, with just three reflective spheres.
+Examine scene.jpg to see the final image.
+
+'sphract' is a much more complex scenario, with dozens of spheres in
+a fractal pattern (see gen_fract.txt for details of how the scene
+description was created). Examine sphract.jpg to see the final image.
+
+There are four tests; the first is the shortest, the data from which
+are used for the main table on the results page. The tests are:
+
+
+ Test Data File Image Resolution Oversampling
+
+ 1. scene Default 800x600 NONE
+ 2. sphract Default 800x600 NONE
+ 3. sphract 1024 x 768 8X
+ 4. scene 7500 x 3500 NONE
+
+If you are using a single-CPU system which only has one core, or wish
+to test just one CPU/core of a multi-CPU/core system, then run the
+tests with c-ray-f, or with c-ray-mt using just 1 thread. For systems
+with multiple CPUs/cores, please submit results for just a single
+CPU/core aswell as the fastest results for using all CPUs/cores (this
+allows one to see how well parallel systems scale).
+
+On UNIX systems, the programs receive the scene description data from
+the standard input and send the results (the image created) to the
+standard output. To run the first test on a UNIX system, enter:
+
+ cat scene | ./c-ray-f > foo.ppm
+
+On a Windows system, enter the following in a Command window:
+
+ c-ray-f -i scene -o foo.ppm
+
+The output will resemble the following (in this case run on a R14000
+550MHz SGI Octane2):
+
+ Rendering took: 1 seconds (1888 milliseconds)
+
+The result to submit is the number of milliseconds. Run each test
+several times if possible to observe a typical result. It's up to
+you whether you submit a typical result or the fastest overall result.
+
+If you have a multi-CPU/core system, now run the test multithreaded with
+c-ray-mt, using the -t option to specify the number of threads, eg.
+
+ UNIX: cat scene | ./c-ray-mt -t 32 > foo.ppm
+ Windows: c-ray-mt -t 32 -i scene -o foo.ppm
+
+For multi-CPU/core systems, the optimum number of threads varies
+greatly from one system to another, though a good estimate is 16
+times the number of cores. Try different numbers, eg. 32, 64, 128,
+or some inbetween number such as 40, 60, etc. But also try smaller
+number too, eg. just 8 threads for a quad-core system.
+
+The maximum number of threads c-ray-mt can use is the vertical
+resolution of the output image. As the number of threads increases,
+eventually the speedup obtained by the parallel processing will be
+outweighed by the overhead cost of managing the threads. Experiment
+to find what works best for each test.
+
+Thus, for the other tests, the commands to enter on a UNIX system
+would be as follows, using 32 threads just as an example here:
+
+ cat sphract | ./c-ray-f > foo.ppm
+ cat sphract | ./c-ray-mt -t 32 > foo.ppm
+ cat sphract | ./c-ray-f -s 1024x768 -r 8 > foo.ppm
+ cat sphract | ./c-ray-mt -t 32 -s 1024x768 -r 8 > foo.ppm
+ cat scene | ./c-ray-f -s 7500x3500 > foo.ppm
+ cat scene | ./c-ray-mt -t 32 -s 7500x3500 > foo.ppm
+
+while on a Windows system these would be:
+
+ c-ray-f -i sphract -o foo.ppm
+ c-ray-mt -t 32 -i sphract -o foo.ppm
+ c-ray-f -s 1024x768 -r 8 -i sphract -o foo.ppm
+ c-ray-mt -t 32 -s 1024x768 -r 8 -i sphract -o foo.ppm
+ c-ray-f -s 7500x3500 -i scene -o foo.ppm
+ c-ray-mt -t 32 -s 7500x3500 -i scene -o foo.ppm
+
+If you don't want to bother experimenting, then the script RUN.full
+will execute all the tests, with the c-ray-mt tests done using 32
+threads, but remember 32 threads might not be optimal for your system.
+
+**********************************************************************
+
+4. Submitting Results
+
+Do not send any results to John; instead, send all results to me at
+both of my email addresses (include "C-Ray" in the subject line):
+
+ mapesdhs at yahoo.com
+ sgidepot at blueyonder.co.uk
+
+Apart from the run-times reported by each test, please remember
+to state which tests are multithreaded and how many threads were
+used. Better still, just copy the on-screen text for each test.
+
+With respect to system information, state the type of system (name
+and/or model number), CPU details (name/model, type/speed/cache,
+no. of CPUs/cores), OS name/version (eg. for Linux, what name,
+kernel version/build), what compiler was used (name/version) and
+what extra options if any were employed. The online results page
+also shows the host name where available, but this is optional.
+
+Thus, for example, a system description might look like this:
+
+ SUN Fire X2100, Solaris 10, host name 'kobe'
+ Sun Studio 10 Compiler
+ AMD Opteron 175 2.2 GHz 1MB L2
+
+while for an SGI it might be:
+
+ SGI Octane2, IRIX 6.5.26m
+ MIPS Pro 7.4.3m (7.3 EOE)
+ Dual-R12000 400MHz (2MB L2)
+
+or a Windows system (in this case my own setup):
+
+ WinXP-32bit PC (SP2), Asrock AM2NF3 motherboard, 4GB DDR2/800 RAM
+ Athlon64 X2 6000+ 3.15GHz (overclocked)
+ Supplied x86 binary used (1 core only)
+
+You can also mention the system's RAM, disk, or anything else, but
+they're not essential.
+
+Note for SGI users: you can find out what eoe/dev compiler versions
+your system has installed by entering:
+
+ versions -b | grep compiler_
+
+eg. on my Octane2 this gives:
+
+ I compiler_dev 05/14/2004 Base Compiler Development Environment, 7.3
+ I compiler_eoe 07/13/2005 IRIX Standard Execution Environment (Base Compiler Headers and Libraries, 7.4.3m)
+
+**********************************************************************
+
+5. Background
+
+When I asked John about why he created C-Ray, he said:
+
+ This is just an extremely small program I did one day to figure
+ out how would the simplest raytracer program look like in the
+ least amount of code lines :) It's not useful for anything apart
+ from benchmarking.
+
+ As part of my BSc dissertation project I did a really big and
+ feature-full ray tracer, which could be useful, supporting:
+ programmable shading, network rendering, monte carlo rendering
+ algorithms, etc. But it's big and buggy, slow, and incomplete
+ because I was rushing to finish it the last minute before the
+ deadline (as always) :)
+
+ So I scrapped the damn thing after that, and I'm starting from
+ scratch with a new design if I finish it and it proves to be
+ sucessful I'll let you know :)"
+
+
+I also asked John why the best c-ray-mt results seem to be obtained
+with a number of threads that is much larger than the number of
+CPUs/cores in a system, to which he replied:
+
+ Ian wrote:
+ > I also suspect more threads means the balanced load between
+ > the two CPUs is less affected by the possible differences in
+ > complexity between threads.
+
+ Bingo, each thread takes a bunch of scanlines, if the relative
+ complexity of the rendering calculations between the bunches(sic)
+ is not equal, then one thread may spend much more time calculating
+ than another thread. Of course that doesn't necessarily mean that
+ one "CPU" ends up calculating much more than the other since the
+ threads are not "bound" to any CPU, each CPU takes one of the
+ available ready-to-run threads each timeslice. Anyway having more
+ threads evens it out. I would guess about 4 times as many threads
+ as the CPUs [multiplied by the no. of cores per CPU] would be enough.
+
+
+I also asked John if there was any element of overhead processing
+to handle the results of the multiple threads. He said:
+
+ There's no such overhead. Each thread gets a pointer to the
+ appropriate location of the framebuffer, and stores every pixel
+ as it is calculated directly. Also any processing afterwards
+ (output of the PPM image) is done *after* timing stops.
+
+
+See the Nekochan thread for more discussion about C-Ray, including
+further comments by John.
+
+**********************************************************************
+
+6. Appendix A: Invalid Tests
+
+Results for tests done with pre-run profiling/virtualisation compiler
+optimisations will NOT be accepted! What does this mean? Read on...
+
+Someone emailed me to say they had been able to halve the test run
+times by using the following compilation/execution sequence:
+
+ XC="gcc -O3 -ffast-math -fomit-frame-pointer c-ray-f.c
+ -finline-limit=10000 -ftree-vectorize -fwhole-program
+ -fbranch-probabilities -ffunction-sections -o c-ray-f -lm" && $XC
+ -fprofile-generate && ./run > /dev/null 2>&1 && $XC -fprofile-use
+ && ./run && ./run && ./run && ./run
+
+with ./run containing:
+
+ #!/bin/sh
+ cat scene | ./c-ray-f > foo2.ppm
+
+The explanation was as follows:
+
+ What this does is to create an executable with profiling and
+ virtualization instructions, execute it in order to create "real life"
+ information and then recompile it using that information to better
+ optimize it without the need of "guessing" (which is what usually a
+ plain -O3 does). Doing this speeds up the execution a lot. Another
+ important thing was to increase the inline limit from 600 (or whatever
+ the default value is) to something big (like 10000) so more functions
+ will be inlined instead of called. The usage of "-fwhole-program" tells
+ to gcc that the .c file is the one and only source code file for the
+ program, so it will use all functions as static and will make all
+ "inline-able" functions, inline. This is another great speedup :-).
+
+My problem with this is that, by definition, the test has to be run
+multiple times in order to provide execution profiling data used to
+optimise the test for the final run. Thus, the real total run time spent
+to obtain the final result was not that much less or perhaps longer than
+just running the test a single time without this sort of execution
+profiling.
+
+I asked John about these optimisations; he said:
+
+ Hahaha :)
+ Yes I bet the biggest advantage was the profiling run and use of that
+ profiling information, and maybe also the whole program optimizations.
+ Both of which can't be done in real-life programs :)
+
+ The profiling information helps the compiler issue branch prediction
+ hints to the processor, and also do prefetches. The first one makes a
+ lot of difference in modern x86 CPUs with their huge execution
+ pipelines. If the branch prediction fails, you end up flushing the
+ pipeline and backtracking tens of instructions. Explicit prefetching,
+ would also make a big difference if the data set was bigger. I don't
+ think it helps here.
+
+This method of optimisation is certainly interesting, but I don't think
+it's appropriate for the C-Ray tests.
+
Added: SwiftApps/raytrace/c-ray-1.1/RUN
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/RUN (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/RUN 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,2 @@
+#!/bin/sh
+cat scene | ./c-ray-f > foo.ppm
Property changes on: SwiftApps/raytrace/c-ray-1.1/RUN
___________________________________________________________________
Added: svn:executable
+ *
Added: SwiftApps/raytrace/c-ray-1.1/RUN.full
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/RUN.full (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/RUN.full 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,9 @@
+#!/bin/sh
+cat scene | ./c-ray-f > foo.ppm
+cat scene | ./c-ray-mt -t 32 > foo.ppm
+cat sphfract | ./c-ray-f > foo.ppm
+cat sphfract | ./c-ray-mt -t 32 > foo.ppm
+cat sphfract | ./c-ray-f -s 1024x768 -r 8 > foo.ppm
+cat sphfract | ./c-ray-mt -t 32 -s 1024x768 -r 8 > foo.ppm
+cat scene | ./c-ray-f -s 7500x3500 > foo.ppm
+cat scene | ./c-ray-mt -t 32 -s 7500x3500 > foo.ppm
Property changes on: SwiftApps/raytrace/c-ray-1.1/RUN.full
___________________________________________________________________
Added: svn:executable
+ *
Added: SwiftApps/raytrace/c-ray-1.1/c-ray-f
===================================================================
(Binary files differ)
Property changes on: SwiftApps/raytrace/c-ray-1.1/c-ray-f
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: SwiftApps/raytrace/c-ray-1.1/c-ray-f.c
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/c-ray-f.c (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/c-ray-f.c 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,583 @@
+/* c-ray-f - a simple raytracing filter.
+ * Copyright (C) 2006 John Tsiombikas <nuclear at siggraph.org>
+ *
+ * You are free to use, modify and redistribute this program under the
+ * terms of the GNU General Public License v2 or (at your option) later.
+ * see "http://www.gnu.org/licenses/gpl.txt" for details.
+ * ---------------------------------------------------------------------
+ * Usage:
+ * compile: cc -o c-ray-f c-ray-f.c -lm
+ * run: cat scene | ./c-ray-f >foo.ppm
+ * enjoy: display foo.ppm (with imagemagick)
+ * or: imgview foo.ppm (on IRIX)
+ * ---------------------------------------------------------------------
+ * Scene file format:
+ * # sphere (many)
+ * s x y z rad r g b shininess reflectivity
+ * # light (many)
+ * l x y z
+ * # camera (one)
+ * c x y z fov tx ty tz
+ * ---------------------------------------------------------------------
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <ctype.h>
+#include <errno.h>
+
+/* find the appropriate way to define explicitly sized types */
+#if (__STDC_VERSION__ >= 199900) || defined(__GLIBC__) /* C99 or GNU libc */
+#include <stdint.h>
+#elif defined(__unix__) || defined(unix)
+#include <sys/types.h>
+#elif defined(_MSC_VER) /* the nameless one */
+typedef unsigned __int8 uint8_t;
+typedef unsigned __int32 uint32_t;
+#endif
+
+struct vec3 {
+ double x, y, z;
+};
+
+struct ray {
+ struct vec3 orig, dir;
+};
+
+struct material {
+ struct vec3 col; /* color */
+ double spow; /* specular power */
+ double refl; /* reflection intensity */
+};
+
+struct sphere {
+ struct vec3 pos;
+ double rad;
+ struct material mat;
+ struct sphere *next;
+};
+
+struct spoint {
+ struct vec3 pos, normal, vref; /* position, normal and view reflection */
+ double dist; /* parametric distance of intersection along the ray */
+};
+
+struct camera {
+ struct vec3 pos, targ;
+ double fov;
+};
+
+void render(int xsz, int ysz, uint32_t *fb, int samples);
+struct vec3 trace(struct ray ray, int depth);
+struct vec3 shade(struct sphere *obj, struct spoint *sp, int depth);
+struct vec3 reflect(struct vec3 v, struct vec3 n);
+struct vec3 cross_product(struct vec3 v1, struct vec3 v2);
+struct ray get_primary_ray(int x, int y, int sample);
+struct vec3 get_sample_pos(int x, int y, int sample);
+struct vec3 jitter(int x, int y, int s);
+int ray_sphere(const struct sphere *sph, struct ray ray, struct spoint *sp);
+void load_scene(FILE *fp);
+unsigned long get_msec(void);
+
+#define MAX_LIGHTS 16 /* maximum number of lights */
+#define RAY_MAG 1000.0 /* trace rays of this magnitude */
+#define MAX_RAY_DEPTH 5 /* raytrace recursion limit */
+#define FOV 0.78539816 /* field of view in rads (pi/4) */
+#define HALF_FOV (FOV * 0.5)
+#define ERR_MARGIN 1e-6 /* an arbitrary error margin to avoid surface acne */
+
+/* bit-shift ammount for packing each color into a 32bit uint */
+#ifdef LITTLE_ENDIAN
+#define RSHIFT 16
+#define BSHIFT 0
+#else /* big endian */
+#define RSHIFT 0
+#define BSHIFT 16
+#endif /* endianess */
+#define GSHIFT 8 /* this is the same in both byte orders */
+
+/* some helpful macros... */
+#define SQ(x) ((x) * (x))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define DOT(a, b) ((a).x * (b).x + (a).y * (b).y + (a).z * (b).z)
+#define NORMALIZE(a) do {\
+ double len = sqrt(DOT(a, a));\
+ (a).x /= len; (a).y /= len; (a).z /= len;\
+} while(0);
+
+/* global state */
+int xres = 800;
+int yres = 600;
+double aspect = 1.333333;
+struct sphere *obj_list;
+struct vec3 lights[MAX_LIGHTS];
+int lnum = 0;
+struct camera cam;
+
+#define NRAN 1024
+#define MASK (NRAN - 1)
+struct vec3 urand[NRAN];
+int irand[NRAN];
+
+const char *usage = {
+ "Usage: c-ray-f [options]\n"
+ " Reads a scene file from stdin, writes the image to stdout, and stats to stderr.\n\n"
+ "Options:\n"
+ " -s WxH where W is the width and H the height of the image\n"
+ " -r <rays> shoot <rays> rays per pixel (antialiasing)\n"
+ " -i <file> read from <file> instead of stdin\n"
+ " -o <file> write to <file> instead of stdout\n"
+ " -h this help screen\n\n"
+};
+
+
+
+int main(int argc, char **argv) {
+ int i;
+ unsigned long rend_time, start_time;
+ uint32_t *pixels;
+ int rays_per_pixel = 1;
+ FILE *infile = stdin, *outfile = stdout;
+
+ for(i=1; i<argc; i++) {
+ if(argv[i][0] == '-' && argv[i][2] == 0) {
+ char *sep;
+ switch(argv[i][1]) {
+ case 's':
+ if(!isdigit(argv[++i][0]) || !(sep = strchr(argv[i], 'x')) || !isdigit(*(sep + 1))) {
+ fputs("-s must be followed by something like \"640x480\"\n", stderr);
+ return EXIT_FAILURE;
+ }
+ xres = atoi(argv[i]);
+ yres = atoi(sep + 1);
+ aspect = (double)xres / (double)yres;
+ break;
+
+ case 'i':
+ if(!(infile = fopen(argv[++i], "r"))) {
+ fprintf(stderr, "failed to open input file %s: %s\n", argv[i], strerror(errno));
+ return EXIT_FAILURE;
+ }
+ break;
+
+ case 'o':
+ if(!(outfile = fopen(argv[++i], "w"))) {
+ fprintf(stderr, "failed to open output file %s: %s\n", argv[i], strerror(errno));
+ return EXIT_FAILURE;
+ }
+ break;
+
+ case 'r':
+ if(!isdigit(argv[++i][0])) {
+ fputs("-r must be followed by a number (rays per pixel)\n", stderr);
+ return EXIT_FAILURE;
+ }
+ rays_per_pixel = atoi(argv[i]);
+ break;
+
+ case 'h':
+ fputs(usage, stdout);
+ return 0;
+
+ default:
+ fprintf(stderr, "unrecognized argument: %s\n", argv[i]);
+ fputs(usage, stderr);
+ return EXIT_FAILURE;
+ }
+ } else {
+ fprintf(stderr, "unrecognized argument: %s\n", argv[i]);
+ fputs(usage, stderr);
+ return EXIT_FAILURE;
+ }
+ }
+
+ if(!(pixels = malloc(xres * yres * sizeof *pixels))) {
+ perror("pixel buffer allocation failed");
+ return EXIT_FAILURE;
+ }
+ load_scene(infile);
+
+ /* initialize the random number tables for the jitter */
+ for(i=0; i<NRAN; i++) urand[i].x = (double)rand() / RAND_MAX - 0.5;
+ for(i=0; i<NRAN; i++) urand[i].y = (double)rand() / RAND_MAX - 0.5;
+ for(i=0; i<NRAN; i++) irand[i] = (int)(NRAN * ((double)rand() / RAND_MAX));
+
+ start_time = get_msec();
+ render(xres, yres, pixels, rays_per_pixel);
+ rend_time = get_msec() - start_time;
+
+ /* output statistics to stderr */
+ fprintf(stderr, "Rendering took: %lu seconds (%lu milliseconds)\n", rend_time / 1000, rend_time);
+
+ /* output the image */
+ fprintf(outfile, "P6\n%d %d\n255\n", xres, yres);
+ for(i=0; i<xres * yres; i++) {
+ fputc((pixels[i] >> RSHIFT) & 0xff, outfile);
+ fputc((pixels[i] >> GSHIFT) & 0xff, outfile);
+ fputc((pixels[i] >> BSHIFT) & 0xff, outfile);
+ }
+ fflush(outfile);
+
+ if(infile != stdin) fclose(infile);
+ if(outfile != stdout) fclose(outfile);
+ return 0;
+}
+
+/* render a frame of xsz/ysz dimensions into the provided framebuffer */
+void render(int xsz, int ysz, uint32_t *fb, int samples) {
+ int i, j, s;
+ double rcp_samples = 1.0 / (double)samples;
+
+ /* for each subpixel, trace a ray through the scene, accumulate the
+ * colors of the subpixels of each pixel, then pack the color and
+ * put it into the framebuffer.
+ * XXX: assumes contiguous scanlines with NO padding, and 32bit pixels.
+ */
+ for(j=0; j<ysz; j++) {
+ for(i=0; i<xsz; i++) {
+ double r, g, b;
+ r = g = b = 0.0;
+
+ for(s=0; s<samples; s++) {
+ struct vec3 col = trace(get_primary_ray(i, j, s), 0);
+ r += col.x;
+ g += col.y;
+ b += col.z;
+ }
+
+ r = r * rcp_samples;
+ g = g * rcp_samples;
+ b = b * rcp_samples;
+
+ *fb++ = ((uint32_t)(MIN(r, 1.0) * 255.0) & 0xff) << RSHIFT |
+ ((uint32_t)(MIN(g, 1.0) * 255.0) & 0xff) << GSHIFT |
+ ((uint32_t)(MIN(b, 1.0) * 255.0) & 0xff) << BSHIFT;
+ }
+ }
+}
+
+/* trace a ray throught the scene recursively (the recursion happens through
+ * shade() to calculate reflection rays if necessary).
+ */
+struct vec3 trace(struct ray ray, int depth) {
+ struct vec3 col;
+ struct spoint sp, nearest_sp;
+ struct sphere *nearest_obj = 0;
+ struct sphere *iter = obj_list->next;
+
+ /* if we reached the recursion limit, bail out */
+ if(depth >= MAX_RAY_DEPTH) {
+ col.x = col.y = col.z = 0.0;
+ return col;
+ }
+
+ /* find the nearest intersection ... */
+ while(iter) {
+ if(ray_sphere(iter, ray, &sp)) {
+ if(!nearest_obj || sp.dist < nearest_sp.dist) {
+ nearest_obj = iter;
+ nearest_sp = sp;
+ }
+ }
+ iter = iter->next;
+ }
+
+ /* and perform shading calculations as needed by calling shade() */
+ if(nearest_obj) {
+ col = shade(nearest_obj, &nearest_sp, depth);
+ } else {
+ col.x = col.y = col.z = 0.0;
+ }
+
+ return col;
+}
+
+/* Calculates direct illumination with the phong reflectance model.
+ * Also handles reflections by calling trace again, if necessary.
+ */
+struct vec3 shade(struct sphere *obj, struct spoint *sp, int depth) {
+ int i;
+ struct vec3 col = {0, 0, 0};
+
+ /* for all lights ... */
+ for(i=0; i<lnum; i++) {
+ double ispec, idiff;
+ struct vec3 ldir;
+ struct ray shadow_ray;
+ struct sphere *iter = obj_list->next;
+ int in_shadow = 0;
+
+ ldir.x = lights[i].x - sp->pos.x;
+ ldir.y = lights[i].y - sp->pos.y;
+ ldir.z = lights[i].z - sp->pos.z;
+
+ shadow_ray.orig = sp->pos;
+ shadow_ray.dir = ldir;
+
+ /* shoot shadow rays to determine if we have a line of sight with the light */
+ while(iter) {
+ if(ray_sphere(iter, shadow_ray, 0)) {
+ in_shadow = 1;
+ break;
+ }
+ iter = iter->next;
+ }
+
+ /* and if we're not in shadow, calculate direct illumination with the phong model. */
+ if(!in_shadow) {
+ NORMALIZE(ldir);
+
+ idiff = MAX(DOT(sp->normal, ldir), 0.0);
+ ispec = obj->mat.spow > 0.0 ? pow(MAX(DOT(sp->vref, ldir), 0.0), obj->mat.spow) : 0.0;
+
+ col.x += idiff * obj->mat.col.x + ispec;
+ col.y += idiff * obj->mat.col.y + ispec;
+ col.z += idiff * obj->mat.col.z + ispec;
+ }
+ }
+
+ /* Also, if the object is reflective, spawn a reflection ray, and call trace()
+ * to calculate the light arriving from the mirror direction.
+ */
+ if(obj->mat.refl > 0.0) {
+ struct ray ray;
+ struct vec3 rcol;
+
+ ray.orig = sp->pos;
+ ray.dir = sp->vref;
+ ray.dir.x *= RAY_MAG;
+ ray.dir.y *= RAY_MAG;
+ ray.dir.z *= RAY_MAG;
+
+ rcol = trace(ray, depth + 1);
+ col.x += rcol.x * obj->mat.refl;
+ col.y += rcol.y * obj->mat.refl;
+ col.z += rcol.z * obj->mat.refl;
+ }
+
+ return col;
+}
+
+/* calculate reflection vector */
+struct vec3 reflect(struct vec3 v, struct vec3 n) {
+ struct vec3 res;
+ double dot = v.x * n.x + v.y * n.y + v.z * n.z;
+ res.x = -(2.0 * dot * n.x - v.x);
+ res.y = -(2.0 * dot * n.y - v.y);
+ res.z = -(2.0 * dot * n.z - v.z);
+ return res;
+}
+
+struct vec3 cross_product(struct vec3 v1, struct vec3 v2) {
+ struct vec3 res;
+ res.x = v1.y * v2.z - v1.z * v2.y;
+ res.y = v1.z * v2.x - v1.x * v2.z;
+ res.z = v1.x * v2.y - v1.y * v2.x;
+ return res;
+}
+
+/* determine the primary ray corresponding to the specified pixel (x, y) */
+struct ray get_primary_ray(int x, int y, int sample) {
+ struct ray ray;
+ float m[3][3];
+ struct vec3 i, j = {0, 1, 0}, k, dir, orig, foo;
+
+ k.x = cam.targ.x - cam.pos.x;
+ k.y = cam.targ.y - cam.pos.y;
+ k.z = cam.targ.z - cam.pos.z;
+ NORMALIZE(k);
+
+ i = cross_product(j, k);
+ j = cross_product(k, i);
+ m[0][0] = i.x; m[0][1] = j.x; m[0][2] = k.x;
+ m[1][0] = i.y; m[1][1] = j.y; m[1][2] = k.y;
+ m[2][0] = i.z; m[2][1] = j.z; m[2][2] = k.z;
+
+ ray.orig.x = ray.orig.y = ray.orig.z = 0.0;
+ ray.dir = get_sample_pos(x, y, sample);
+ ray.dir.z = 1.0 / HALF_FOV;
+ ray.dir.x *= RAY_MAG;
+ ray.dir.y *= RAY_MAG;
+ ray.dir.z *= RAY_MAG;
+
+ dir.x = ray.dir.x + ray.orig.x;
+ dir.y = ray.dir.y + ray.orig.y;
+ dir.z = ray.dir.z + ray.orig.z;
+ foo.x = dir.x * m[0][0] + dir.y * m[0][1] + dir.z * m[0][2];
+ foo.y = dir.x * m[1][0] + dir.y * m[1][1] + dir.z * m[1][2];
+ foo.z = dir.x * m[2][0] + dir.y * m[2][1] + dir.z * m[2][2];
+
+ orig.x = ray.orig.x * m[0][0] + ray.orig.y * m[0][1] + ray.orig.z * m[0][2] + cam.pos.x;
+ orig.y = ray.orig.x * m[1][0] + ray.orig.y * m[1][1] + ray.orig.z * m[1][2] + cam.pos.y;
+ orig.z = ray.orig.x * m[2][0] + ray.orig.y * m[2][1] + ray.orig.z * m[2][2] + cam.pos.z;
+
+ ray.orig = orig;
+ ray.dir.x = foo.x + orig.x;
+ ray.dir.y = foo.y + orig.y;
+ ray.dir.z = foo.z + orig.z;
+
+ return ray;
+}
+
+
+struct vec3 get_sample_pos(int x, int y, int sample) {
+ struct vec3 pt;
+ double xsz = 2.0, ysz = xres / aspect;
+ static double sf = 0.0;
+
+ if(sf == 0.0) {
+ sf = 2.0 / (double)xres;
+ }
+
+ pt.x = ((double)x / (double)xres) - 0.5;
+ pt.y = -(((double)y / (double)yres) - 0.65) / aspect;
+
+ if(sample) {
+ struct vec3 jt = jitter(x, y, sample);
+ pt.x += jt.x * sf;
+ pt.y += jt.y * sf / aspect;
+ }
+ return pt;
+}
+
+/* jitter function taken from Graphics Gems I. */
+struct vec3 jitter(int x, int y, int s) {
+ struct vec3 pt;
+ pt.x = urand[(x + (y << 2) + irand[(x + s) & MASK]) & MASK].x;
+ pt.y = urand[(y + (x << 2) + irand[(y + s) & MASK]) & MASK].y;
+ return pt;
+}
+
+/* Calculate ray-sphere intersection, and return {1, 0} to signify hit or no hit.
+ * Also the surface point parameters like position, normal, etc are returned through
+ * the sp pointer if it is not NULL.
+ */
+int ray_sphere(const struct sphere *sph, struct ray ray, struct spoint *sp) {
+ double a, b, c, d, sqrt_d, t1, t2;
+
+ a = SQ(ray.dir.x) + SQ(ray.dir.y) + SQ(ray.dir.z);
+ b = 2.0 * ray.dir.x * (ray.orig.x - sph->pos.x) +
+ 2.0 * ray.dir.y * (ray.orig.y - sph->pos.y) +
+ 2.0 * ray.dir.z * (ray.orig.z - sph->pos.z);
+ c = SQ(sph->pos.x) + SQ(sph->pos.y) + SQ(sph->pos.z) +
+ SQ(ray.orig.x) + SQ(ray.orig.y) + SQ(ray.orig.z) +
+ 2.0 * (-sph->pos.x * ray.orig.x - sph->pos.y * ray.orig.y - sph->pos.z * ray.orig.z) - SQ(sph->rad);
+
+ if((d = SQ(b) - 4.0 * a * c) < 0.0) return 0;
+
+ sqrt_d = sqrt(d);
+ t1 = (-b + sqrt_d) / (2.0 * a);
+ t2 = (-b - sqrt_d) / (2.0 * a);
+
+ if((t1 < ERR_MARGIN && t2 < ERR_MARGIN) || (t1 > 1.0 && t2 > 1.0)) return 0;
+
+ if(sp) {
+ if(t1 < ERR_MARGIN) t1 = t2;
+ if(t2 < ERR_MARGIN) t2 = t1;
+ sp->dist = t1 < t2 ? t1 : t2;
+
+ sp->pos.x = ray.orig.x + ray.dir.x * sp->dist;
+ sp->pos.y = ray.orig.y + ray.dir.y * sp->dist;
+ sp->pos.z = ray.orig.z + ray.dir.z * sp->dist;
+
+ sp->normal.x = (sp->pos.x - sph->pos.x) / sph->rad;
+ sp->normal.y = (sp->pos.y - sph->pos.y) / sph->rad;
+ sp->normal.z = (sp->pos.z - sph->pos.z) / sph->rad;
+
+ sp->vref = reflect(ray.dir, sp->normal);
+ NORMALIZE(sp->vref);
+ }
+ return 1;
+}
+
+/* Load the scene from an extremely simple scene description file */
+#define DELIM " \t\n"
+void load_scene(FILE *fp) {
+ char line[256], *ptr, type;
+
+ obj_list = malloc(sizeof(struct sphere));
+ obj_list->next = 0;
+
+ while((ptr = fgets(line, 256, fp))) {
+ int i;
+ struct vec3 pos, col;
+ double rad, spow, refl;
+
+ while(*ptr == ' ' || *ptr == '\t') ptr++;
+ if(*ptr == '#' || *ptr == '\n') continue;
+
+ if(!(ptr = strtok(line, DELIM))) continue;
+ type = *ptr;
+
+ for(i=0; i<3; i++) {
+ if(!(ptr = strtok(0, DELIM))) break;
+ *((double*)&pos.x + i) = atof(ptr);
+ }
+
+ if(type == 'l') {
+ lights[lnum++] = pos;
+ continue;
+ }
+
+ if(!(ptr = strtok(0, DELIM))) continue;
+ rad = atof(ptr);
+
+ for(i=0; i<3; i++) {
+ if(!(ptr = strtok(0, DELIM))) break;
+ *((double*)&col.x + i) = atof(ptr);
+ }
+
+ if(type == 'c') {
+ cam.pos = pos;
+ cam.targ = col;
+ cam.fov = rad;
+ continue;
+ }
+
+ if(!(ptr = strtok(0, DELIM))) continue;
+ spow = atof(ptr);
+
+ if(!(ptr = strtok(0, DELIM))) continue;
+ refl = atof(ptr);
+
+ if(type == 's') {
+ struct sphere *sph = malloc(sizeof *sph);
+ sph->next = obj_list->next;
+ obj_list->next = sph;
+
+ sph->pos = pos;
+ sph->rad = rad;
+ sph->mat.col = col;
+ sph->mat.spow = spow;
+ sph->mat.refl = refl;
+ } else {
+ fprintf(stderr, "unknown type: %c\n", type);
+ }
+ }
+}
+
+
+/* provide a millisecond-resolution timer for each system */
+#if defined(__unix__) || defined(unix)
+#include <time.h>
+#include <sys/time.h>
+unsigned long get_msec(void) {
+ static struct timeval timeval, first_timeval;
+
+ gettimeofday(&timeval, 0);
+ if(first_timeval.tv_sec == 0) {
+ first_timeval = timeval;
+ return 0;
+ }
+ return (timeval.tv_sec - first_timeval.tv_sec) * 1000 + (timeval.tv_usec - first_timeval.tv_usec) / 1000;
+}
+#elif defined(__WIN32__) || defined(WIN32)
+#include <windows.h>
+unsigned long get_msec(void) {
+ return GetTickCount();
+}
+#else
+#error "I don't know how to measure time on your platform"
+#endif
Added: SwiftApps/raytrace/c-ray-1.1/c-ray-mt
===================================================================
(Binary files differ)
Property changes on: SwiftApps/raytrace/c-ray-1.1/c-ray-mt
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: SwiftApps/raytrace/c-ray-1.1/c-ray-mt.c
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/c-ray-mt.c (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/c-ray-mt.c 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,671 @@
+/* c-ray-mt - a simple multithreaded raytracing filter.
+ * Copyright (C) 2006 John Tsiombikas <nuclear at siggraph.org>
+ *
+ * You are free to use, modify and redistribute this program under the
+ * terms of the GNU General Public License v2 or (at your option) later.
+ * see "http://www.gnu.org/licenses/gpl.txt" for details.
+ * ---------------------------------------------------------------------
+ * Usage:
+ * compile: just type make
+ * (add any arch-specific optimizations for your compiler in CFLAGS first)
+ * run: cat scene | ./c-ray-mt [-t num-threads] >foo.ppm
+ * (on broken systems such as windows try: c-ray-mt -i scene -o foo.ppm)
+ * enjoy: display foo.ppm
+ * (with imagemagick, or use your favorite image viewer)
+ * ---------------------------------------------------------------------
+ * Scene file format:
+ * # sphere (many)
+ * s x y z rad r g b shininess reflectivity
+ * # light (many)
+ * l x y z
+ * # camera (one)
+ * c x y z fov tx ty tz
+ * ---------------------------------------------------------------------
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <ctype.h>
+#include <errno.h>
+#include <pthread.h>
+
+#define VER_MAJOR 1
+#define VER_MINOR 1
+#define VER_STR "c-ray-mt v%d.%d\n"
+
+#if !defined(unix) && !defined(__unix__)
+#ifdef __MACH__
+#define unix 1
+#define __unix__ 1
+#endif /* __MACH__ */
+#endif /* unix */
+
+/* find the appropriate way to define explicitly sized types */
+/* for C99 or GNU libc (also mach's libc) we can use stdint.h */
+#if (__STDC_VERSION__ >= 199900) || defined(__GLIBC__) || defined(__MACH__)
+#include <stdint.h>
+#elif defined(unix) || defined(__unix__) /* some UNIX systems have them in sys/types.h */
+#include <sys/types.h>
+#elif defined(__WIN32__) || defined(WIN32) /* the nameless one */
+typedef unsigned __int8 uint8_t;
+typedef unsigned __int32 uint32_t;
+#endif /* sized type detection */
+
+struct vec3 {
+ double x, y, z;
+};
+
+struct ray {
+ struct vec3 orig, dir;
+};
+
+struct material {
+ struct vec3 col; /* color */
+ double spow; /* specular power */
+ double refl; /* reflection intensity */
+};
+
+struct sphere {
+ struct vec3 pos;
+ double rad;
+ struct material mat;
+ struct sphere *next;
+};
+
+struct spoint {
+ struct vec3 pos, normal, vref; /* position, normal and view reflection */
+ double dist; /* parametric distance of intersection along the ray */
+};
+
+struct camera {
+ struct vec3 pos, targ;
+ double fov;
+};
+
+struct thread_data {
+ pthread_t tid;
+ int sl_start, sl_count;
+
+ uint32_t *pixels;
+};
+
+void render_scanline(int xsz, int ysz, int sl, uint32_t *fb, int samples);
+struct vec3 trace(struct ray ray, int depth);
+struct vec3 shade(struct sphere *obj, struct spoint *sp, int depth);
+struct vec3 reflect(struct vec3 v, struct vec3 n);
+struct vec3 cross_product(struct vec3 v1, struct vec3 v2);
+struct ray get_primary_ray(int x, int y, int sample);
+struct vec3 get_sample_pos(int x, int y, int sample);
+struct vec3 jitter(int x, int y, int s);
+int ray_sphere(const struct sphere *sph, struct ray ray, struct spoint *sp);
+void load_scene(FILE *fp);
+unsigned long get_msec(void);
+
+void *thread_func(void *tdata);
+
+#define MAX_LIGHTS 16 /* maximum number of lights */
+#define RAY_MAG 1000.0 /* trace rays of this magnitude */
+#define MAX_RAY_DEPTH 5 /* raytrace recursion limit */
+#define FOV 0.78539816 /* field of view in rads (pi/4) */
+#define HALF_FOV (FOV * 0.5)
+#define ERR_MARGIN 1e-6 /* an arbitrary error margin to avoid surface acne */
+
+/* bit-shift ammount for packing each color into a 32bit uint */
+#ifdef LITTLE_ENDIAN
+#define RSHIFT 16
+#define BSHIFT 0
+#else /* big endian */
+#define RSHIFT 0
+#define BSHIFT 16
+#endif /* endianess */
+#define GSHIFT 8 /* this is the same in both byte orders */
+
+/* some helpful macros... */
+#define SQ(x) ((x) * (x))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define DOT(a, b) ((a).x * (b).x + (a).y * (b).y + (a).z * (b).z)
+#define NORMALIZE(a) do {\
+ double len = sqrt(DOT(a, a));\
+ (a).x /= len; (a).y /= len; (a).z /= len;\
+} while(0);
+
+/* global state */
+int xres = 800;
+int yres = 600;
+int rays_per_pixel = 1;
+double aspect = 1.333333;
+struct sphere *obj_list;
+struct vec3 lights[MAX_LIGHTS];
+int lnum = 0;
+struct camera cam;
+
+int thread_num = 1;
+struct thread_data *threads;
+
+int start = 0;
+pthread_mutex_t start_mutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t start_cond = PTHREAD_COND_INITIALIZER;
+
+#define NRAN 1024
+#define MASK (NRAN - 1)
+struct vec3 urand[NRAN];
+int irand[NRAN];
+
+const char *usage = {
+ "Usage: c-ray-mt [options]\n"
+ " Reads a scene file from stdin, writes the image to stdout, and stats to stderr.\n\n"
+ "Options:\n"
+ " -t <num> how many threads to use (default: 1)\n"
+ " -s WxH where W is the width and H the height of the image\n"
+ " -r <rays> shoot <rays> rays per pixel (antialiasing)\n"
+ " -i <file> read from <file> instead of stdin\n"
+ " -o <file> write to <file> instead of stdout\n"
+ " -h this help screen\n\n"
+};
+
+
+
+int main(int argc, char **argv) {
+ int i;
+ unsigned long rend_time, start_time;
+ uint32_t *pixels;
+ double sl, sl_per_thread;
+ FILE *infile = stdin, *outfile = stdout;
+
+ for(i=1; i<argc; i++) {
+ if(argv[i][0] == '-' && argv[i][2] == 0) {
+ char *sep;
+ switch(argv[i][1]) {
+ case 't':
+ if(!isdigit(argv[++i][0])) {
+ fprintf(stderr, "-t mus be followed by the number of worker threads to spawn\n");
+ return EXIT_FAILURE;
+ }
+ thread_num = atoi(argv[i]);
+ if(!thread_num) {
+ fprintf(stderr, "invalid number of threads specified: %d\n", thread_num);
+ return EXIT_FAILURE;
+ }
+ break;
+
+ case 's':
+ if(!isdigit(argv[++i][0]) || !(sep = strchr(argv[i], 'x')) || !isdigit(*(sep + 1))) {
+ fputs("-s must be followed by something like \"640x480\"\n", stderr);
+ return EXIT_FAILURE;
+ }
+ xres = atoi(argv[i]);
+ yres = atoi(sep + 1);
+ aspect = (double)xres / (double)yres;
+ break;
+
+ case 'i':
+ if(!(infile = fopen(argv[++i], "rb"))) {
+ fprintf(stderr, "failed to open input file %s: %s\n", argv[i], strerror(errno));
+ return EXIT_FAILURE;
+ }
+ break;
+
+ case 'o':
+ if(!(outfile = fopen(argv[++i], "wb"))) {
+ fprintf(stderr, "failed to open output file %s: %s\n", argv[i], strerror(errno));
+ return EXIT_FAILURE;
+ }
+ break;
+
+ case 'r':
+ if(!isdigit(argv[++i][0])) {
+ fputs("-r must be followed by a number (rays per pixel)\n", stderr);
+ return EXIT_FAILURE;
+ }
+ rays_per_pixel = atoi(argv[i]);
+ break;
+
+ case 'h':
+ fputs(usage, stdout);
+ return 0;
+
+ default:
+ fprintf(stderr, "unrecognized argument: %s\n", argv[i]);
+ fputs(usage, stderr);
+ return EXIT_FAILURE;
+ }
+ } else {
+ fprintf(stderr, "unrecognized argument: %s\n", argv[i]);
+ fputs(usage, stderr);
+ return EXIT_FAILURE;
+ }
+ }
+
+ if(!(pixels = malloc(xres * yres * sizeof *pixels))) {
+ perror("pixel buffer allocation failed");
+ return EXIT_FAILURE;
+ }
+ load_scene(infile);
+
+ /* initialize the random number tables for the jitter */
+ for(i=0; i<NRAN; i++) urand[i].x = (double)rand() / RAND_MAX - 0.5;
+ for(i=0; i<NRAN; i++) urand[i].y = (double)rand() / RAND_MAX - 0.5;
+ for(i=0; i<NRAN; i++) irand[i] = (int)(NRAN * ((double)rand() / RAND_MAX));
+
+ if(thread_num > yres) {
+ fprintf(stderr, "more threads than scanlines specified, reducing number of threads to %d\n", yres);
+ thread_num = yres;
+ }
+
+ if(!(threads = malloc(thread_num * sizeof *threads))) {
+ perror("failed to allocate thread table");
+ return EXIT_FAILURE;
+ }
+
+ sl = 0.0;
+ sl_per_thread = (double)yres / (double)thread_num;
+ for(i=0; i<thread_num; i++) {
+ threads[i].sl_start = (int)sl;
+ sl += sl_per_thread;
+ threads[i].sl_count = (int)sl - threads[i].sl_start;
+ threads[i].pixels = pixels;
+
+ if(pthread_create(&threads[i].tid, 0, thread_func, &threads[i]) != 0) {
+ perror("failed to spawn thread");
+ return EXIT_FAILURE;
+ }
+ }
+ threads[thread_num - 1].sl_count = yres - threads[thread_num - 1].sl_start;
+
+ fprintf(stderr, VER_STR, VER_MAJOR, VER_MINOR);
+
+ pthread_mutex_lock(&start_mutex);
+ start_time = get_msec();
+ start = 1;
+ pthread_cond_broadcast(&start_cond);
+ pthread_mutex_unlock(&start_mutex);
+
+ for(i=0; i<thread_num; i++) {
+ pthread_join(threads[i].tid, 0);
+ }
+ rend_time = get_msec() - start_time;
+
+ /* output statistics to stderr */
+ fprintf(stderr, "Rendering took: %lu seconds (%lu milliseconds)\n", rend_time / 1000, rend_time);
+
+ /* output the image */
+ fprintf(outfile, "P6\n%d %d\n255\n", xres, yres);
+ for(i=0; i<xres * yres; i++) {
+ fputc((pixels[i] >> RSHIFT) & 0xff, outfile);
+ fputc((pixels[i] >> GSHIFT) & 0xff, outfile);
+ fputc((pixels[i] >> BSHIFT) & 0xff, outfile);
+ }
+ fflush(outfile);
+
+ if(infile != stdin) fclose(infile);
+ if(outfile != stdout) fclose(outfile);
+ return 0;
+}
+
+/* render a frame of xsz/ysz dimensions into the provided framebuffer */
+void render_scanline(int xsz, int ysz, int sl, uint32_t *fb, int samples) {
+ int i, s;
+ double rcp_samples = 1.0 / (double)samples;
+
+ for(i=0; i<xsz; i++) {
+ double r, g, b;
+ r = g = b = 0.0;
+
+ for(s=0; s<samples; s++) {
+ struct vec3 col = trace(get_primary_ray(i, sl, s), 0);
+ r += col.x;
+ g += col.y;
+ b += col.z;
+ }
+
+ r = r * rcp_samples;
+ g = g * rcp_samples;
+ b = b * rcp_samples;
+
+ fb[sl * xsz + i] = ((uint32_t)(MIN(r, 1.0) * 255.0) & 0xff) << RSHIFT |
+ ((uint32_t)(MIN(g, 1.0) * 255.0) & 0xff) << GSHIFT |
+ ((uint32_t)(MIN(b, 1.0) * 255.0) & 0xff) << BSHIFT;
+ }
+}
+
+/* trace a ray throught the scene recursively (the recursion happens through
+ * shade() to calculate reflection rays if necessary).
+ */
+struct vec3 trace(struct ray ray, int depth) {
+ struct vec3 col;
+ struct spoint sp, nearest_sp;
+ struct sphere *nearest_obj = 0;
+ struct sphere *iter = obj_list->next;
+
+ /* if we reached the recursion limit, bail out */
+ if(depth >= MAX_RAY_DEPTH) {
+ col.x = col.y = col.z = 0.0;
+ return col;
+ }
+
+ /* find the nearest intersection ... */
+ while(iter) {
+ if(ray_sphere(iter, ray, &sp)) {
+ if(!nearest_obj || sp.dist < nearest_sp.dist) {
+ nearest_obj = iter;
+ nearest_sp = sp;
+ }
+ }
+ iter = iter->next;
+ }
+
+ /* and perform shading calculations as needed by calling shade() */
+ if(nearest_obj) {
+ col = shade(nearest_obj, &nearest_sp, depth);
+ } else {
+ col.x = col.y = col.z = 0.0;
+ }
+
+ return col;
+}
+
+/* Calculates direct illumination with the phong reflectance model.
+ * Also handles reflections by calling trace again, if necessary.
+ */
+struct vec3 shade(struct sphere *obj, struct spoint *sp, int depth) {
+ int i;
+ struct vec3 col = {0, 0, 0};
+
+ /* for all lights ... */
+ for(i=0; i<lnum; i++) {
+ double ispec, idiff;
+ struct vec3 ldir;
+ struct ray shadow_ray;
+ struct sphere *iter = obj_list->next;
+ int in_shadow = 0;
+
+ ldir.x = lights[i].x - sp->pos.x;
+ ldir.y = lights[i].y - sp->pos.y;
+ ldir.z = lights[i].z - sp->pos.z;
+
+ shadow_ray.orig = sp->pos;
+ shadow_ray.dir = ldir;
+
+ /* shoot shadow rays to determine if we have a line of sight with the light */
+ while(iter) {
+ if(ray_sphere(iter, shadow_ray, 0)) {
+ in_shadow = 1;
+ break;
+ }
+ iter = iter->next;
+ }
+
+ /* and if we're not in shadow, calculate direct illumination with the phong model. */
+ if(!in_shadow) {
+ NORMALIZE(ldir);
+
+ idiff = MAX(DOT(sp->normal, ldir), 0.0);
+ ispec = obj->mat.spow > 0.0 ? pow(MAX(DOT(sp->vref, ldir), 0.0), obj->mat.spow) : 0.0;
+
+ col.x += idiff * obj->mat.col.x + ispec;
+ col.y += idiff * obj->mat.col.y + ispec;
+ col.z += idiff * obj->mat.col.z + ispec;
+ }
+ }
+
+ /* Also, if the object is reflective, spawn a reflection ray, and call trace()
+ * to calculate the light arriving from the mirror direction.
+ */
+ if(obj->mat.refl > 0.0) {
+ struct ray ray;
+ struct vec3 rcol;
+
+ ray.orig = sp->pos;
+ ray.dir = sp->vref;
+ ray.dir.x *= RAY_MAG;
+ ray.dir.y *= RAY_MAG;
+ ray.dir.z *= RAY_MAG;
+
+ rcol = trace(ray, depth + 1);
+ col.x += rcol.x * obj->mat.refl;
+ col.y += rcol.y * obj->mat.refl;
+ col.z += rcol.z * obj->mat.refl;
+ }
+
+ return col;
+}
+
+/* calculate reflection vector */
+struct vec3 reflect(struct vec3 v, struct vec3 n) {
+ struct vec3 res;
+ double dot = v.x * n.x + v.y * n.y + v.z * n.z;
+ res.x = -(2.0 * dot * n.x - v.x);
+ res.y = -(2.0 * dot * n.y - v.y);
+ res.z = -(2.0 * dot * n.z - v.z);
+ return res;
+}
+
+struct vec3 cross_product(struct vec3 v1, struct vec3 v2) {
+ struct vec3 res;
+ res.x = v1.y * v2.z - v1.z * v2.y;
+ res.y = v1.z * v2.x - v1.x * v2.z;
+ res.z = v1.x * v2.y - v1.y * v2.x;
+ return res;
+}
+
+/* determine the primary ray corresponding to the specified pixel (x, y) */
+struct ray get_primary_ray(int x, int y, int sample) {
+ struct ray ray;
+ float m[3][3];
+ struct vec3 i, j = {0, 1, 0}, k, dir, orig, foo;
+
+ k.x = cam.targ.x - cam.pos.x;
+ k.y = cam.targ.y - cam.pos.y;
+ k.z = cam.targ.z - cam.pos.z;
+ NORMALIZE(k);
+
+ i = cross_product(j, k);
+ j = cross_product(k, i);
+ m[0][0] = i.x; m[0][1] = j.x; m[0][2] = k.x;
+ m[1][0] = i.y; m[1][1] = j.y; m[1][2] = k.y;
+ m[2][0] = i.z; m[2][1] = j.z; m[2][2] = k.z;
+
+ ray.orig.x = ray.orig.y = ray.orig.z = 0.0;
+ ray.dir = get_sample_pos(x, y, sample);
+ ray.dir.z = 1.0 / HALF_FOV;
+ ray.dir.x *= RAY_MAG;
+ ray.dir.y *= RAY_MAG;
+ ray.dir.z *= RAY_MAG;
+
+ dir.x = ray.dir.x + ray.orig.x;
+ dir.y = ray.dir.y + ray.orig.y;
+ dir.z = ray.dir.z + ray.orig.z;
+ foo.x = dir.x * m[0][0] + dir.y * m[0][1] + dir.z * m[0][2];
+ foo.y = dir.x * m[1][0] + dir.y * m[1][1] + dir.z * m[1][2];
+ foo.z = dir.x * m[2][0] + dir.y * m[2][1] + dir.z * m[2][2];
+
+ orig.x = ray.orig.x * m[0][0] + ray.orig.y * m[0][1] + ray.orig.z * m[0][2] + cam.pos.x;
+ orig.y = ray.orig.x * m[1][0] + ray.orig.y * m[1][1] + ray.orig.z * m[1][2] + cam.pos.y;
+ orig.z = ray.orig.x * m[2][0] + ray.orig.y * m[2][1] + ray.orig.z * m[2][2] + cam.pos.z;
+
+ ray.orig = orig;
+ ray.dir.x = foo.x + orig.x;
+ ray.dir.y = foo.y + orig.y;
+ ray.dir.z = foo.z + orig.z;
+
+ return ray;
+}
+
+
+struct vec3 get_sample_pos(int x, int y, int sample) {
+ struct vec3 pt;
+ static double sf = 0.0;
+
+ if(sf == 0.0) {
+ sf = 1.5 / (double)xres;
+ }
+
+ pt.x = ((double)x / (double)xres) - 0.5;
+ pt.y = -(((double)y / (double)yres) - 0.65) / aspect;
+
+ if(sample) {
+ struct vec3 jt = jitter(x, y, sample);
+ pt.x += jt.x * sf;
+ pt.y += jt.y * sf / aspect;
+ }
+ return pt;
+}
+
+/* jitter function taken from Graphics Gems I. */
+struct vec3 jitter(int x, int y, int s) {
+ struct vec3 pt;
+ pt.x = urand[(x + (y << 2) + irand[(x + s) & MASK]) & MASK].x;
+ pt.y = urand[(y + (x << 2) + irand[(y + s) & MASK]) & MASK].y;
+ return pt;
+}
+
+/* Calculate ray-sphere intersection, and return {1, 0} to signify hit or no hit.
+ * Also the surface point parameters like position, normal, etc are returned through
+ * the sp pointer if it is not NULL.
+ */
+int ray_sphere(const struct sphere *sph, struct ray ray, struct spoint *sp) {
+ double a, b, c, d, sqrt_d, t1, t2;
+
+ a = SQ(ray.dir.x) + SQ(ray.dir.y) + SQ(ray.dir.z);
+ b = 2.0 * ray.dir.x * (ray.orig.x - sph->pos.x) +
+ 2.0 * ray.dir.y * (ray.orig.y - sph->pos.y) +
+ 2.0 * ray.dir.z * (ray.orig.z - sph->pos.z);
+ c = SQ(sph->pos.x) + SQ(sph->pos.y) + SQ(sph->pos.z) +
+ SQ(ray.orig.x) + SQ(ray.orig.y) + SQ(ray.orig.z) +
+ 2.0 * (-sph->pos.x * ray.orig.x - sph->pos.y * ray.orig.y - sph->pos.z * ray.orig.z) - SQ(sph->rad);
+
+ if((d = SQ(b) - 4.0 * a * c) < 0.0) return 0;
+
+ sqrt_d = sqrt(d);
+ t1 = (-b + sqrt_d) / (2.0 * a);
+ t2 = (-b - sqrt_d) / (2.0 * a);
+
+ if((t1 < ERR_MARGIN && t2 < ERR_MARGIN) || (t1 > 1.0 && t2 > 1.0)) return 0;
+
+ if(sp) {
+ if(t1 < ERR_MARGIN) t1 = t2;
+ if(t2 < ERR_MARGIN) t2 = t1;
+ sp->dist = t1 < t2 ? t1 : t2;
+
+ sp->pos.x = ray.orig.x + ray.dir.x * sp->dist;
+ sp->pos.y = ray.orig.y + ray.dir.y * sp->dist;
+ sp->pos.z = ray.orig.z + ray.dir.z * sp->dist;
+
+ sp->normal.x = (sp->pos.x - sph->pos.x) / sph->rad;
+ sp->normal.y = (sp->pos.y - sph->pos.y) / sph->rad;
+ sp->normal.z = (sp->pos.z - sph->pos.z) / sph->rad;
+
+ sp->vref = reflect(ray.dir, sp->normal);
+ NORMALIZE(sp->vref);
+ }
+ return 1;
+}
+
+/* Load the scene from an extremely simple scene description file */
+#define DELIM " \t\n"
+void load_scene(FILE *fp) {
+ char line[256], *ptr, type;
+
+ obj_list = malloc(sizeof(struct sphere));
+ obj_list->next = 0;
+
+ while((ptr = fgets(line, 256, fp))) {
+ int i;
+ struct vec3 pos, col;
+ double rad, spow, refl;
+
+ while(*ptr == ' ' || *ptr == '\t') ptr++;
+ if(*ptr == '#' || *ptr == '\n') continue;
+
+ if(!(ptr = strtok(line, DELIM))) continue;
+ type = *ptr;
+
+ for(i=0; i<3; i++) {
+ if(!(ptr = strtok(0, DELIM))) break;
+ *((double*)&pos.x + i) = atof(ptr);
+ }
+
+ if(type == 'l') {
+ lights[lnum++] = pos;
+ continue;
+ }
+
+ if(!(ptr = strtok(0, DELIM))) continue;
+ rad = atof(ptr);
+
+ for(i=0; i<3; i++) {
+ if(!(ptr = strtok(0, DELIM))) break;
+ *((double*)&col.x + i) = atof(ptr);
+ }
+
+ if(type == 'c') {
+ cam.pos = pos;
+ cam.targ = col;
+ cam.fov = rad;
+ continue;
+ }
+
+ if(!(ptr = strtok(0, DELIM))) continue;
+ spow = atof(ptr);
+
+ if(!(ptr = strtok(0, DELIM))) continue;
+ refl = atof(ptr);
+
+ if(type == 's') {
+ struct sphere *sph = malloc(sizeof *sph);
+ sph->next = obj_list->next;
+ obj_list->next = sph;
+
+ sph->pos = pos;
+ sph->rad = rad;
+ sph->mat.col = col;
+ sph->mat.spow = spow;
+ sph->mat.refl = refl;
+ } else {
+ fprintf(stderr, "unknown type: %c\n", type);
+ }
+ }
+}
+
+
+/* provide a millisecond-resolution timer for each system */
+#if defined(unix) || defined(__unix__)
+#include <time.h>
+#include <sys/time.h>
+unsigned long get_msec(void) {
+ static struct timeval timeval, first_timeval;
+
+ gettimeofday(&timeval, 0);
+ if(first_timeval.tv_sec == 0) {
+ first_timeval = timeval;
+ return 0;
+ }
+ return (timeval.tv_sec - first_timeval.tv_sec) * 1000 + (timeval.tv_usec - first_timeval.tv_usec) / 1000;
+}
+#elif defined(__WIN32__) || defined(WIN32)
+#include <windows.h>
+unsigned long get_msec(void) {
+ return GetTickCount();
+}
+#else
+#error "I don't know how to measure time on your platform"
+#endif
+
+void *thread_func(void *tdata) {
+ int i;
+ struct thread_data *td = (struct thread_data*)tdata;
+
+ pthread_mutex_lock(&start_mutex);
+ while(!start) {
+ pthread_cond_wait(&start_cond, &start_mutex);
+ }
+ pthread_mutex_unlock(&start_mutex);
+
+ for(i=0; i<td->sl_count; i++) {
+ render_scanline(xres, yres, i + td->sl_start, td->pixels, rays_per_pixel);
+ }
+
+ return 0;
+}
Added: SwiftApps/raytrace/c-ray-1.1/gen_fract.scm
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/gen_fract.scm (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/gen_fract.scm 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,52 @@
+; generate: generates the recursive sphere thingy.
+; sz - size of sphere
+; iter - iterations to perform
+; pos - the position of the sphere
+; dir - 0 for a central sphere, otherwise px/nx/py/ny/pz/nz for direction
+(define generate
+ (lambda (sz iter pos dir)
+ (let ((scale 0.4) (max-iter 7) (px 1) (nx 2) (py 3) (ny 4) (pz 5) (nz 6))
+ (if (> iter 0)
+ (let ((ofs (+ (* sz scale) sz)) (new-scale (* sz scale)))
+ (sphere sz pos) ; generate a sphere here
+
+ (if (not (= dir nx)) ; gen +X
+ (generate new-scale (- iter 1) (map + pos (list ofs 0 0)) px))
+
+ (if (not (= dir px)) ; gen -X
+ (generate new-scale (- iter 1) (map + pos (list (- ofs) 0 0)) nx))
+
+ (if (not (= dir ny)) ; gen +Y
+ (generate new-scale (- iter 1) (map + pos (list 0 ofs 0)) py))
+
+ (if (not (= dir py)) ; gen -Y
+ (generate new-scale (- iter 1) (map + pos (list 0 (- ofs) 0)) ny))
+
+ (if (not (= dir nz)) ; gen +Z
+ (generate new-scale (- iter 1) (map + pos (list 0 0 ofs)) pz))
+
+ (if (not (= dir pz)) ; gen -Z
+ (generate new-scale (- iter 1) (map + pos (list 0 0 (- ofs))) nz)))))))
+
+
+; sphere: outputs a sphere
+; sz - size of the sphere
+; pos - position ...
+(define sphere
+ (lambda (sz pos)
+ (display "s\t")
+ (for-each (lambda (x) (display x) (display " ")) pos)
+ (display "\t")
+ (display sz)
+ (display "\t0.25 0.25 0.25 50.0\t0.65")
+ (newline)))
+
+
+; start the process...
+(generate 1.0 5 `(0 0 0) 0) ; create the thing
+(display "s 0 -10002.25 0 10000 0.2 0.35 0.5 80.0 0.4") (newline) ; create floor
+(display "s 0 10100.00 0 10000 0.5 0.2 0.1 40.0 0.0") (newline) ; create ceiling
+(display "l -50 68 -50") (newline) ; and a light
+(display "l 40 40 150") (newline) ; and another light
+(display "c -9 8 -17 45 0 -1 0") ; and the camera
+(newline)
Added: SwiftApps/raytrace/c-ray-1.1/gen_fract.txt
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/gen_fract.txt (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/gen_fract.txt 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,32 @@
+
+From: "John Tsiombikas" <nuclear at siggraph.org>
+To: "Ian Mapleson" <mapesdhs at yahoo.com>
+Date: Tue, 9 May 2006 07:30:19 +0300
+
+Hello again, you wanted a benchmark that would take some time huh?
+Well, take a look at this :) Keeping in mind that the raytracer is
+dead-simple, brute-force, etc etc. Increasing the object count is
+a good way to make this much more complicated...
+
+I've made a small scheme program to generate the regular sphere-fractal
+recursively (mainly because I wanted something to do to learn scheme
+actually :) So you might as well try it out if you happen to have a
+scheme interpreter (like guile).
+
+here it is:
+http://nuclear.dnsalias.com/tmp/sfract/gen_fract.scm
+
+and here are a few pics:
+http://nuclear.dnsalias.com/tmp/sfract/
+
+I run it as:
+$ ./guile -s gen_fract.scm | ./c-ray-f -s 1024x768 -r 5 >out.ppm
+
+and with 5 iterations (change the 2nd argument to the (generate ...)
+call near the bottom if you wish to change them) it took about 14
+minutes on my Athlon64 :)
+
+--
+John Tsiombikas (Nuclear / Mindlapse)
+nuclear at siggraph.org
+http://nuclear.demoscene.gr/
Added: SwiftApps/raytrace/c-ray-1.1/scene
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/scene (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/scene 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,18 @@
+# spheres
+# position radius color shininess reflectivity
+s -1.5 -0.3 -1 0.7 1.0 0.2 0.05 50.0 0.3
+s 1.5 -0.4 0 0.6 0.1 0.85 1.0 50.0 0.4
+
+# walls
+s 0 -1000 2 999 0.1 0.2 0.6 80.0 0.8
+
+# bouncing ball
+s 0 0 2 1 1.0 0.5 0.1 60.0 0.7
+
+# lights...
+l -50 100 -50
+l 40 40 150
+
+# camera (there can be only one!)
+# position FOV target
+c 0 6 -17 45 0 -1 0
Added: SwiftApps/raytrace/c-ray-1.1/scene.jpg
===================================================================
(Binary files differ)
Property changes on: SwiftApps/raytrace/c-ray-1.1/scene.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: SwiftApps/raytrace/c-ray-1.1/scene_1024x768.jpg
===================================================================
(Binary files differ)
Property changes on: SwiftApps/raytrace/c-ray-1.1/scene_1024x768.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: SwiftApps/raytrace/c-ray-1.1/sgi.txt
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/sgi.txt (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/sgi.txt 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,81 @@
+
+Example c-ray-f/c-ray-mt compile lines for various SGIs:
+
+
+R10000/R12000 SGI O2:
+
+cc -O3 -mips4 -IPA -LNO -TARG:platform=ip32_10k -Ofast=ip32_10k c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -IPA -TARG:platform=ip32_10k -Ofast=ip32_10k c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -LNO -TARG:platform=ip32_10k -Ofast=ip32_10k c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -TARG:platform=ip32_10k -Ofast=ip32_10k c-ray-mt.c -o c-ray-mt -lm -lpthread
+
+cc -O3 -mips4 -IPA -LNO -TARG:platform=ip32_10k -Ofast=ip32_10k c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -IPA -TARG:platform=ip32_10k -Ofast=ip32_10k c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -LNO -TARG:platform=ip32_10k -Ofast=ip32_10k c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -TARG:platform=ip32_10k -Ofast=ip32_10k c-ray-f.c -o c-ray-f -lm
+
+
+R5000/R7000 SGI O2:
+
+cc -O3 -mips4 -IPA -LNO -TARG:platform=ip32_5k -Ofast=ip32_5k c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -IPA -TARG:platform=ip32_5k -Ofast=ip32_5k c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -LNO -TARG:platform=ip32_5k -Ofast=ip32_5k c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -TARG:platform=ip32_5k -Ofast=ip32_5k c-ray-mt.c -o c-ray-mt -lm -lpthread
+
+cc -O3 -mips4 -IPA -LNO -TARG:platform=ip32_5k -Ofast=ip32_5k c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -IPA -TARG:platform=ip32_5k -Ofast=ip32_5k c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -LNO -TARG:platform=ip32_5k -Ofast=ip32_5k c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -TARG:platform=ip32_5k -Ofast=ip32_5k c-ray-f.c -o c-ray-f -lm
+
+
+R10K/R12K/R14K SGI Octane/Octane2:
+
+cc -O3 -mips4 -TARG:platform=ip30 -Ofast=ip30 c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -IPA -TARG:platform=ip30 -Ofast=ip30 c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -LNO -TARG:platform=ip30 -Ofast=ip30 c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -IPA -LNO -TARG:platform=ip30 -Ofast=ip30 c-ray-f.c -o c-ray-f -lm
+
+cc -O3 -mips4 -TARG:platform=ip30 -Ofast=ip30 c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -IPA -TARG:platform=ip30 -Ofast=ip30 c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -LNO -TARG:platform=ip30 -Ofast=ip30 c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -IPA -LNO -TARG:platform=ip30 -Ofast=ip30 c-ray-mt.c -o c-ray-mt -lm -lpthread
+
+
+R4K Onyx1/Challenge:
+
+cc -O3 -mips3 -TARG:platform=ip19 -Ofast=ip19 c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips3 -IPA -TARG:platform=ip19 -Ofast=ip19 c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips3 -LNO -TARG:platform=ip19 -Ofast=ip19 c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips3 -IPA -LNO -TARG:platform=ip19 -Ofast=ip19 c-ray-f.c -o c-ray-f -lm
+
+cc -O3 -mips3 -TARG:platform=ip19 -Ofast=ip19 c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips3 -IPA -TARG:platform=ip19 -Ofast=ip19 c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips3 -LNO -TARG:platform=ip19 -Ofast=ip19 c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips3 -IPA -LNO -TARG:platform=ip19 -Ofast=ip19 c-ray-mt.c -o c-ray-mt -lm -lpthread
+
+
+R10K Onyx1/Challenge:
+
+cc -O3 -mips4 -TARG:platform=ip25 -Ofast=ip25 c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -IPA -TARG:platform=ip25 -Ofast=ip25 c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -LNO -TARG:platform=ip25 -Ofast=ip25 c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -IPA -LNO -TARG:platform=ip25 -Ofast=ip25 c-ray-f.c -o c-ray-f -lm
+
+cc -O3 -mips4 -TARG:platform=ip25 -Ofast=ip25 c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -IPA -TARG:platform=ip25 -Ofast=ip25 c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -LNO -TARG:platform=ip25 -Ofast=ip25 c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -IPA -LNO -TARG:platform=ip25 -Ofast=ip25 c-ray-mt.c -o c-ray-mt -lm -lpthread
+
+
+R10K Indigo2:
+
+cc -O3 -mips4 -TARG:platform=ip28 -Ofast=ip28 c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -IPA -TARG:platform=ip28 -Ofast=ip28 c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -LNO -TARG:platform=ip28 -Ofast=ip28 c-ray-f.c -o c-ray-f -lm
+cc -O3 -mips4 -IPA -LNO -TARG:platform=ip28 -Ofast=ip28 c-ray-f.c -o c-ray-f -lm
+
+cc -O3 -mips4 -TARG:platform=ip28 -Ofast=ip28 c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -IPA -TARG:platform=ip28 -Ofast=ip28 c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -LNO -TARG:platform=ip28 -Ofast=ip28 c-ray-mt.c -o c-ray-mt -lm -lpthread
+cc -O3 -mips4 -IPA -LNO -TARG:platform=ip28 -Ofast=ip28 c-ray-mt.c -o c-ray-mt -lm -lpthread
+
Added: SwiftApps/raytrace/c-ray-1.1/sphfract
===================================================================
--- SwiftApps/raytrace/c-ray-1.1/sphfract (rev 0)
+++ SwiftApps/raytrace/c-ray-1.1/sphfract 2014-02-19 21:10:45 UTC (rev 7613)
@@ -0,0 +1,192 @@
+s 0 0 0 1.0 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 0 0.4 0.25 0.25 0.25 50.0 0.65
+s 1.96 0 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 2.184 0 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.96 0.224 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.96 -0.224 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.96 0 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.96 0 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.56 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 1.624 0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.176 0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.784 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.56 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.56 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.56 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 1.624 -0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.176 -0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.784 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.56 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.56 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 1.624 0 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.176 0 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.224 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.224 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 -0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 1.624 0 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.176 0 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0.224 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 -0.224 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 1.4 0 -0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 0 0.4 0.25 0.25 0.25 50.0 0.65
+s -1.96 0 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -2.184 0 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.96 0.224 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.96 -0.224 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.96 0 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.96 0 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.56 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -1.176 0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.624 0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.784 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.56 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.56 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.56 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -1.176 -0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.624 -0.56 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.784 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.56 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.56 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s -1.176 0 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.624 0 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.224 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.224 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 -0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s -1.176 0 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.624 0 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0.224 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 -0.224 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -1.4 0 -0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 0 0.4 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.4 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.784 1.4 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.624 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.176 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.4 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 1.4 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.4 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -0.784 1.4 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.624 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.176 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.4 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 1.4 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.96 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 1.96 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 1.96 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 2.184 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.96 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.96 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 1.4 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 1.4 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.624 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.176 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 -0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 1.4 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 1.4 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.624 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.176 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 1.4 -0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 0 0.4 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.4 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.784 -1.4 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.176 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.624 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.4 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -1.4 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.4 0 0.16 0.25 0.25 0.25 50.0 0.65
+s -0.784 -1.4 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.176 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.624 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.4 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -1.4 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.96 0 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -1.96 0 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -1.96 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -2.184 0 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.96 0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.96 -0.224 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -1.4 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -1.4 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.176 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.624 0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 -0.56 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -1.4 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -1.4 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.176 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.624 -0.56 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -1.4 -0.784 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 1.4 0.4 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.784 0 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0.224 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -0.224 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s -0.784 0 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0.224 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -0.224 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 0.56 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 0.56 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.784 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -0.56 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -0.56 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.784 1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 1.96 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 0 1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 0 1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.224 1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.224 1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 2.184 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 -1.4 0.4 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 -1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.784 0 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0.224 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 -0.224 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 -1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0.56 0 -1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 -1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s -0.784 0 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0.224 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 -0.224 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 -1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.56 0 -1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 -1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 0.56 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 0.56 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.784 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 -1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.56 -1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 -1.4 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 -0.56 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 -0.56 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.784 -1.4 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 -1.176 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.56 -1.624 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 -1.96 0.16 0.25 0.25 0.25 50.0 0.65
+s 0.224 0 -1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s -0.224 0 -1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0.224 -1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -0.224 -1.96 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 0 -2.184 0.064 0.25 0.25 0.25 50.0 0.65
+s 0 -10002.25 0 10000 0.2 0.35 0.5 80.0 0.4
+s 0 10100.00 0 10000 0.5 0.2 0.1 40.0 0.0
+l -50 68 -50
+l 40 40 150
+c -7 6 -12 45 0 -0.65 0
Added: SwiftApps/raytrace/c-ray-1.1/sphfract.jpg
===================================================================
(Binary files differ)
Property changes on: SwiftApps/raytrace/c-ray-1.1/sphfract.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: SwiftApps/raytrace/c-ray-1.1/x86/c-ray-f.exe
===================================================================
(Binary files differ)
Property changes on: SwiftApps/raytrace/c-ray-1.1/x86/c-ray-f.exe
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: SwiftApps/raytrace/c-ray-1.1.tar.gz
===================================================================
(Binary files differ)
Property changes on: SwiftApps/raytrace/c-ray-1.1.tar.gz
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: SwiftApps/raytrace/c-ray-swift.tgz
===================================================================
(Binary files differ)
Property changes on: SwiftApps/raytrace/c-ray-swift.tgz
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: SwiftApps/swift-galaxy/swift/swiftforeach.xml
===================================================================
--- SwiftApps/swift-galaxy/swift/swiftforeach.xml 2014-02-19 20:30:44 UTC (rev 7612)
+++ SwiftApps/swift-galaxy/swift/swiftforeach.xml 2014-02-19 21:10:45 UTC (rev 7613)
@@ -88,7 +88,7 @@
</param>
<!--<param format="sh,binexec" name="exec" type="data" label="Executable"/>-->
- <param name="exec" type="data" label="Executable"/>
+ <param name="exec" type="data" label="Executable" help="select executable" />
<conditional name="rangeorlist">
<param name="rl" type="select" label="Select range or list">
@@ -104,7 +104,7 @@
</when>
<when value="lst">
- <param format="data" name="listfile" type="data" label="List file"/>
+ <param format="data" name="listfile" type="data" label="List file" help="Select list file"/>
</when>
<when value="tst">
More information about the Swift-commit
mailing list