diff --git a/PROJ1_WIN/565Pathtracer.sln b/PROJ1_WIN/565Pathtracer.sln
index 5cc5973..fe3d47c 100755
--- a/PROJ1_WIN/565Pathtracer.sln
+++ b/PROJ1_WIN/565Pathtracer.sln
@@ -1,32 +1,30 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "565Pathtracer", "565Pathtracer\565Pathtracer.vcxproj", "{FF21CA49-522E-4E86-B508-EE515B248FC4}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "565Pathtracer", "565Pathtracer\565Raytracer.vcxproj", "{FF21CA49-522E-4E86-B508-EE515B248FC4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug (v4.0)|Win32 = Debug (v4.0)|Win32
- Debug (v4.0)|x64 = Debug (v4.0)|x64
Debug (v5.5)|Win32 = Debug (v5.5)|Win32
- Debug (v5.5)|x64 = Debug (v5.5)|x64
- Release (v4.0)|Win32 = Release (v4.0)|Win32
- Release (v4.0)|x64 = Release (v4.0)|x64
+ Debug(v4.0)|Win32 = Debug(v4.0)|Win32
+ Debug(v5.0)|Win32 = Debug(v5.0)|Win32
+ Debug|Win32 = Debug|Win32
Release (v5.5)|Win32 = Release (v5.5)|Win32
- Release (v5.5)|x64 = Release (v5.5)|x64
+ Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {FF21CA49-522E-4E86-B508-EE515B248FC4}.Debug (v4.0)|Win32.ActiveCfg = Debug|Win32
- {FF21CA49-522E-4E86-B508-EE515B248FC4}.Debug (v4.0)|Win32.Build.0 = Debug|Win32
- {FF21CA49-522E-4E86-B508-EE515B248FC4}.Debug (v4.0)|x64.ActiveCfg = Debug|Win32
{FF21CA49-522E-4E86-B508-EE515B248FC4}.Debug (v5.5)|Win32.ActiveCfg = Debug (v5.5)|Win32
{FF21CA49-522E-4E86-B508-EE515B248FC4}.Debug (v5.5)|Win32.Build.0 = Debug (v5.5)|Win32
- {FF21CA49-522E-4E86-B508-EE515B248FC4}.Debug (v5.5)|x64.ActiveCfg = Debug (v5.5)|Win32
- {FF21CA49-522E-4E86-B508-EE515B248FC4}.Release (v4.0)|Win32.ActiveCfg = Release|Win32
- {FF21CA49-522E-4E86-B508-EE515B248FC4}.Release (v4.0)|Win32.Build.0 = Release|Win32
- {FF21CA49-522E-4E86-B508-EE515B248FC4}.Release (v4.0)|x64.ActiveCfg = Release|Win32
+ {FF21CA49-522E-4E86-B508-EE515B248FC4}.Debug(v4.0)|Win32.ActiveCfg = Debug|Win32
+ {FF21CA49-522E-4E86-B508-EE515B248FC4}.Debug(v4.0)|Win32.Build.0 = Debug|Win32
+ {FF21CA49-522E-4E86-B508-EE515B248FC4}.Debug(v5.0)|Win32.ActiveCfg = Debug (v5.5)|Win32
+ {FF21CA49-522E-4E86-B508-EE515B248FC4}.Debug(v5.0)|Win32.Build.0 = Debug (v5.5)|Win32
+ {FF21CA49-522E-4E86-B508-EE515B248FC4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FF21CA49-522E-4E86-B508-EE515B248FC4}.Debug|Win32.Build.0 = Debug|Win32
{FF21CA49-522E-4E86-B508-EE515B248FC4}.Release (v5.5)|Win32.ActiveCfg = Release (v5.5)|Win32
{FF21CA49-522E-4E86-B508-EE515B248FC4}.Release (v5.5)|Win32.Build.0 = Release (v5.5)|Win32
- {FF21CA49-522E-4E86-B508-EE515B248FC4}.Release (v5.5)|x64.ActiveCfg = Release (v5.5)|Win32
+ {FF21CA49-522E-4E86-B508-EE515B248FC4}.Release|Win32.ActiveCfg = Release|Win32
+ {FF21CA49-522E-4E86-B508-EE515B248FC4}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/PROJ1_WIN/565Pathtracer.suo b/PROJ1_WIN/565Pathtracer.suo
new file mode 100644
index 0000000..5da8fb4
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer.suo differ
diff --git a/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj b/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj
index 4515c57..0bce96b 100755
--- a/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj
+++ b/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj
@@ -75,7 +75,7 @@
-
+
@@ -146,6 +146,9 @@
$(ProjectDir)$(Platform)/$(Configuration)/%(Filename)%(Extension).obj
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include;C:/ProgramData/NVIDIA Corporation/CUDA Samples/v5.5/common/inc;../shared/glew/includes;../shared/freeglut/includes
+ compute_30,sm_30
+ true
+ true
@@ -196,10 +199,13 @@
$(ProjectDir)$(Platform)/$(Configuration)/%(Filename)%(Extension).obj
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include;C:/ProgramData/NVIDIA Corporation/CUDA Samples/v5.5/common/inc;../shared/glew/includes;../shared/freeglut/includes
+ compute_30,sm_30
+ true
+ true
-
+
-
+
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj.yuqin.nvuser b/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj.yuqin.nvuser
new file mode 100644
index 0000000..a1d069c
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj.yuqin.nvuser
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/565Raytracer.filters b/PROJ1_WIN/565Pathtracer/565Raytracer.filters
new file mode 100644
index 0000000..9c1f97f
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/565Raytracer.filters
@@ -0,0 +1,41 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/565Raytracer.user b/PROJ1_WIN/565Pathtracer/565Raytracer.user
new file mode 100644
index 0000000..ace9a86
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/565Raytracer.user
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/565Raytracer.vcxproj b/PROJ1_WIN/565Pathtracer/565Raytracer.vcxproj
new file mode 100644
index 0000000..563520e
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/565Raytracer.vcxproj
@@ -0,0 +1,215 @@
+
+
+
+
+ Debug (v5.5)
+ Win32
+
+
+ Debug
+ Win32
+
+
+ Release (v5.5)
+ Win32
+
+
+ Release
+ Win32
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Document
+ true
+ true
+ compute_20,sm_20
+
+
+
+ {FF21CA49-522E-4E86-B508-EE515B248FC4}
+ Win32Proj
+ 565Pathtracer
+ 565Pathtracer
+
+
+
+ Application
+ true
+ Unicode
+
+
+ Application
+ true
+ Unicode
+
+
+ Application
+ false
+ true
+ Unicode
+
+
+ Application
+ false
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+
+
+
+ Level3
+ Disabled
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include;C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\common\inc;../shared/glew/include;../shared/freeglut/include;%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ ../shared/glew/lib;../shared/freeglut/lib;%(AdditionalLibraryDirectories)
+ cudart.lib; glew32.lib;glu32.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ mainCRTStartup
+
+
+
+
+ $(ProjectDir)$(Platform)/$(Configuration)/%(Filename)%(Extension).obj
+ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include;C:/ProgramData/NVIDIA Corporation/NVIDIA GPU Computing SDK 4.0/C/common/inc;../shared/glew/includes;../shared/freeglut/includes
+ compute_10,sm_10
+
+
+
+
+
+
+ Level3
+ Disabled
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc;../shared/glew/include;../shared/freeglut/include;../shared/glfw/include;%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ ../shared/glew/lib;../shared/freeglut/lib;%(AdditionalLibraryDirectories)
+ cudart.lib; glew32.lib;glu32.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ mainCRTStartup
+
+
+
+
+ $(ProjectDir)$(Platform)/$(Configuration)/%(Filename)%(Extension).obj
+ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include;C:/ProgramData/NVIDIA Corporation/CUDA Samples/v5.5/common/inc;../shared/glew/includes;../shared/freeglut/includes
+ compute_30,sm_30
+ true
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include;C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\common\inc;../shared/glew/include;../shared/freeglut/include;%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ true
+ true
+ ../shared/glew/lib;../shared/freeglut/lib;%(AdditionalLibraryDirectories)
+ cudart.lib; glew32.lib;glu32.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ mainCRTStartup
+
+
+ $(ProjectDir)$(Platform)/$(Configuration)/%(Filename)%(Extension).obj
+ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include;C:/ProgramData/NVIDIA Corporation/NVIDIA GPU Computing SDK 4.0/C/common/inc;../shared/glew/includes;../shared/freeglut/includes
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc;../shared/glew/include;../shared/freeglut/include;%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ true
+ true
+ ../shared/glew/lib;../shared/freeglut/lib;%(AdditionalLibraryDirectories)
+ cudart.lib; glew32.lib;glu32.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ mainCRTStartup
+
+
+ $(ProjectDir)$(Platform)/$(Configuration)/%(Filename)%(Extension).obj
+ C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include;C:/ProgramData/NVIDIA Corporation/CUDA Samples/v5.5/common/inc;../shared/glew/includes;../shared/freeglut/includes
+ compute_30,sm_30
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/565Raytracer.vcxproj.filters b/PROJ1_WIN/565Pathtracer/565Raytracer.vcxproj.filters
new file mode 100644
index 0000000..e07e07f
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/565Raytracer.vcxproj.filters
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+ stb_image
+
+
+ stb_image
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ stb_image
+
+
+ stb_image
+
+
+
+
+ {011aa553-95e8-4e59-b7ff-1bb89aebe21d}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/565Raytracer.vcxproj.user b/PROJ1_WIN/565Pathtracer/565Raytracer.vcxproj.user
new file mode 100644
index 0000000..9973347
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/565Raytracer.vcxproj.user
@@ -0,0 +1,19 @@
+
+
+
+ scene=../../scenes/sampleScene.txt
+ WindowsLocalDebugger
+
+
+ scene=../../scenes/sampleScene.txt
+ WindowsLocalDebugger
+
+
+ scene=../../scenes/sampleScene.txt
+ WindowsLocalDebugger
+
+
+ scene=../../scenes/sampleScene.txt
+ WindowsLocalDebugger
+
+
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/565Raytracer.vcxproj.yuqin.nvuser b/PROJ1_WIN/565Pathtracer/565Raytracer.vcxproj.yuqin.nvuser
new file mode 100644
index 0000000..a1d069c
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/565Raytracer.vcxproj.yuqin.nvuser
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/8000.DOF.bmp b/PROJ1_WIN/565Pathtracer/8000.DOF.bmp
new file mode 100644
index 0000000..7035076
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/8000.DOF.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/Win32/Debug (v5.5)/raytraceKernel.cu.obj b/PROJ1_WIN/565Pathtracer/Win32/Debug (v5.5)/raytraceKernel.cu.obj
new file mode 100644
index 0000000..5509efc
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Win32/Debug (v5.5)/raytraceKernel.cu.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Win32/Debug/raytraceKernel.cu.obj b/PROJ1_WIN/565Pathtracer/Win32/Debug/raytraceKernel.cu.obj
new file mode 100644
index 0000000..ac21fce
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Win32/Debug/raytraceKernel.cu.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Win32/Release (v5.5)/raytraceKernel.cu.obj b/PROJ1_WIN/565Pathtracer/Win32/Release (v5.5)/raytraceKernel.cu.obj
new file mode 100644
index 0000000..09eae4b
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Win32/Release (v5.5)/raytraceKernel.cu.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/pathTracer.0.bmp b/PROJ1_WIN/565Pathtracer/pathTracer.0.bmp
new file mode 100644
index 0000000..5988a01
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/pathTracer.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/vc100.pdb b/PROJ1_WIN/565Pathtracer/vc100.pdb
new file mode 100644
index 0000000..be33446
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/vc100.pdb differ
diff --git a/PROJ1_WIN/src/raytraceKernel.cu.deps b/PROJ1_WIN/src/raytraceKernel.cu.deps
new file mode 100644
index 0000000..025f5d9
--- /dev/null
+++ b/PROJ1_WIN/src/raytraceKernel.cu.deps
@@ -0,0 +1,1207 @@
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda_runtime.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_config.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\sal.h
+c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\vadefs.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\limits.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stddef.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\channel_descriptor.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_runtime_api.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_device_runtime_api.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_runtime_api.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\common_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\time.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\wtime.inl
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\time.inl
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\math_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdlib.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cmath
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\yvals.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\use_ansi.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cstdlib
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\channel_descriptor.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\channel_descriptor.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_11_atomic_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_12_atomic_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_13_double_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_20_atomic_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_32_atomic_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_35_atomic_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_32_atomic_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_20_intrinsics.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_30_intrinsics.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_32_intrinsics.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_35_intrinsics.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_32_intrinsics.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_fetch_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_indirect_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_indirect_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_functions.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_launch_parameters.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\swprintf.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\sceneStructs.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm/glm.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core/_fixes.hpp
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\climits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cfloat
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\float.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtwrn.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\limits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ymath.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cwchar
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\wchar.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xstddef
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cstddef
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cstdio
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core/setup.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\./core/_detail.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\setup.hpp
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cassert
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\assert.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\./core/type.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_half.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_half.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_detail.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_float.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_half.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\setup.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_int.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\setup.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_detail.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_gentype.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_size.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_vec1.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_vec.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_gentype.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_float.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_int.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_size.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_swizzle.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_swizzle_func.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_vec1.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_vec2.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_vec.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_float.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_int.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_size.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_swizzle.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_vec2.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_vec3.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_vec.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_float.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_int.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_size.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_swizzle.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_vec3.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_vec4.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_vec.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_float.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_int.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_size.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_swizzle.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_vec4.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat2x2.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_gentype.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat2x2.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat2x3.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat2x3.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat2x4.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat2x4.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat3x2.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat3x2.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat3x3.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat3x3.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat3x4.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat3x4.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat4x2.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat4x2.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat4x3.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat4x3.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat4x4.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\type_mat4x4.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\./core/func_trigonometric.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\func_trigonometric.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_vectorize.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\./core/func_exponential.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\func_exponential.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_vectorize.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\./core/func_common.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_fixes.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\func_common.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_vectorize.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\./core/func_packing.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\func_packing.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\./core/func_geometric.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\func_geometric.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_vectorize.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\./core/func_matrix.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\func_matrix.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_vectorize.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\./core/func_vector_relational.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_detail.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\func_vector_relational.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\./core/func_integer.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\func_integer.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\_vectorize.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\./core/func_noise.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core\func_noise.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\./core/_swizzle.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\cudaMat4.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm/glm.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core/_fixes.hpp
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda_runtime.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda_runtime.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\istream
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ios
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xlocnum
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\streambuf
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xiosbase
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xlocale
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cstring
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdexcept
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\exception
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\eh.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\malloc.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xstring
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xmemory
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\new
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xutility
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\iosfwd
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdbg.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\type_traits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xtr1common
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\typeinfo
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xlocinfo
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xlocinfo.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ctype.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\locale.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xdebug
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\system_error
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cerrno
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\errno.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\share.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\utilities.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm/glm.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core/_fixes.hpp
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\algorithm
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\memory
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\intrin.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\setjmp.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\immintrin.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\wmmintrin.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\nmmintrin.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\smmintrin.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\tmmintrin.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\pmmintrin.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\emmintrin.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xmmintrin.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\mmintrin.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ammintrin.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\mm3dnow.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\mmintrin.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\iterator
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\sstream
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\vector
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfunctional
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\cudaMat4.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/host_vector.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/config.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/simple_defines.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/compiler.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/host_system.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/device_system.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/host_device.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\host_defines.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/debug.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/compiler_fence.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/forceinline.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/vector_base.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/normal_iterator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/iterator_adaptor.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/iterator_facade.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/has_trivial_assign.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/iterator_facade_category.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/host_system_tag.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/tag.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/device_system_tag.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/tag.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/any_system_tag.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/iterator_categories.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/universal_categories.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/iterator_traversal_tags.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/is_iterator_category.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/iterator_category_to_traversal.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/iterator_category_to_system.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/distance_from_result.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/use_default.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/iterator_adaptor_base.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/iterator_traits.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/iterator_traits.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/is_trivial_iterator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/pointer_traits.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/is_metafunction_defined.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/has_nested_type.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/reverse_iterator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/reverse_iterator_base.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/reverse_iterator.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/contiguous_storage.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/contiguous_storage.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/swap.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/vector_base.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/copy.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/select_system.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/minimum_system.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/minimum_type.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/type_traits.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/tag.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/copy.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/functional.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\functional
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xrefwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xawrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xawrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/placeholder.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/actor.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/tuple.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/tuple.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/pair.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/pair.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/value.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/composite.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/assignment_operator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/operator_adaptors.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/result_of.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/function_traits.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/actor.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/argument.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/arithmetic_operators.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/relational_operators.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/logical_operators.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/bitwise_operators.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/compound_assignment_operators.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/comma_operator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/internal_functional.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/transform.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/transform.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/transform.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/transform.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/for_each.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/for_each.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/for_each.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/static_assert.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/adl_helper.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/memory.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/memory.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/pointer.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/reference_forward_declaration.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/pointer.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/reference.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/reference.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/memory.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/memory.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/malloc_and_free_adl_helper.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/malloc_and_free.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/raw_pointer_cast.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/malloc_and_free.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/guarded_cuda_runtime_api.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda_runtime_api.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/system_error.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/error_code.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/errno.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\iostream
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/error_category.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/error_code.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/error_condition.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/system_error.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/error.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\driver_types.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/error.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/bad_alloc.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/raw_reference_cast.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/tuple_of_iterator_references.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/raw_reference_cast.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/tuple_transform.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/tuple_meta_transform.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/malloc_allocator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/tagged_allocator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/tagged_allocator.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/malloc_allocator.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/memory.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/algorithm.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/adjacent_difference.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/adjacent_difference.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/binary_search.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/binary_search.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/advance.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/advance.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/advance.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/advance.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/distance.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/distance.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/distance.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/distance.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/function.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/copy.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/dispatch/is_trivial_copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/general_copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/trivial_copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/extrema.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/extrema.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/find.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/find.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/for_each.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/for_each.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/merge.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/merge.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/merge.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/partition.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/partition.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/temporary_array.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/retag.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/retag.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/tagged_iterator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/temporary_allocator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/temporary_allocator.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/no_throw_allocator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/temporary_array.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/reduce.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/reduce.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/reduce_by_key.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/reduce_by_key.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/algorithm/intermediate_type_from_function_and_iterators.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/iterator/is_output_iterator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/any_assign.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/remove.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/remove.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/scan.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/scan.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/scan_by_key.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/scan_by_key.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/set_operations.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/set_operations.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/sort.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/sort.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/sort.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/reverse.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/reverse.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/reverse.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/reverse.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/swap.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/swap.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/swap_ranges.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/swap_ranges.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/swap_ranges.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/zip_iterator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/zip_iterator_base.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/minimum_category.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/zip_iterator.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/stable_merge_sort.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/stable_merge_sort.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/insertion_sort.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/copy_backward.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/stable_radix_sort.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/stable_radix_sort.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/copy_if.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/copy_if.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/copy_if.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/copy_if.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/scan.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/scan.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scan.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scan.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scan_by_key.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scan_by_key.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/replace.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/replace.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/replace.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/replace.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/scatter.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/scatter.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scatter.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scatter.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/permutation_iterator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/permutation_iterator_base.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/cstdint.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/unique.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/unique.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/unique_by_key.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/unique_by_key.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/memory.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/memory.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/memory.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/algorithm.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/for_each.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/for_each.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/minmax.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/launch_closure.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/arch.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/arch.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system_error.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/util/blocking.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/launch_closure.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/synchronize.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/synchronize.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/launch_calculator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/launch_calculator.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy_device_to_device.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy_device_to_device.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy_cross_system.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy_cross_system.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/trivial_copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/trivial_copy.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/trivial_copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/trivial_copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/reduce.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/reduce.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/extern_shared_ptr.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/reduce.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/scan.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/scan.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/fast_scan.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\thrust\system\cuda\detail\detail\fast_scan.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/reduce_intervals.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/reduce_intervals.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/decompose.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/default_decomposition.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/default_decomposition.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/sort.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/sort.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/stable_merge_sort.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/stable_merge_sort.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/device_ptr.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/memory.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/device_ptr.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/device_reference.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/device_reference.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/mpl/math.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/merging_sort.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/stable_radix_sort.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/stable_radix_sort.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/gather.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/gather.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/gather.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/gather.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/sequence.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/sequence.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/sequence.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/sequence.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/counting_iterator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/counting_iterator.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/numeric_traits.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/util/align.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/b40c/radixsort_api.h
+C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\thrust\system\cuda\detail\detail\b40c\radixsort_reduction_kernel.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\thrust\system\cuda\detail\detail\b40c\radixsort_kernel_common.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\thrust\system\cuda\detail\detail\b40c\kernel_utils.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\thrust\system\cuda\detail\detail\b40c\vector_types.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\vector_types.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\thrust\system\cuda\detail\detail\b40c\radixsort_key_conversion.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\thrust\system\cuda\detail\detail\b40c\radixsort_spine_kernel.h
+c:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\thrust\system\cuda\detail\detail\b40c\radixsort_scanscatter_kernel.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/trivial_sequence.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/adjacent_difference.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/adjacent_difference.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/transform_iterator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/transform_iterator.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy_if.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy_if.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/inclusive_scan.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/fill.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/fill.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/generate.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/generate.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/generate.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/generate.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/extrema.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/extrema.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/extrema.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/extrema.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/reduce.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/reduce.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/reduce.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/reduce.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/reduce_by_key.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/reduce_by_key.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/transform_reduce.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/transform_reduce.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/transform_reduce.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/transform_reduce.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/merge.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/merge.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/merge.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/merge.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scalar/binary_search.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scalar/binary_search.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/get_set_operation_splitter_ranks.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/get_set_operation_splitter_ranks.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scalar/select.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scalar/select.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/binary_search.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/binary_search.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/binary_search.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/binary_search.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/reduce_by_key.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/reduce_by_key.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/iterator/is_discard_iterator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/discard_iterator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/discard_iterator_base.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/set_operations.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/set_difference.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/set_difference.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/set_difference.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/split_for_set_operation.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/split_for_set_operation.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/rank_iterator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/set_operation.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/set_operation.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/set_intersection.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/set_intersection.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/set_intersection.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/set_symmetric_difference.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/set_symmetric_difference.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/set_symmetric_difference.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/set_union.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/set_union.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/set_union.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/overlapped_copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/equal.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/equal.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/equal.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/equal.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/mismatch.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/mismatch.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/mismatch.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/mismatch.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/find.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/find.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/find.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/find.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/uninitialized_fill.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/uninitialized_fill.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/uninitialized_fill.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/uninitialized_fill.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/fill.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/fill.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/fill.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/uninitialized_copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/uninitialized_copy.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/uninitialized_copy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/uninitialized_copy.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/destroy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/dispatch/destroy.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/host_vector.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/device_vector.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/device_malloc_allocator.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/device_malloc.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/device_malloc.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/device_free.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/device_free.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/device_vector.inl
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm/glm.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core/_fixes.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\utilities.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\raytraceKernel.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/discard_block_engine.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/random_core_access.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/discard_block_engine.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/linear_congruential_engine.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/linear_congruential_engine_discard.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/mod.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/linear_congruential_engine.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/linear_feedback_shift_engine.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/linear_feedback_shift_engine_wordmask.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/linear_feedback_shift_engine.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/subtract_with_carry_engine.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/subtract_with_carry_engine.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/xor_combine_engine.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/xor_combine_engine_max.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/xor_combine_engine.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/uniform_int_distribution.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/integer_traits.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/uniform_int_distribution.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/uniform_real_distribution.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/uniform_real_distribution.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/normal_distribution.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/normal_distribution.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\sceneStructs.h
+C:/ProgramData/NVIDIA Corporation/CUDA Samples/v5.5/common/inc\helper_math.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda_runtime.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\intersections.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\sceneStructs.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\cudaMat4.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm/glm.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\glm\core/_fixes.hpp
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\utilities.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\interactions.h
+d:\a_upenn\2013fall\cis565\projects2013\project2-pathtracer\src\intersections.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/remove.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/remove.inl
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/remove.h
+C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/remove.inl
+C:/ProgramData/NVIDIA Corporation/CUDA Samples/v5.5/common/inc\helper_math.h
diff --git a/README.md b/README.md
index 324bd3e..b175eae 100755
--- a/README.md
+++ b/README.md
@@ -1,133 +1,47 @@
-------------------------------------------------------------------------------
CIS565: Project 2: CUDA Pathtracer
-------------------------------------------------------------------------------
-Fall 2013
+Yuqin Shao
-------------------------------------------------------------------------------
-Due Wednesday, 10/02/13
--------------------------------------------------------------------------------
-
--------------------------------------------------------------------------------
-NOTE:
--------------------------------------------------------------------------------
-This project requires an NVIDIA graphics card with CUDA capability! Any card after the Geforce 8xxx series will work. If you do not have an NVIDIA graphics card in the machine you are working on, feel free to use any machine in the SIG Lab or in Moore100 labs. All machines in the SIG Lab and Moore100 are equipped with CUDA capable NVIDIA graphics cards. If this too proves to be a problem, please contact Patrick or Liam as soon as possible.
-
--------------------------------------------------------------------------------
-INTRODUCTION:
--------------------------------------------------------------------------------
-In this project, you will extend your raytracer from Project 1 into a full CUDA based global illumination pathtracer.
-
-For this project, you may either choose to continue working off of your codebase from Project 1, or you may choose to use the included basecode in this repository. The basecode for Project 2 is the same as the basecode for Project 1, but with some missing components you will need filled in, such as the intersection testing and camera raycasting methods.
-
-How you choose to extend your raytracer into a pathtracer is a fairly open-ended problem; the supplied basecode is meant to serve as one possible set of guidelines for doing so, but you may choose any approach you want in your actual implementation, including completely scrapping the provided basecode in favor of your own from-scratch solution.
-
--------------------------------------------------------------------------------
-CONTENTS:
--------------------------------------------------------------------------------
-The Project2 root directory contains the following subdirectories:
-
-* src/ contains the source code for the project. Both the Windows Visual Studio solution and the OSX makefile reference this folder for all source; the base source code compiles on OSX and Windows without modification.
-* scenes/ contains an example scene description file.
-* renders/ contains two example renders: the raytraced render from Project 1 (GI_no.bmp), and the same scene rendered with global illumination (GI_yes.bmp).
-* PROJ1_WIN/ contains a Windows Visual Studio 2010 project and all dependencies needed for building and running on Windows 7.
-* PROJ1_OSX/ contains a OSX makefile, run script, and all dependencies needed for building and running on Mac OSX 10.8.
-* PROJ1_NIX/ contains a Linux makefile for building and running on Ubuntu
- 12.04 LTS. Note that you will need to set the following environment
- variables:
-
- - PATH=$PATH:/usr/local/cuda-5.5/bin
- - LD_LIBRARY_PATH=/usr/local/cuda-5.5/lib64:/lib
-
-The projects build and run exactly the same way as in Project0 and Project1.
-------------------------------------------------------------------------------
-REQUIREMENTS:
+Features
-------------------------------------------------------------------------------
-In this project, you are given code for:
-
-* All of the basecode from Project 1, plus:
-* Intersection testing code for spheres and cubes
-* Code for raycasting from the camera
-
-You will need to implement the following features. A number of these required features you may have already implemented in Project 1. If you have, you are ahead of the curve and have less work to do!
-
* Full global illumination (including soft shadows, color bleeding, etc.) by pathtracing rays through the scene.
* Properly accumulating emittance and colors to generate a final image
* Supersampled antialiasing
* Parallelization by ray instead of by pixel via stream compaction (you may use Thrust for this).
* Perfect specular reflection
-
-You are also required to implement at least two of the following features. Some of these features you may have already implemented in Project 1. If you have, you may NOT resubmit those features and instead must pick two new ones to implement.
-
-* From scratch stream compaction (no Thrust).
-* Additional BRDF models, such as Cook-Torrance, Ward, etc. Each BRDF model may count as a separate feature.
-* Texture mapping
-* Bump mapping
-* Translational motion blur
-* Fresnel-based Refraction, i.e. glass
-* OBJ Mesh loading and rendering without KD-Tree
+* Fresnel-based Refraction
* Interactive camera
-* Integrate an existing stackless KD-Tree library, such as CUKD (https://github.com/unvirtual/cukd)
* Depth of field
-Alternatively, implementing just one of the following features can satisfy the "pick two" feature requirement, since these are correspondingly more difficult problems:
-
-* Physically based subsurface scattering and transmission
-* Implement and integrate your own stackless KD-Tree from scratch.
-* Displacement mapping
-* Deformational motion blur
-
-As yet another alternative, if you have a feature or features you really want to implement that are not on this list, let us know, and we'll probably say yes!
-
--------------------------------------------------------------------------------
-NOTES ON GLM:
+------------------------------------------------------------------------------
+Video Demo
-------------------------------------------------------------------------------
-This project uses GLM, the GL Math library, for linear algebra. You need to know two important points on how GLM is used in this project:
-
-* In this project, indices in GLM vectors (such as vec3, vec4), are accessed via swizzling. So, instead of v[0], v.x is used, and instead of v[1], v.y is used, and so on and so forth.
-* GLM Matrix operations work fine on NVIDIA Fermi cards and later, but pre-Fermi cards do not play nice with GLM matrices. As such, in this project, GLM matrices are replaced with a custom matrix struct, called a cudaMat4, found in cudaMat4.h. A custom function for multiplying glm::vec4s and cudaMat4s is provided as multiplyMV() in intersections.h.
+http://youtu.be/0hghD1Zi7qU
-------------------------------------------------------------------------------
-README
+Screen Shots
-------------------------------------------------------------------------------
-All students must replace or augment the contents of this Readme.md in a clear
-manner with the following:
+*With depth of field, refraction, reflection,8000 iterations, 10 max bounce depth
+![Alt test](/renders/8000.DOF.bmp "")
-* A brief description of the project and the specific features you implemented.
-* At least one screenshot of your project running.
-* A 30 second or longer video of your project running. To create the video you
- can use http://www.microsoft.com/expression/products/Encoder4_Overview.aspx
-* A performance evaluation (described in detail below).
+*With depth of field, refraction,reflection,6000 iterations, 10 max bounce depth
+![Alt test](/renders/pathTracer.DOF2.6000.bmp " ")
--------------------------------------------------------------------------------
-PERFORMANCE EVALUATION
--------------------------------------------------------------------------------
-The performance evaluation is where you will investigate how to make your CUDA
-programs more efficient using the skills you've learned in class. You must have
-performed at least one experiment on your code to investigate the positive or
-negative effects on performance.
-
-One such experiment would be to investigate the performance increase involved
-with adding a spatial data-structure to your scene data.
-
-Another idea could be looking at the change in timing between various block
-sizes.
+*No DOF, 3000 iterations, refraction,reflection,3000 iterations, 10 max bounce depth
+![Alt test](/renders/pathTracer.refraction.10.3000.bmp " ")
-A good metric to track would be number of rays per second, or frames per
-second, or number of objects displayable at 60fps.
-
-We encourage you to get creative with your tweaks. Consider places in your code
-that could be considered bottlenecks and try to improve them.
-
-Each student should provide no more than a one page summary of their
-optimizations along with tables and or graphs to visually explain any
-performance differences.
+*No DOF, refraction, 500 iterations, 5 max bounce depth
+![Alt test](/renders/pathTracer.refraction.5.500.bmp " ")
+*Strange bug, bug disappears after I removed the sphere
+![Alt test](/renders/FirstImage.JPG "")
-------------------------------------------------------------------------------
-THIRD PARTY CODE POLICY
+PERFORMANCE EVALUATION
-------------------------------------------------------------------------------
-* Use of any third-party code must be approved by asking on the Google group. If it is approved, all students are welcome to use it. Generally, we approve use of third-party code that is not a core part of the project. For example, for the ray tracer, we would approve using a third-party library for loading models, but would not approve copying and pasting a CUDA function for doing refraction.
-* Third-party code must be credited in README.md.
-* Using third-party code without its approval, including using another student's code, is an academic integrity violation, and will result in you receiving an F for the semester.
+![Alt test](evaluation.jpg "")
-------------------------------------------------------------------------------
SELF-GRADING
diff --git a/evaluation.jpg b/evaluation.jpg
new file mode 100644
index 0000000..d855f13
Binary files /dev/null and b/evaluation.jpg differ
diff --git a/renders/8000.DOF.bmp b/renders/8000.DOF.bmp
new file mode 100644
index 0000000..7035076
Binary files /dev/null and b/renders/8000.DOF.bmp differ
diff --git a/renders/FirstImage.JPG b/renders/FirstImage.JPG
new file mode 100644
index 0000000..7231ff2
Binary files /dev/null and b/renders/FirstImage.JPG differ
diff --git a/renders/pathTracer.6000.DOF.bmp b/renders/pathTracer.6000.DOF.bmp
new file mode 100644
index 0000000..8bd5cac
Binary files /dev/null and b/renders/pathTracer.6000.DOF.bmp differ
diff --git a/renders/pathTracer.DOF2.6000.bmp b/renders/pathTracer.DOF2.6000.bmp
new file mode 100644
index 0000000..56744c7
Binary files /dev/null and b/renders/pathTracer.DOF2.6000.bmp differ
diff --git a/renders/pathTracer.diffuse.300.bmp b/renders/pathTracer.diffuse.300.bmp
new file mode 100644
index 0000000..fc4dc9a
Binary files /dev/null and b/renders/pathTracer.diffuse.300.bmp differ
diff --git a/renders/pathTracer.diffuse.500.bmp b/renders/pathTracer.diffuse.500.bmp
new file mode 100644
index 0000000..677dc86
Binary files /dev/null and b/renders/pathTracer.diffuse.500.bmp differ
diff --git a/renders/pathTracer.mirror.500.bmp b/renders/pathTracer.mirror.500.bmp
new file mode 100644
index 0000000..b89b34c
Binary files /dev/null and b/renders/pathTracer.mirror.500.bmp differ
diff --git a/renders/pathTracer.refraction.10.1500.bmp b/renders/pathTracer.refraction.10.1500.bmp
new file mode 100644
index 0000000..bc5e22b
Binary files /dev/null and b/renders/pathTracer.refraction.10.1500.bmp differ
diff --git a/renders/pathTracer.refraction.10.3000.bmp b/renders/pathTracer.refraction.10.3000.bmp
new file mode 100644
index 0000000..c283d89
Binary files /dev/null and b/renders/pathTracer.refraction.10.3000.bmp differ
diff --git a/renders/pathTracer.refraction.5.1500.bmp b/renders/pathTracer.refraction.5.1500.bmp
new file mode 100644
index 0000000..c32ee30
Binary files /dev/null and b/renders/pathTracer.refraction.5.1500.bmp differ
diff --git a/renders/pathTracer.refraction.5.500.bmp b/renders/pathTracer.refraction.5.500.bmp
new file mode 100644
index 0000000..7e760f5
Binary files /dev/null and b/renders/pathTracer.refraction.5.500.bmp differ
diff --git a/renders/pathTracer.scene.300.bmp b/renders/pathTracer.scene.300.bmp
new file mode 100644
index 0000000..aca26c8
Binary files /dev/null and b/renders/pathTracer.scene.300.bmp differ
diff --git a/scenes/sampleScene.txt b/scenes/sampleScene.txt
index 52d079e..64b5ce8 100755
--- a/scenes/sampleScene.txt
+++ b/scenes/sampleScene.txt
@@ -1,8 +1,8 @@
MATERIAL 0 //white diffuse
-RGB 0.9 0.9 0.9
+RGB 1 1 1
SPECEX 0
SPECRGB 1 1 1
-REFL 0
+REFL 0
REFR 0
REFRIOR 0
SCATTER 0
@@ -35,24 +35,24 @@ RSCTCOEFF 0
EMITTANCE 0
MATERIAL 3 //red glossy
-RGB .63 .26 .24
-SPECEX 0
+RGB 0 1 0
+SPECEX 0
SPECRGB 1 1 1
REFL 0
REFR 0
-REFRIOR 2
+REFRIOR 0
SCATTER 0
ABSCOEFF 0 0 0
RSCTCOEFF 0
EMITTANCE 0
MATERIAL 4 //white glossy
-RGB 1 1 1
+RGB 0 1 1
SPECEX 0
SPECRGB 1 1 1
-REFL 0
+REFL 0
REFR 0
-REFRIOR 2
+REFRIOR 0
SCATTER 0
ABSCOEFF 0 0 0
RSCTCOEFF 0
@@ -70,13 +70,13 @@ ABSCOEFF .02 5.1 5.7
RSCTCOEFF 13
EMITTANCE 0
-MATERIAL 6 //green glossy
-RGB .35 .48 .29
-SPECEX 0
+MATERIAL 6 //blue glossy
+RGB 0.1 0.1 0.8
+SPECEX 0
SPECRGB 1 1 1
-REFL 0
-REFR 0
-REFRIOR 2.6
+REFL 0
+REFR 0.6
+REFRIOR 1.6
SCATTER 0
ABSCOEFF 0 0 0
RSCTCOEFF 0
@@ -92,7 +92,7 @@ REFRIOR 0
SCATTER 0
ABSCOEFF 0 0 0
RSCTCOEFF 0
-EMITTANCE 1
+EMITTANCE 5
MATERIAL 8 //light
RGB 1 1 1
@@ -104,21 +104,42 @@ REFRIOR 0
SCATTER 0
ABSCOEFF 0 0 0
RSCTCOEFF 0
-EMITTANCE 15
+EMITTANCE 5
+
+MATERIAL 9 //mirror
+RGB 1 1 1
+SPECEX 0
+SPECRGB 0 0 0
+REFL 1.0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 10 //mirror
+RGB 0 1 1
+SPECEX 0
+SPECRGB 0 0 0
+REFL 1.0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
CAMERA
RES 800 800
FOVY 25
-ITERATIONS 5000
-FILE test.bmp
+ITERATIONS 8000
+FILE pathTracer1.bmp
frame 0
EYE 0 4.5 12
VIEW 0 0 -1
UP 0 1 0
-frame 1
-EYE 0 4.5 12
-VIEW 0 0 -1
-UP 0 1 0
+
OBJECT 0
cube
@@ -127,22 +148,14 @@ frame 0
TRANS 0 0 0
ROTAT 0 0 90
SCALE .01 10 10
-frame 1
-TRANS 0 0 0
-ROTAT 0 0 90
-SCALE .01 10 10
OBJECT 1
cube
-material 0
+material 9
frame 0
TRANS 0 5 -5
ROTAT 0 90 0
-SCALE .01 10 10
-frame 1
-TRANS 0 5 -5
-ROTAT 0 90 0
-SCALE .01 10 10
+SCALE .01 10 10
OBJECT 2
cube
@@ -151,10 +164,6 @@ frame 0
TRANS 0 10 0
ROTAT 0 0 90
SCALE .01 10 10
-frame 1
-TRANS 0 10 0
-ROTAT 0 0 90
-SCALE .01 10 10
OBJECT 3
cube
@@ -163,10 +172,7 @@ frame 0
TRANS -5 5 0
ROTAT 0 0 0
SCALE .01 10 10
-frame 1
-TRANS -5 5 0
-ROTAT 0 0 0
-SCALE .01 10 10
+
OBJECT 4
cube
@@ -175,32 +181,20 @@ frame 0
TRANS 5 5 0
ROTAT 0 0 0
SCALE .01 10 10
-frame 1
-TRANS 5 5 0
-ROTAT 0 0 0
-SCALE .01 10 10
OBJECT 5
sphere
material 4
frame 0
-TRANS 0 2 0
-ROTAT 0 180 0
-SCALE 3 3 3
-frame 1
-TRANS 0 2 0
+TRANS 1 2 -.5
ROTAT 0 180 0
SCALE 3 3 3
OBJECT 6
sphere
-material 3
+material 5
frame 0
-TRANS 2 5 2
-ROTAT 0 180 0
-SCALE 2.5 2.5 2.5
-frame 1
-TRANS 2 5 2
+TRANS 2 6 2
ROTAT 0 180 0
SCALE 2.5 2.5 2.5
@@ -208,22 +202,31 @@ OBJECT 7
sphere
material 6
frame 0
-TRANS -2 5 -2
-ROTAT 0 180 0
-SCALE 3 3 3
-frame 1
-TRANS -2 5 -2
+TRANS -2 4 -3
ROTAT 0 180 0
SCALE 3 3 3
OBJECT 8
cube
-material 8
+material 10
+frame 0
+TRANS -3 0 2
+ROTAT 0 55 0
+SCALE 1 2 1
+
+
+OBJECT 9
+sphere
+material 10
+frame 0
+TRANS -1 0.5 2
+ROTAT 0 0 0
+SCALE 1 1 1
+
+OBJECT 10
+cube
+material 7
frame 0
-TRANS 0 10 0
-ROTAT 0 0 90
-SCALE .3 3 3
-frame 1
TRANS 0 10 0
ROTAT 0 0 90
SCALE .3 3 3
diff --git a/src/glm/core/func_common.hpp b/src/glm/core/func_common.hpp
index 4a696e3..a9d6acb 100755
--- a/src/glm/core/func_common.hpp
+++ b/src/glm/core/func_common.hpp
@@ -278,8 +278,8 @@ namespace glm
/// you would want a threshold function with a smooth
/// transition. This is equivalent to:
/// genType t;
- /// t = clamp ((x – edge0) / (edge1 – edge0), 0, 1);
- /// return t * t * (3 – 2 * t);
+ /// t = clamp ((x ?edge0) / (edge1 ?edge0), 0, 1);
+ /// return t * t * (3 ?2 * t);
/// Results are undefined if edge0 >= edge1.
///
/// @tparam genType Floating-point scalar or vector types.
diff --git a/src/glm/core/func_common.inl b/src/glm/core/func_common.inl
index 4894410..5bb8005 100755
--- a/src/glm/core/func_common.inl
+++ b/src/glm/core/func_common.inl
@@ -277,7 +277,7 @@ namespace detail
//// Only valid if (INT_MIN <= x-y <= INT_MAX)
//// min(x,y)
//r = y + ((x - y) & ((x - y) >> (sizeof(int) *
- //CHAR_BIT – 1)));
+ //CHAR_BIT ?1)));
//// max(x,y)
//r = x - ((x - y) & ((x - y) >> (sizeof(int) *
//CHAR_BIT - 1)));
diff --git a/src/glm/core/func_integer.hpp b/src/glm/core/func_integer.hpp
index e97a8f9..284e214 100755
--- a/src/glm/core/func_integer.hpp
+++ b/src/glm/core/func_integer.hpp
@@ -105,7 +105,7 @@ namespace glm
/// returning them in the least significant bits of the result.
/// For unsigned data types, the most significant bits of the
/// result will be set to zero. For signed data types, the
- /// most significant bits will be set to the value of bit offset + base – 1.
+ /// most significant bits will be set to the value of bit offset + base ?1.
///
/// If bits is zero, the result will be zero. The result will be
/// undefined if offset or bits is negative, or if the sum of
@@ -125,7 +125,7 @@ namespace glm
/// Returns the insertion the bits least-significant bits of insert into base.
///
/// The result will have bits [offset, offset + bits - 1] taken
- /// from bits [0, bits – 1] of insert, and all other bits taken
+ /// from bits [0, bits ?1] of insert, and all other bits taken
/// directly from the corresponding bits of base. If bits is
/// zero, the result will simply be base. The result will be
/// undefined if offset or bits is negative, or if the sum of
diff --git a/src/image.cpp b/src/image.cpp
index 67bf157..46b6235 100755
--- a/src/image.cpp
+++ b/src/image.cpp
@@ -38,7 +38,7 @@ image::~image(){
//------------------------
float image::applyGamma(float f){
- //apply gamma correction, use simple power law gamma for now.
+ //apply gamma correction, use simple power law gamma for now. TODO: sRGB
return pow(f/float(gamma.divisor), gamma.gamma);
}
diff --git a/src/interactions.h b/src/interactions.h
index 6561796..8c3f5f6 100755
--- a/src/interactions.h
+++ b/src/interactions.h
@@ -8,10 +8,56 @@
#include "intersections.h"
+struct Fresnel {
+ float reflectionCoefficient;
+ float transmissionCoefficient;
+};
+
+struct AbsorptionAndScatteringProperties{
+ glm::vec3 absorptionCoefficient;
+ float reducedScatteringCoefficient;
+};
+
//forward declaration
+__host__ __device__ bool calculateScatterAndAbsorption(ray& r, float& depth, AbsorptionAndScatteringProperties& currentAbsorptionAndScattering, glm::vec3& unabsorbedColor, material m, float randomFloatForScatteringDistance, float randomFloat2, float randomFloat3);
__host__ __device__ glm::vec3 getRandomDirectionInSphere(float xi1, float xi2);
+__host__ __device__ glm::vec3 calculateTransmission(glm::vec3 absorptionCoefficient, float distance);
+__host__ __device__ glm::vec3 calculateTransmissionDirection(glm::vec3 normal, glm::vec3 incident, float incidentIOR, float transmittedIOR);
+__host__ __device__ glm::vec3 calculateReflectionDirection(glm::vec3 normal, glm::vec3 incident);
+__host__ __device__ Fresnel calculateFresnel(glm::vec3 normal, glm::vec3 incident, float incidentIOR, float transmittedIOR, glm::vec3 reflectionDirection, glm::vec3 transmissionDirection);
__host__ __device__ glm::vec3 calculateRandomDirectionInHemisphere(glm::vec3 normal, float xi1, float xi2);
+//TODO (OPTIONAL): IMPLEMENT THIS FUNCTION
+__host__ __device__ glm::vec3 calculateTransmission(glm::vec3 absorptionCoefficient, float distance) {
+ return glm::vec3(0,0,0);
+}
+
+//TODO (OPTIONAL): IMPLEMENT THIS FUNCTION
+__host__ __device__ bool calculateScatterAndAbsorption(ray& r, float& depth, AbsorptionAndScatteringProperties& currentAbsorptionAndScattering,
+ glm::vec3& unabsorbedColor, material m, float randomFloatForScatteringDistance, float randomFloat2, float randomFloat3){
+ return false;
+}
+
+//TODO (OPTIONAL): IMPLEMENT THIS FUNCTION
+__host__ __device__ glm::vec3 calculateTransmissionDirection(glm::vec3 normal, glm::vec3 incident, float incidentIOR, float transmittedIOR) {
+ return glm::vec3(0,0,0);
+}
+
+//TODO (OPTIONAL): IMPLEMENT THIS FUNCTION
+__host__ __device__ glm::vec3 calculateReflectionDirection(glm::vec3 normal, glm::vec3 incident) {
+ //nothing fancy here
+ return glm::vec3(0,0,0);
+}
+
+//TODO (OPTIONAL): IMPLEMENT THIS FUNCTION
+__host__ __device__ Fresnel calculateFresnel(glm::vec3 normal, glm::vec3 incident, float incidentIOR, float transmittedIOR, glm::vec3 reflectionDirection, glm::vec3 transmissionDirection) {
+ Fresnel fresnel;
+
+ fresnel.reflectionCoefficient = 1;
+ fresnel.transmissionCoefficient = 0;
+ return fresnel;
+}
+
//LOOK: This function demonstrates cosine weighted random direction generation in a sphere!
__host__ __device__ glm::vec3 calculateRandomDirectionInHemisphere(glm::vec3 normal, float xi1, float xi2) {
@@ -47,4 +93,13 @@ __host__ __device__ glm::vec3 getRandomDirectionInSphere(float xi1, float xi2) {
return glm::vec3(0,0,0);
}
+//TODO (PARTIALLY OPTIONAL): IMPLEMENT THIS FUNCTION
+//returns 0 if diffuse scatter, 1 if reflected, 2 if transmitted.
+__host__ __device__ int calculateBSDF(ray& r, glm::vec3 intersect, glm::vec3 normal, glm::vec3 emittedColor,
+ AbsorptionAndScatteringProperties& currentAbsorptionAndScattering,
+ glm::vec3& color, glm::vec3& unabsorbedColor, material m){
+
+ return 1;
+};
+
#endif
diff --git a/src/intersections.h b/src/intersections.h
index a6b9469..a60f354 100755
--- a/src/intersections.h
+++ b/src/intersections.h
@@ -11,7 +11,7 @@
#include "glm/glm.hpp"
#include "utilities.h"
#include
-
+#include
//Some forward declarations
__host__ __device__ glm::vec3 getPointOnRay(ray r, float t);
__host__ __device__ glm::vec3 multiplyMV(cudaMat4 m, glm::vec4 v);
@@ -68,99 +68,129 @@ __host__ __device__ glm::vec3 getSignOfRay(ray r){
glm::vec3 inv_direction = getInverseDirectionOfRay(r);
return glm::vec3((int)(inv_direction.x < 0), (int)(inv_direction.y < 0), (int)(inv_direction.z < 0));
}
-
//Wrapper for cube intersection test for testing against unit cubes
__host__ __device__ float boxIntersectionTest(staticGeom box, ray r, glm::vec3& intersectionPoint, glm::vec3& normal){
- return boxIntersectionTest(glm::vec3(-.5,-.5,-.5), glm::vec3(.5,.5,.5), box, r, intersectionPoint, normal);
+ return boxIntersectionTest(glm::vec3(-.5,-.5,-.5), glm::vec3(.5,.5,.5), box, r, intersectionPoint, normal);
}
+//TODO: IMPLEMENT THIS FUNCTION
//Cube intersection test, return -1 if no intersection, otherwise, distance to intersection
-__host__ __device__ float boxIntersectionTest(glm::vec3 boxMin, glm::vec3 boxMax, staticGeom box, ray r, glm::vec3& intersectionPoint, glm::vec3& normal){
- glm::vec3 currentNormal = glm::vec3(0,0,0);
-
- ray ro = r;
-
- glm::vec3 iP0 = multiplyMV(box.inverseTransform,glm::vec4(r.origin, 1.0f));
- glm::vec3 iP1 = multiplyMV(box.inverseTransform,glm::vec4(r.origin+r.direction, 1.0f));
- glm::vec3 iV0 = iP1 - iP0;
-
- r.origin = iP0;
- r.direction = glm::normalize(iV0);
-
- float tmin, tmax, tymin, tymax, tzmin, tzmax;
-
- glm::vec3 rsign = getSignOfRay(r);
- glm::vec3 rInverseDirection = getInverseDirectionOfRay(r);
-
- if((int)rsign.x==0){
- tmin = (boxMin.x - r.origin.x) * rInverseDirection.x;
- tmax = (boxMax.x - r.origin.x) * rInverseDirection.x;
- }else{
- tmin = (boxMax.x - r.origin.x) * rInverseDirection.x;
- tmax = (boxMin.x - r.origin.x) * rInverseDirection.x;
- }
-
- if((int)rsign.y==0){
- tymin = (boxMin.y - r.origin.y) * rInverseDirection.y;
- tymax = (boxMax.y - r.origin.y) * rInverseDirection.y;
- }else{
- tymin = (boxMax.y - r.origin.y) * rInverseDirection.y;
- tymax = (boxMin.y - r.origin.y) * rInverseDirection.y;
- }
-
- if ( (tmin > tymax) || (tymin > tmax) ){
- return -1;
- }
- if (tymin > tmin){
- tmin = tymin;
- }
- if (tymax < tmax){
- tmax = tymax;
- }
-
- if((int)rsign.z==0){
- tzmin = (boxMin.z - r.origin.z) * rInverseDirection.z;
- tzmax = (boxMax.z - r.origin.z) * rInverseDirection.z;
- }else{
- tzmin = (boxMax.z - r.origin.z) * rInverseDirection.z;
- tzmax = (boxMin.z - r.origin.z) * rInverseDirection.z;
- }
+__host__ __device__ float boxIntersectionTest(glm::vec3 boxMin, glm::vec3 boxMax,staticGeom box, ray r, glm::vec3& intersectionPoint, glm::vec3& normal){
+
+ ray rt;
+ rt.origin = multiplyMV(box.inverseTransform,glm::vec4(r.origin,1.0f));
+ rt.direction = multiplyMV(box.inverseTransform,glm::vec4(r.direction,0));
+ /*float boxMin.x = -0.5;
+ float boxMax.x = 0.5;
+ float boxMin.y = -0.5;
+ float boxMax.y = 0.5;
+ float boxMin.z = -0.5;
+ float boxMax.z = 0.5;*/
+ double tnear = -1000000000000000000;
+ double tfar = 1000000000000000000;
+ double t1, t2,tmp;
+
+ //xplaner
+ if(abs(rt.direction.x) < EPSILON)
+ //if(rt.direction.x == 0)
+ {
+ if(rt.origin.x>boxMax.x || rt.origin.xt2)
+ {
+ tmp = t1;
+ t1 = t2;
+ t2 = tmp;
+ }
+ if(t1>tnear) tnear = t1;
+ if(t2boxMax.y || rt.origin.yt2)
+ {
+ tmp = t1;
+ t1 = t2;
+ t2 = tmp;
+ }
+ if(t1>tnear) tnear = t1;
+ if(t2boxMax.z || rt.origin.zt2)
+ {
+ tmp = t1;
+ t1 = t2;
+ t2 = tmp;
+ }
+ if(t1>tnear) tnear = t1;
+ if(t2maxv)
+ {
+ objnormal = glm::vec3(0,0,interp.z);
+ }
+ else
+ {
+ if(abs(interp.x)>abs(interp.y))
+ {
+ objnormal = glm::vec3(interp.x,0,0);
+ }
+ else
+ {
+
+ objnormal = glm::vec3(0,interp.y,0);
+ }
+ }
+ objnormal = glm::normalize(objnormal);
+ normal = multiplyMV(box.transform,glm::vec4(objnormal,0));
+ normal = glm::normalize(normal);
+ /*if(abs(normal.x) !=1 && abs(normal.y) !=1 && abs(normal.z) !=1)
+ printf("%f,%f,%f ",r.direction.x,r.direction.y,r.direction.z);*/
+ intersectionPoint = multiplyMV(box.transform,glm::vec4(interp,1.0f));
+ return glm::length(intersectionPoint - r.origin);
- if ( (tmin > tzmax) || (tzmin > tmax) ){
- return -1;
- }
- if (tzmin > tmin){
- tmin = tzmin;
- }
- if (tzmax < tmax){
- tmax = tzmax;
- }
- if(tmin<0){
- return -1;
- }
-
- glm::vec3 osintersect = r.origin + tmin*r.direction;
-
- if(abs(osintersect.x-abs(boxMax.x))<.001){
- currentNormal = glm::vec3(1,0,0);
- }else if(abs(osintersect.y-abs(boxMax.y))<.001){
- currentNormal = glm::vec3(0,1,0);
- }else if(abs(osintersect.z-abs(boxMax.z))<.001){
- currentNormal = glm::vec3(0,0,1);
- }else if(abs(osintersect.x+abs(boxMin.x))<.001){
- currentNormal = glm::vec3(-1,0,0);
- }else if(abs(osintersect.y+abs(boxMin.y))<.001){
- currentNormal = glm::vec3(0,-1,0);
- }else if(abs(osintersect.z+abs(boxMin.z))<.001){
- currentNormal = glm::vec3(0,0,-1);
- }
-
- intersectionPoint = multiplyMV(box.transform, glm::vec4(osintersect, 1.0));
-
-
-
- normal = multiplyMV(box.transform, glm::vec4(currentNormal,0.0));
- return glm::length(intersectionPoint-ro.origin);
}
//LOOK: Here's an intersection test example from a sphere. Now you just need to figure out cube and, optionally, triangle.
@@ -202,6 +232,149 @@ __host__ __device__ float sphereIntersectionTest(staticGeom sphere, ray r, glm::
return glm::length(r.origin - realIntersectionPoint);
}
+__host__ __device__ float Determinate(glm::vec3 c1, glm::vec3 c2)
+{
+ return c1[0]*c2[1]+c2[0]*c1[2]+c1[1]*c2[2]-c1[2]*c2[1]-c2[0]*c1[1]-c1[0]*c2[2];
+}
+__host__ __device__ float triangleIntersectionTest(staticGeom mesh,glm::vec3 p1, glm::vec3 p2, glm::vec3 p3, ray r, glm::vec3&intersectionPoint, glm::vec3 normal)
+{
+ ray rt;
+ rt.origin = multiplyMV(mesh.inverseTransform,glm::vec4(r.origin,1.0f));
+ rt.direction = multiplyMV(mesh.inverseTransform,glm::vec4(r.direction,0));
+
+ //plane equation : normal (dot product) x = d;
+ double d = normal.x*p1.x+normal.y*p1.y+normal.z*p1.z;
+ //substitude ray equation to it
+ // n(p0+tv0) = d
+ //np0+tnv0 = d;-> t = (d-np0)/nv0
+ double temp = normal.x*rt.origin.x+normal.y*rt.origin.y+normal.z*rt.origin.z;
+ double temp2 = normal.x*rt.direction.x+normal.y*rt.direction.y+normal.z*rt.direction.z;
+ if (temp2 == 0)
+ {
+ //ray is parallel to the plane
+ return -1;
+ }
+ double t1 = (d - temp)/temp2;
+ float t = t1;
+ glm::vec3 p = rt.origin+glm::vec3(t1*rt.direction.x,t1*rt.direction.y,t1*rt.direction.z);
+ //tell if possible intersection point is incide the triangle
+ //I use the method described on ppt 659
+ //calculate s
+ glm::vec3 c1(p1.y,p2.y,p3.y);
+ glm::vec3 c2(p1.z,p2.z,p3.z);
+ glm::vec3 c3(p1.x,p2.x,p3.x);
+ double d1 = Determinate(c1,c2);
+ double d2 = Determinate(c2,c3);
+ double d3 = Determinate(c3,c1);
+ double s = 0.5*sqrt(d1*d1+d2*d2+d3*d3);
+ if (s<=EPSILON)
+ {
+ return -1;
+ }
+ c1 = glm::vec3(p.y,p2.y,p3.y);
+ c2 = glm::vec3(p.z,p2.z,p3.z);
+ c3 = glm::vec3(p.x,p2.x,p3.x);
+ d1 = Determinate(c1,c2);
+ d2 = Determinate(c2,c3);
+ d3 = Determinate(c3,c1);
+ double s1 = 0.5*sqrt(d1*d1+d2*d2+d3*d3)/s;
+
+ c1 = glm::vec3(p.y,p3.y,p1.y);
+ c2 = glm::vec3(p.z,p3.z,p1.z);
+ c3 = glm::vec3(p.x,p3.x,p1.x);
+ d1 = Determinate(c1,c2);
+ d2 = Determinate(c2,c3);
+ d3 = Determinate(c3,c1);
+ double s2 = 0.5*sqrt(d1*d1+d2*d2+d3*d3)/s;
+
+ c1 = glm::vec3(p.y,p1.y,p2.y);
+ c2 = glm::vec3(p.z,p1.z,p2.z);
+ c3 = glm::vec3(p.x,p1.x,p2.x);
+ d1 = Determinate(c1,c2);
+ d2 = Determinate(c2,c3);
+ d3 = Determinate(c3,c1);
+ double s3 = 0.5*sqrt(d1*d1+d2*d2+d3*d3)/s;
+ if((s1>=0&&s1<=1)&&(s2>=0&&s2<=1)&&(s3>=0&&s3<=1)&&(s1+s2+s3-1 pbo,thrust::device_vector ibo, thrust::device_vector nbo)
+{
+ staticGeom boundingBox;
+ boundingBox.rotation = glm::vec3(0,0,0);
+ boundingBox.translation = mesh.translation;
+ boundingBox.transform = mesh.transform;
+ float dist = boxIntersectionTest(mesh.boundingBox_min,mesh.boundingBox_max,boundingBox,r,intersectionPoint,normal);
+ if(dist == -1)
+ return -1;
+ else
+ {
+ glm::vec3 v1,v2,v3;
+ float currDist = -1;
+ dist = -1;
+ glm::vec3 interP;
+ glm::vec3 tmpNormal;
+ for(int i = 0;i pbo,thrust::device_vector ibo, thrust::device_vector nbo)
+{
+ float dist = -1;
+ if(geom.type == SPHERE)
+ {
+ dist = sphereIntersectionTest(geom,r, intersectionPoint,interNormal);
+ }
+ else if(geom.type == CUBE)
+ {
+ dist = boxIntersectionTest(geom,r, intersectionPoint,interNormal);
+ }
+ else
+ {
+ //TODO MESH
+ //dist = meshIntersectionTest(geom,r,intersectionPoint,interNormal,pbo,ibo,nbo);
+ }
+ return dist;
+}
//returns x,y,z half-dimensions of tightest bounding box
__host__ __device__ glm::vec3 getRadiuses(staticGeom geom){
@@ -227,7 +400,7 @@ __host__ __device__ glm::vec3 getRandomPointOnCube(staticGeom cube, float random
glm::vec3 radii = getRadiuses(cube);
float side1 = radii.x * radii.y * 4.0f; //x-y face
float side2 = radii.z * radii.y * 4.0f; //y-z face
- float side3 = radii.x * radii.z* 4.0f; //x-z face
+ float side3 = radii.x * radii.z * 4.0f; //x-z face
float totalarea = 2.0f * (side1+side2+side3);
//pick random face, weighted by surface area
@@ -253,28 +426,29 @@ __host__ __device__ glm::vec3 getRandomPointOnCube(staticGeom cube, float random
}else{
//x-z-back face
point = glm::vec3((float)u02(rng), -.5, (float)u02(rng));
- }
-
+ }
glm::vec3 randPoint = multiplyMV(cube.transform, glm::vec4(point,1.0f));
return randPoint;
}
+//TODO: IMPLEMENT THIS FUNCTION
//Generates a random point on a given sphere
__host__ __device__ glm::vec3 getRandomPointOnSphere(staticGeom sphere, float randomSeed){
- float radius=.5f;
- thrust::default_random_engine rng(hash(randomSeed));
- thrust::uniform_real_distribution u01(-1,1);
- thrust::uniform_real_distribution u02(0,TWO_PI);
-
- float theta = (float)u02(rng);
- float cosphi = (float)u01(rng);
- float sinphi = sqrt(1 - cosphi*cosphi);
- glm::vec3 point = radius*glm::vec3(sinphi*cos(theta),sinphi*sin(theta),cosphi);
- glm::vec3 randPoint = multiplyMV(sphere.transform, glm::vec4(point,1.0f));
-
- return randPoint;
+
+ float radius=.5f;
+ thrust::default_random_engine rng(hash(randomSeed));
+ thrust::uniform_real_distribution u01(-1,1);
+ thrust::uniform_real_distribution u02(0,TWO_PI);
+
+ float theta = (float)u02(rng);
+ float cosphi = (float)u01(rng);
+ float sinphi = sqrt(1 - cosphi*cosphi);
+ glm::vec3 point = radius*glm::vec3(sinphi*cos(theta),sinphi*sin(theta),cosphi);
+ glm::vec3 randPoint = multiplyMV(sphere.transform, glm::vec4(point,1.0f));
+
+ return randPoint;
}
#endif
diff --git a/src/main.cpp b/src/main.cpp
index 81836b1..95e68f0 100755
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -6,11 +6,39 @@
// Yining Karl Li's TAKUA Render, a massively parallel pathtracing renderer: http://www.yiningkarlli.com
#include "main.h"
-
+#include
//-------------------------------
//-------------MAIN--------------
//-------------------------------
+// added for camera interaction
+void mouseClick(int button, int status,int x,int y);
+void mouseMotion(int x, int y);
+static bool r_buttonDown = false;
+static bool l_buttonDown = false;
+static int g_yclick = 0;
+static int g_ylclick = 0;
+static int g_xlclick = 0;
+int mouse_old_x, mouse_old_y;
+glm::vec3 originPos;
+glm::vec3 originView;
+
+float fps = 0;
+float preTime = 0;
+float currTime;
+int frames = 0;
+void CalcFPS()
+{
+ frames ++;
+ currTime = glutGet(GLUT_ELAPSED_TIME);
+ if(currTime - preTime > 1000)
+ {
+ fps = frames*1000.0/(currTime - preTime);
+ preTime = currTime;
+ frames = 0;
+ }
+}
+unsigned char button_mask = 0x00;
int main(int argc, char** argv){
#ifdef __APPLE__
@@ -42,6 +70,7 @@ int main(int argc, char** argv){
}
}
+
if(!loadedScene){
cout << "Error: scene file needed!" << endl;
return 0;
@@ -52,7 +81,9 @@ int main(int argc, char** argv){
renderCam = &renderScene->renderCam;
width = renderCam->resolution[0];
height = renderCam->resolution[1];
-
+ originView = glm::vec3(renderCam->views->x,renderCam->views->y,renderCam->views->z);
+ originPos = glm::vec3(renderCam->positions->x,renderCam->positions->y,renderCam->positions->z);
+
if(targetFrame>=renderCam->frames){
cout << "Warning: Specified target frame is out of range, defaulting to frame 0." << endl;
targetFrame = 0;
@@ -85,12 +116,12 @@ int main(int argc, char** argv){
exit(0);
}
}
-
glfwTerminate();
#else
glutDisplayFunc(display);
+ glutMouseFunc (mouseClick);
+ glutMotionFunc (mouseMotion);
glutKeyboardFunc(keyboard);
-
glutMainLoop();
#endif
return 0;
@@ -107,29 +138,31 @@ void runCuda(){
if(iterationsiterations){
uchar4 *dptr=NULL;
- iterations++;
+ iterations++;
cudaGLMapBufferObject((void**)&dptr, pbo);
//pack geom and material arrays
geom* geoms = new geom[renderScene->objects.size()];
material* materials = new material[renderScene->materials.size()];
-
+ // mesh* meshes = new mesh[renderScene->numOfMesh];
+
for(int i=0; iobjects.size(); i++){
geoms[i] = renderScene->objects[i];
}
for(int i=0; imaterials.size(); i++){
materials[i] = renderScene->materials[i];
}
-
+
// execute the kernel
- cudaRaytraceCore(dptr, renderCam, targetFrame, iterations, materials, renderScene->materials.size(), geoms, renderScene->objects.size() );
+ cudaRaytraceCore(dptr, renderCam, targetFrame, iterations, materials, renderScene->materials.size(), geoms, renderScene->objects.size());//,renderScene->pbo,renderScene->ibo,renderScene->nbo);
// unmap buffer object
cudaGLUnmapBufferObject(pbo);
}else{
- if(!finishedRender){
+ if(!finishedRender)
+ {
//output image file
image outputImage(renderCam->resolution.x, renderCam->resolution.y);
@@ -142,8 +175,8 @@ void runCuda(){
gammaSettings gamma;
gamma.applyGamma = true;
- gamma.gamma = 1.0;
- gamma.divisor = 1.0; //renderCam->iterations;
+ gamma.gamma = 1.0/2.2;
+ gamma.divisor = 1.0;//renderCam->iterations;
outputImage.setGammaSettings(gamma);
string filename = renderCam->imageName;
string s;
@@ -200,8 +233,8 @@ void runCuda(){
void display(){
runCuda();
-
- string title = "565Raytracer | " + utilityCore::convertIntToString(iterations) + " Iterations";
+ CalcFPS();
+ string title = "565Raytracer | " + utilityCore::convertIntToString(iterations) + " Iterations" + utilityCore::convertFloatToString(fps) + "fps";
glutSetWindowTitle(title.c_str());
glBindBuffer( GL_PIXEL_UNPACK_BUFFER, pbo);
@@ -220,12 +253,23 @@ void runCuda(){
void keyboard(unsigned char key, int x, int y)
{
+ //glm::vec3* oldPos;
std::cout << key << std::endl;
switch (key)
{
case(27):
exit(1);
break;
+ case('r'):
+ {
+
+ renderCam->positions = new glm::vec3(originPos.x,originPos.y,originPos.z); ;
+ renderCam->views = new glm::vec3(originView.x,originView.y,originView.z);
+ iterations = 0;
+ runCuda();
+ break;
+ }
+
}
}
@@ -396,3 +440,40 @@ void shut_down(int return_code){
#endif
exit(return_code);
}
+
+void mouseClick(int button,int state, int x,int y)
+{
+ if(button == GLUT_RIGHT_BUTTON)
+ {
+ //std::cout<<"ss"<positions->z;
+ }
+ else if(button == GLUT_LEFT_BUTTON)
+ {
+ l_buttonDown = (state == GLUT_DOWN) ? true:false;
+ g_ylclick = y - (renderCam->positions->y + renderCam->views->y);
+ g_xlclick = x -(renderCam->positions->x + renderCam->views->x);
+ }
+}
+
+void mouseMotion(int x, int y)
+{
+ if(r_buttonDown)
+ {
+ renderCam->positions->z = (y - g_yclick)/5.0;
+ iterations = 0;
+ finishedRender = false;
+ runCuda();
+ //glutPostRedisplay();
+ }
+ else if(l_buttonDown)
+ {
+ renderCam->views->x = (x - g_xlclick)/500.0;
+ renderCam->views->y = (y - g_ylclick)/500.0;
+ iterations = 0;
+ finishedRender = false;
+ runCuda();
+ //glutPostRedisplay();
+ }
+}
\ No newline at end of file
diff --git a/src/raytraceKernel.cu b/src/raytraceKernel.cu
index 87a65a6..ae1b297 100755
--- a/src/raytraceKernel.cu
+++ b/src/raytraceKernel.cu
@@ -9,12 +9,29 @@
#include
#include
#include "sceneStructs.h"
+#include "glm/glm.hpp"
#include "utilities.h"
#include "raytraceKernel.h"
#include "intersections.h"
#include "interactions.h"
#include
-#include "glm/glm.hpp"
+#include
+#include
+#include
+#include
+#include
+#include
+
+#if CUDA_VERSION >= 5000
+ #include
+#else
+ #include
+#endif
+
+//#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ < 200)
+//#define printf(f, ...) ((void)(f, __VA_ARGS__),0)
+//#endif
+#define DEPTH_OF_FIELD
void checkCUDAError(const char *msg) {
cudaError_t err = cudaGetLastError();
@@ -35,41 +52,41 @@ __host__ __device__ glm::vec3 generateRandomNumberFromThread(glm::vec2 resolutio
return glm::vec3((float) u01(rng), (float) u01(rng), (float) u01(rng));
}
-//Kernel that does the initial raycast from the camera.
-__host__ __device__ ray raycastFromCameraKernel(glm::vec2 resolution, float time, int x, int y, glm::vec3 eye, glm::vec3 view, glm::vec3 up, glm::vec2 fov){
-
- int index = x + (y * resolution.x);
-
- thrust::default_random_engine rng(hash(index*time));
- thrust::uniform_real_distribution u01(0,1);
-
- //standard camera raycast stuff
- glm::vec3 E = eye;
- glm::vec3 C = view;
- glm::vec3 U = up;
- float fovx = fov.x;
- float fovy = fov.y;
-
- float CD = glm::length(C);
-
- glm::vec3 A = glm::cross(C, U);
- glm::vec3 B = glm::cross(A, C);
- glm::vec3 M = E+C;
- glm::vec3 H = (A*float(CD*tan(fovx*(PI/180))))/float(glm::length(A));
- glm::vec3 V = (B*float(CD*tan(-fovy*(PI/180))))/float(glm::length(B));
-
- float sx = (x)/(resolution.x-1);
- float sy = (y)/(resolution.y-1);
-
- glm::vec3 P = M + (((2*sx)-1)*H) + (((2*sy)-1)*V);
- glm::vec3 PmE = P-E;
- glm::vec3 R = E + (float(200)*(PmE))/float(glm::length(PmE));
-
- glm::vec3 direction = glm::normalize(R);
- //major performance cliff at this point, TODO: find out why!
+//TODO: IMPLEMENT THIS FUNCTION
+//Function that does the initial raycast from the camera
+__host__ __device__ ray raycastFromCameraKernel(glm::vec2 resolution, float time, float x, float y, glm::vec3 eye, glm::vec3 view, glm::vec3 up, glm::vec2 fov){
+ //TODO: CLEAR UP
+ int index = y * resolution.x + x;
ray r;
- r.origin = eye;
- r.direction = direction;
+ r.origin = eye;
+ float sx, sy;
+
+ //anti-aliasing
+ thrust::default_random_engine rng(hash(time*index));
+ thrust::uniform_real_distribution u01(-0.5,0.5);
+ sx = (float)(x+(float)u01(rng))/((float)resolution.x-1);
+ sy = (float)(y+(float)u01(rng))/((float)resolution.y-1);
+
+ glm::vec3 C = view;
+ glm::vec3 M = eye + C;
+ glm::vec3 A = glm::cross(C,up);
+ glm::vec3 B = glm::cross(A,C);
+ glm::vec3 H = A*glm::length(C)*(float)tan(fov.x*PI/180.0) / glm::length(A);
+ glm::vec3 V = B*glm::length(C)*(float)tan(fov.y*PI/180.0) / glm::length(B);
+
+ glm::vec3 P = M + (float)(2.0*sx - 1)*H + (float)(1 - 2.0*sy)*V;
+ r.direction = P-eye;
+ r.direction = glm::normalize(r.direction);
+
+#ifdef DEPTH_OF_FIELD
+ //Depth of field
+ thrust::uniform_real_distribution u02(-0.3,0.3);
+ glm::vec3 aimPoint = r.origin + (float)DOFLENGTH * r.direction;
+ r.origin += glm::vec3(u02(rng),u02(rng),u02(rng));
+ r.direction = aimPoint - r.origin;
+ r.direction = glm::normalize(r.direction);
+#endif
+
return r;
}
@@ -83,7 +100,7 @@ __global__ void clearImage(glm::vec2 resolution, glm::vec3* image){
}
}
-//Kernel that writes the image to the OpenGL PBO directly.
+//Kernel that writes the image to the OpenGL PBO directly.
__global__ void sendImageToPBO(uchar4* PBOpos, glm::vec2 resolution, glm::vec3* image){
int x = (blockIdx.x * blockDim.x) + threadIdx.x;
@@ -92,7 +109,7 @@ __global__ void sendImageToPBO(uchar4* PBOpos, glm::vec2 resolution, glm::vec3*
if(x<=resolution.x && y<=resolution.y){
- glm::vec3 color;
+ glm::vec3 color;
color.x = image[index].x*255.0;
color.y = image[index].y*255.0;
color.z = image[index].z*255.0;
@@ -111,59 +128,574 @@ __global__ void sendImageToPBO(uchar4* PBOpos, glm::vec2 resolution, glm::vec3*
// Each thread writes one pixel location in the texture (textel)
PBOpos[index].w = 0;
- PBOpos[index].x = color.x;
+ PBOpos[index].x = color.x;
PBOpos[index].y = color.y;
PBOpos[index].z = color.z;
}
}
+__host__ __device__ glm::vec3 getReflect(glm::vec3 normal, ray Ri)
+{
+ return glm::normalize(-2.0f * normal * (float)glm::dot(Ri.direction,normal) + Ri.direction);
+}
+__host__ __device__ glm::vec3 getRefractRay(float rand,glm::vec3 normal, ray Ri,float n1, float n2)
+{
+ //determine whether reflect or refract
+ glm::vec3 Rr = getReflect(normal,Ri);
+ float cosThetai = -1.0f * glm::dot(Ri.direction,normal);
+ float sqrsinThetat = (n1*n1)/(n2*n2) * (1-cosThetai*cosThetai);
+ //if n1>n2, there should be a critical angle
+ if(sqrsinThetat > 1) return Rr;
+
+ float cosThetat = sqrt(1-sqrsinThetat*sqrsinThetat);
+ float rV = (n1*cosThetai - n2*cosThetat)/(n1*cosThetai + n2*cosThetat+EPSILON);
+ rV = rV*rV;
+ float rP = (n2*cosThetai - n1*cosThetat)/(n2*cosThetai + n1*cosThetat+EPSILON);
+ rP = rP*rP;
+ if(rand<=rV)
+ {
+ //reflect
+ return getReflect(normal,Ri);
+ }
+ else
+ {
+ //transmittance, refract
+ glm::vec3 Rt = (float)(n1/n2)*Ri.direction + (float)(n1/n2*cosThetai - sqrt(1-sqrsinThetat))*normal;
+ Rt = glm::normalize(Rt);
+ return Rt;
+ }
+ printf("error");
+ return glm::vec3(0,0,0);
+}
+
+/////shadow check only for raytracer
+__host__ __device__ bool ShadowRayUnblocked(glm::vec3 point,glm::vec3 lightPos,staticGeom* geoms, int numberOfGeoms,material* mats)
+ //, glm::vec3* pbo,unsigned short* ibo, glm::vec3* nbo)
+ //thrust::device_vector pbo,thrust::device_vector ibo, thrust::device_vector nbo)
+{
+ //return true;
+ float tmpDist = -1;
+ glm::vec3 tmpnormal;
+ glm::vec3 intersectionPoint;
+ ray r; r.origin = point;
+ r.direction = lightPos-point; r.direction = glm::normalize(r.direction);
+ r.origin += r.direction*0.1f;
+ float lightToObjDist = glm::length(lightPos - r.origin)-0.25;
+ for(int i = 0;i -1 && tmpDist < lightToObjDist&&mats[i].emittance == 0)
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+//recursive raytrace
+__device__ void raytrace(ray Ri,glm::vec2 resolution, float time, cameraData cam, int rayDepth,int rayIndex, glm::vec3& color,
+ staticGeom* geoms, int numberOfGeoms,material* mats,int* lightIndex,int lightNum)
+ //,glm::vec3* pbo,unsigned short* ibo, glm::vec3* nbo)
+ //thrust::device_vector pbo,thrust::device_vector ibo, thrust::device_vector nbo)
+{
+ if(rayIndex > rayDepth)
+ {
+ color = glm::vec3(bgColorR,bgColorG,bgColorB);
+ return;
+ }
+ color = glm::vec3(0,0,0);
+ /////////////variables//////////////
+ ray Rr; //reflect ray
+ ray Rrl; // light reflect ray
+ glm::vec3 intersectionPoint(0,0,0);
+ glm::vec3 normal(0,0,0);
+ glm::vec3 diffuseColor(0,0,0);
+ glm::vec3 specularColor(0,0,0);
+ glm::vec3 reflectedColor(1.0,1.0,1.0);
+ glm::vec3 refractColor(0,0,0); // TODO, haven't uesed yet
+ glm::vec3 localColor(0,0,0);
+ glm::vec3 lightPosition (0,0,0);
+ int nearestObjIndex = -1; // nearest intersect object index
+ glm::vec3 ambient(ambientColorR,ambientColorG,ambientColorB); ambient *= Kambient;
+ float interPointDist = -1;
+ int nearestLight = -1;
+ ////////////////////////////////////////////
+ glm::vec3 tmpnormal(0,0,0);
+ float tmpDist = -1;
+ ////////////////////////////////////////////
+
+ for(int i = 0;i0))
+ {
+ if(interPointDist == -1)
+ color = glm::vec3(bgColorR,bgColorG,bgColorB);
+ else
+ color = mats[nearestObjIndex].color;
+ return;
+ }
+ else if(interPointDist!= -1 && mats[nearestObjIndex].emittance == 0)
+ {
+ // this is the reflect ray
+ Rr.direction = normal;
+ Rr.direction *= glm::dot(Ri.direction,normal);
+ Rr.direction *= -2.0;
+ Rr.direction += glm::normalize(Ri.direction);
+ Rr.origin = intersectionPoint;
+ Rr.direction = glm::normalize(Rr.direction);
+ ////////////////////////////////////////////////
+
+ if(mats[nearestObjIndex].hasReflective>0)
+ {
+ //raytrace(Rr,resolution, time, cam, rayDepth,rayIndex+1,reflectedColor,geoms,numberOfGeoms,mats,lightIndex,lightNum);
+ color = glm::vec3(mats[nearestObjIndex].hasReflective*reflectedColor.x,mats[nearestObjIndex].hasReflective*reflectedColor.y,mats[nearestObjIndex].hasReflective*reflectedColor.z);
+ //printf("%f,%f,%f ::",reflectedColor.x,reflectedColor.y,reflectedColor.z);
+ }
+ color += ambient * mats[nearestObjIndex].color;
+ //shadow check
+ for(int j = 0;j pbo,thrust::device_vector ibo, thrust::device_vector nbo)
+{
int x = (blockIdx.x * blockDim.x) + threadIdx.x;
int y = (blockIdx.y * blockDim.y) + threadIdx.y;
int index = x + (y * resolution.x);
+ //if(sampleIndex == 0)
+ // colors[index] = glm::vec3(0,0,0);
+ int rayIndex = 0;
+ if((x<=resolution.x && y<=resolution.y)){
+
+ //colors[index] = glm::vec3(rays[index].direction.x,rays[index].direction.y,rays[index].direction.z);
+ /////////////variables//////////////
+ ray Ri = raycastFromCameraKernel(resolution, time, x,y,cam.position, cam.view, cam.up, cam.fov);
+ //ray Ri = rays[index].rays[sampleIndex];
+ ray Rr = Ri; //reflect ray
+ ray Rrefra; // refraction ray
+ ray Rreflect; // reflect ray when hitting refract object
+ ray Rrl; // light reflect ray
+ glm::vec3 intersectionPoint(0,0,0);
+ glm::vec3 normal(0,0,0);
+ glm::vec3 diffuseColor(0,0,0);
+ glm::vec3 specularColor(0,0,0);
+ glm::vec3 refractColor(0,0,0); // TODO, haven't uesed yet
+ glm::vec3 reflectColor(1,1,1);
+ glm::vec3 localColor(0,0,0);
+ glm::vec3 lightPosition (0,0,0);
+ int nearestObjIndex = -1; // nearest intersect object index
+ glm::vec3 ambient(1.0,1.0,1.0); ambient *= 0.3; // *=kambient;
+ float interPointDist = -1;
+ int nearestLight = -1;
+ float hasReflect = 1.0;
+ glm::vec3 tmpnormal(0,0,0);
+ float tmpDist = -1;
+ glm::vec3 color(0,0,0);
+ float reflectCoeff = 0;
+ glm::vec3 oneColor(0,0,0); // used to store each sample ray's color;
- ray r = raycastFromCameraKernel(resolution, time, x, y, cam.position, cam.view, cam.up, cam.fov);
+ //Fresnel
+ float refraCoff1 = 1.0f;//air
+ float refraCoff2 = 0;
+ float fractionRefra = 0;
+ float fractionRefle = 0;
+ float hasRefract = 1.0;
+ bool hasShootReflect = false; // refraction use
+ int rayType = 0; // 0 for first ray, 1 for reflect ray from non-refraction surface, 2 for refraction ray from refract surface, 3 for reflect ray from refract surface
+ ////////////////////////////////////////////
+ while(rayIndex <= rayDepth &&(abs(hasReflect - 1.0)0))
+ {
+ if(interPointDist == -1)
+ {
+ //TODO change background color
+ color = glm::vec3(0.25,0.18,0.1);
+ }
+ else
+ {
+ color = mats[nearestObjIndex].color;
+ }
+ hasRefract = 0;
+ hasReflect = 0;
+ }
+#pragma endregion
+#pragma region else if hit scene
+ else if(interPointDist!= -1 && mats[nearestObjIndex].emittance == 0)
+ {
+ // this is the reflect ray
+ Rr.direction = normal;
+ Rr.direction *= glm::dot(Ri.direction,normal);
+ Rr.direction *= -2.0;
+ Rr.direction += glm::normalize(Ri.direction);
+ Rr.origin = intersectionPoint;
+ Rr.direction = glm::normalize(Rr.direction);
+ ////////////////////////////////////////////////
+ if(mats[nearestObjIndex].hasReflective>0)
+ {
+ /*Ri = Rr;*/
+ reflectCoeff = mats[nearestObjIndex].hasReflective;
+ hasReflect = 1.0;
+ //rayType = 1;
+ }
+ else if(mats[nearestObjIndex].hasRefractive>0)
+ {
+ refraCoff1 = 1.0f;
+ refraCoff2 = mats[nearestObjIndex].indexOfRefraction;
+ //if(glm::length(normal)-1.0>0.000001) printf("%f ",glm::length(normal));
+ float cosThetai = -1.0f * glm::dot(Ri.direction,normal);
+ float squareSinThetat = pow((double)refraCoff1/(double)refraCoff1,(double)2.0) * (1-pow((double)cosThetai,(double)2.0));
+ float Rverticle = (refraCoff1*cosThetai - refraCoff2*cosThetai) / (refraCoff1*cosThetai + refraCoff2*cosThetai);
+ Rverticle = pow((double)Rverticle,(double)2.0);
+ float Rparall = (refraCoff2*cosThetai - refraCoff1*cosThetai) / (refraCoff2*cosThetai + refraCoff1*cosThetai);
+ Rparall = pow((double)Rparall,(double)2.0);
+ float cosThetat = sqrt(1-squareSinThetat);
+ fractionRefle = (Rverticle + Rparall) / 2.0;
+ fractionRefra = 1 - fractionRefle;
+ Rrefra.origin = intersectionPoint;
+ Rrefra.direction = Ri.direction; Rrefra.direction*=(refraCoff1/refraCoff2);
+ glm::vec3 tmp = normal;
+ tmp *= (refraCoff1/refraCoff2*cosThetai - sqrt(1-squareSinThetat));
+ Rrefra.direction += tmp;
+ Rrefra.direction = glm::normalize(Rrefra.direction);
+ Rreflect = Rr;
+ hasRefract = 1.0;
+ //hasReflect = 1.0;
+ }
+ else
+ {
+ hasRefract = 0;
+ hasReflect = 0;
+ }
+ color += ambient * mats[nearestObjIndex].color;
+ //shadow check
+ for(int j = 0;j0)
+ {
+ oneColor = color;
+ Ri = Rr;
+ rayType = 1;
+ }
+ else if(hasRefract >0)
+ {
+ Ri = Rrefra;
+ rayType = 2;
+ }
+ else
+ oneColor = color;
+ rayIndex ++;
+ }
+ else if(rayType == 1)
+ {
+ oneColor += reflectCoeff * color;
+
+ if(hasReflect>0)
+ {
+ Ri = Rr;
+ rayType = 1;
+ }
+ else if(hasRefract >0)
+ {
+ Ri = Rrefra;
+ rayType = 2;
+ }
+ rayIndex ++;
+ }
+ else if(rayType == 2)
+ {
+ oneColor += fractionRefra * color;
+ Ri = Rreflect;
+ rayType = 3;
+ }
+ else if(rayType ==3)
+ {
+ oneColor += fractionRefle * color;
+ Ri = Rr;
+ rayType = 1;
+ rayIndex ++;
+ }
+
+ }
+ colors[index] = (colors[index]*(time-1)+oneColor) / time;
+ }
+
+}
- if((x<=resolution.x && y<=resolution.y)){
+__global__ void generateInitialRays(ray* initialRay,glm::vec3* rayColor, glm::vec2 resolution,float time, cameraData cam)
+{
+ int x = (blockIdx.x * blockDim.x) + threadIdx.x;
+ int y = (blockIdx.y * blockDim.y) + threadIdx.y;
+ int index = x + (y * resolution.x);
+ ray r = raycastFromCameraKernel(resolution, time, x,y,cam.position, cam.view, cam.up, cam.fov);
+ r.tag = 1; // valid, 0 if invalid
+ r.pixelId = index;
+ initialRay[index] = r;
+ rayColor[index] = glm::vec3(1,1,1);
+}
- float MAX_DEPTH = 100000000000000000;
- float depth = MAX_DEPTH;
-
- for(int i=0; i-EPSILON){
- MAX_DEPTH = depth;
- colors[index] = materials[geoms[i].materialid].color;
- }
- }
+__global__ void pathTracer(float time,cameraData cam,int rayDepth,glm::vec3* colors,
+ staticGeom* geoms,int numberOfGeoms,material* mats,int* lightIndex,int lightNum,ray* rays,int rayNum,glm::vec3* rayColor)
+ //, glm::vec3* pbo,unsigned short* ibo, glm::vec3* nbo)
+ //thrust::device_vector pbo,thrust::device_vector ibo, thrust::device_vector nbo)
+{
+ /*int x = (blockIdx.x * blockDim.x) + threadIdx.x;
+ int y = (blockIdx.y * blockDim.y) + threadIdx.y;
+ int index = x + (y * resolution.x);*/
+ int index = blockDim.x * blockIdx.x + threadIdx.x;
+
+ if(index <= rayNum)
+ {
+ ray Ri = rays[index];
+ Ri.origin += INTEROFFSET * Ri.direction;
+ int pixelId = Ri.pixelId; // this index is correspond to the index in rayColor buffer
+ if(rayDepth >= BOUNCE_DEPTH)
+ {
+ //if the ray didn't hit any bg or light, but ray depth is overload, then terminate it.
+ colors[pixelId] = (colors[pixelId]*(time-1) + rayColor[pixelId])/time;
+ return;
+ }
+
+ //test intersectoin
+ glm::vec3 intersectionPoint(0,0,0);
+ glm::vec3 normal(0,0,0);
+ int nearestObjIndex = -1; // nearest intersect object index
+ float interPointDist = -1;
+ int nearestLight = -1;
+ glm::vec3 tmpnormal(0,0,0);
+ for(int i = 0;i0))
+ {
+ if(interPointDist == -1)
+ {
+ //TODO change background color
+ rayColor[pixelId] *= Ri.color_fraction * glm::vec3(0,0,0); // hit background
+
+ }
+ else
+ {
+ rayColor[pixelId] *= mats[nearestObjIndex].emittance * mats[nearestObjIndex].color; // hit light
+ }
+ //set ray dead;
+ colors[pixelId] = (colors[pixelId]*(time-1)+rayColor[pixelId])/time;
+ //colors[pixelId] += rayColor[pixelId];
+ rays[index].tag = -1;
+ return;
+ }
+#pragma endregion
+ else // did hit objects in the scene
+ {
+ ray secondRay; //secondary Ray
+ secondRay.origin = intersectionPoint;
+ thrust::default_random_engine rng(hash(time*(rayDepth+1))*hash(pixelId));
+ thrust::uniform_real_distribution u01(0,1);
+ if(mats[nearestObjIndex].hasReflective>0)
+ {
+ //reflect ray, set current ray as this ray
+ float rand =(float) u01(rng);
+ secondRay.origin = intersectionPoint;
+ if(rand0)
+ {
+ //refract ray
+ //Fresnel law, either reflect or refract
+ //thrust to generate cofficient
+ float rand =(float)u01(rng);
+ //TODO:how to tell whether ray goes in or out ? // add index for ray, 1.0 by default
+ if(Ri.m_index == 1.0)
+ {
+ //going into the object
+ secondRay.direction = getRefractRay(rand,normal,Ri,1.0,mats[nearestObjIndex].indexOfRefraction);
+ secondRay.m_index = mats[nearestObjIndex].indexOfRefraction;
+ }
+ else
+ {
+ //going out from object
+ secondRay.direction = getRefractRay(rand,-normal,Ri,mats[nearestObjIndex].indexOfRefraction,1.0);
+ }
+ }
+ else
+ {
+ secondRay.direction = calculateRandomDirectionInHemisphere(normal, u01(rng), u01(rng));
+ secondRay.direction = glm::normalize(secondRay.direction);
+ //index changes everytime !!!
+ rayColor[pixelId] *= mats[nearestObjIndex].color;//*Ri.color_fraction;
+ }
+ rays[index] = secondRay;
+ secondRay.origin += INTEROFFSET*secondRay.direction;
+ }
- //colors[index] = generateRandomNumberFromThread(resolution, time, x, y);
- }
+ }
}
-
//TODO: FINISH THIS FUNCTION
// Wrapper for the __global__ call that sets up the kernel calls and does a ton of memory management
-void cudaRaytraceCore(uchar4* PBOpos, camera* renderCam, int frame, int iterations, material* materials, int numberOfMaterials, geom* geoms, int numberOfGeoms){
+void cudaRaytraceCore(uchar4* PBOpos, camera* renderCam, int frame, int iterations, material* materials, int numberOfMaterials, geom* geoms, int numberOfGeoms)
+ //,std::vector pbo,std::vector ibo, std::vectornbo)
+{
- int traceDepth = 1; //determines how many bounces the raytracer traces
+ // int traceDepth = 3; //determines how many bounces the raytracer traces
+
// set up crucial magic
int tileSize = 8;
dim3 threadsPerBlock(tileSize, tileSize);
@@ -174,12 +706,60 @@ void cudaRaytraceCore(uchar4* PBOpos, camera* renderCam, int frame, int iteratio
cudaMalloc((void**)&cudaimage, (int)renderCam->resolution.x*(int)renderCam->resolution.y*sizeof(glm::vec3));
cudaMemcpy( cudaimage, renderCam->image, (int)renderCam->resolution.x*(int)renderCam->resolution.y*sizeof(glm::vec3), cudaMemcpyHostToDevice);
+ //send mesh info to GPU
+ /* glm::vec3* d_pbo = NULL;
+ cudaMalloc((void**)&d_pbo,pbo.size()*sizeof(glm::vec3));
+ for(int i = 0;i d_pbo(pbo.size());
+ thrust::device_vector d_ibo(ibo.size());
+ thrust::device_vector d_nbo(nbo.size());
+ for(int i = 0;i>>(renderCam->resolution,cudaimage);
+ }
//package geometry and materials and sent to GPU
staticGeom* geomList = new staticGeom[numberOfGeoms];
+ //material
+ material* matList = new material[numberOfGeoms];
+ int lightNum = 0;
for(int i=0; i0)
+ lightNum++;
newStaticGeom.translation = geoms[i].translations[frame];
newStaticGeom.rotation = geoms[i].rotations[frame];
newStaticGeom.scale = geoms[i].scales[frame];
@@ -187,15 +767,25 @@ void cudaRaytraceCore(uchar4* PBOpos, camera* renderCam, int frame, int iteratio
newStaticGeom.inverseTransform = geoms[i].inverseTransforms[frame];
geomList[i] = newStaticGeom;
}
+ int* lightIndex = new int[lightNum];
+ int lin = 0;
+ for(int i = 0;iresolution;
@@ -203,12 +793,38 @@ void cudaRaytraceCore(uchar4* PBOpos, camera* renderCam, int frame, int iteratio
cam.view = renderCam->views[frame];
cam.up = renderCam->ups[frame];
cam.fov = renderCam->fov;
+
+ // initialize rays
+ ray* rayPool = NULL;
+ int numberOfValidRays = (int)renderCam->resolution.x*(int)renderCam->resolution.y;
+ cudaMalloc((void**)&rayPool,numberOfValidRays*sizeof(ray));
+
+ glm::vec3* rayColor = NULL; //final color of each ray, this color is independent of each iteration
+ cudaMalloc((void**)&rayColor,numberOfValidRays*sizeof(glm::vec3));
+
+ generateInitialRays<<>>(rayPool,rayColor,renderCam->resolution,(float)iterations,cam);
+
- //kernel launches
- for(int bounce = 1; bounce <= 1; ++bounce)
+
+ thrust::device_ptr rayPoolEnd;
+ // change to 1D, blocksize has nothing with resolution now.
+ int threadPerBlock = 128;//TODO tweak
+ int blockPerGrid = (int)ceil((float)numberOfValidRays/threadPerBlock);
+ for(int i = 0;i>>(renderCam->resolution, (float)iterations, (float)bounce, cam, traceDepth, cudaimage, cudageoms, numberOfGeoms, cudamaterials, numberOfMaterials);
+ if(numberOfValidRays == 0) break;
+ blockPerGrid = (int)ceil((float)numberOfValidRays/threadPerBlock);
+ pathTracer<<>>((float)iterations, cam, i, cudaimage, cudageoms, numberOfGeoms,cudamat,cudaLight,
+ lightNum,rayPool,numberOfValidRays,rayColor);//,d_pbo,d_ibo,d_nbo);
+
+ //each step, number of valid rays changes
+ thrust::device_ptr rayPoolStart = thrust::device_pointer_cast(rayPool);
+ rayPoolEnd = thrust::remove_if(rayPoolStart,rayPoolStart+numberOfValidRays,isDead());
+ numberOfValidRays = (int)( rayPoolEnd - rayPoolStart);
+ //printf("%d ",numberOfValidRays);
}
+
+
sendImageToPBO<<>>(PBOpos, renderCam->resolution, cudaimage);
//retrieve image from GPU
@@ -217,11 +833,19 @@ void cudaRaytraceCore(uchar4* PBOpos, camera* renderCam, int frame, int iteratio
//free up stuff, or else we'll leak memory like a madman
cudaFree( cudaimage );
cudaFree( cudageoms );
- cudaFree( cudamaterials );
- delete [] geomList;
+ cudaFree (cudaLight);
+ cudaFree (cudamat);
+ cudaFree (rayPool);
+ cudaFree (rayColor);
+ /* cudaFree (d_pbo);
+ cudaFree (d_ibo);
+ cudaFree (d_nbo);*/
+ delete[] matList;
+ delete[] lightIndex;
+ delete[] geomList;
- // make certain the kernel has completed
+ // make certain the kernel has completed
cudaThreadSynchronize();
checkCUDAError("Kernel failed!");
-}
+}
\ No newline at end of file
diff --git a/src/raytraceKernel.h b/src/raytraceKernel.h
index 5fcf5a3..f38f344 100755
--- a/src/raytraceKernel.h
+++ b/src/raytraceKernel.h
@@ -8,6 +8,7 @@
#ifndef RAYTRACEKERNEL_H
#define PATHTRACEKERNEL_H
+
#include
#include
#include
@@ -20,6 +21,17 @@
#include
#endif
-void cudaRaytraceCore(uchar4* pos, camera* renderCam, int frame, int iterations, material* materials, int numberOfMaterials, geom* geoms, int numberOfGeoms);
+//refer to http://wiki.thrust.googlecode.com/hg-history/312700376feeadec0b1a679a259d66ff8512d5b3/html/group__stream__compaction.html#ga517b17ceafe31a9fc70ac5127bd626de
+
+struct isDead{
+ __host__ __device__
+ bool operator()(const ray r)
+ {
+ return r.tag == -1;
+ }
+};
+
+void cudaRaytraceCore(uchar4* pos, camera* renderCam, int frame, int iterations, material* materials, int numberOfMaterials, geom* geoms,int numberOfGeoms);
+ //,int numberOfGeoms, std::vector pbo,std::vector ibo, std::vectornbo);
#endif
diff --git a/src/scene.cpp b/src/scene.cpp
index 415d627..f11b902 100755
--- a/src/scene.cpp
+++ b/src/scene.cpp
@@ -8,7 +8,7 @@
#include "scene.h"
#include
-scene::scene(string filename){
+scene::scene(string filename){
cout << "Reading scene from " << filename << " ..." << endl;
cout << " " << endl;
char* fname = (char*)filename.c_str();
@@ -33,7 +33,108 @@ scene::scene(string filename){
}
}
}
+int scene::loadMesh(string fileName,geom& newobj)
+{
+ fileName = "../../scenes/"+fileName;
+ cout<<"Read mesh.obj from"<>line;
+ }
+ while(line == "v")
+ {
+ file>>v_pos[0]>>v_pos[1]>>v_pos[2];
+ if(pboIndex == 0)
+ {
+ boundingBoxMin = v_pos;
+ boundingBoxMax = v_pos;
+ }
+ else
+ {
+ if(v_pos[0]boundingBoxMax[0])
+ boundingBoxMax[0] = v_pos[0];
+ if(v_pos[1]>boundingBoxMax[1])
+ boundingBoxMax[1] = v_pos[1];
+ if(v_pos[2]>boundingBoxMax[2])
+ boundingBoxMax[2] = v_pos[2];
+ }
+ pbo.push_back(v_pos);
+ pboIndex ++;
+ file>>line;
+ }//while(line == "v")
+ newobj.boundingBox_min = new glm::vec3(boundingBoxMin);
+ newobj.boundingBox_max = new glm::vec3(boundingBoxMax);
+
+ while(line!="f")
+ {
+ file>>line;
+ }
+ std::string faces[3];
+ while(line == "f"&&!file.eof())
+ {
+
+ file>>faces[0];
+ file>>faces[1];
+ file>>faces[2];
+
+ char* verInd = new char[100];
+ for(int i = 0;i<3;i++)
+ {
+ strcpy(verInd,faces[i].c_str());
+ faces[i] = strtok(verInd,"/");
+ v_inc[i] = atoi(faces[i].c_str());
+ ibo.push_back(v_inc[i]-1);
+ iboIndex ++;
+ }
+ file>>line;
+ newobj.numberOfTriangle ++;
+ }
+
+ glm::vec3 edge1(0,0,0); glm::vec3 edge2(0,0,0);
+ for(int i = 0;i tokens = utilityCore::tokenizeString(line);
+ // // fileName = atoi(tokens[0].c_str());
+ // //}
+ // ////load mesh infor if the object is of type MESH
+ // loadMesh(fileName,newObject);
+ //}
+
//link material
utilityCore::safeGetline(fp_in,line);
if(!line.empty() && fp_in.good()){
@@ -112,6 +227,7 @@ int scene::loadObject(string objectid){
utilityCore::safeGetline(fp_in,line);
}
+
//move frames into CUDA readable arrays
newObject.translations = new glm::vec3[frameCount];
newObject.rotations = new glm::vec3[frameCount];
diff --git a/src/scene.h b/src/scene.h
index 9bfa71f..6934eff 100755
--- a/src/scene.h
+++ b/src/scene.h
@@ -22,6 +22,7 @@ class scene{
int loadMaterial(string materialid);
int loadObject(string objectid);
int loadCamera();
+ int loadMesh(string fileName,geom& newobj);
public:
scene(string filename);
~scene();
@@ -29,6 +30,11 @@ class scene{
vector objects;
vector materials;
camera renderCam;
+
+ vector pbo;
+ vector ibo;
+ vector nbo; //face normal
+
};
#endif
diff --git a/src/sceneStructs.h b/src/sceneStructs.h
index b10f1cf..79fb73e 100755
--- a/src/sceneStructs.h
+++ b/src/sceneStructs.h
@@ -10,15 +10,45 @@
#include "cudaMat4.h"
#include
#include
-
+#include "utilities.h"
+#include
+#include
enum GEOMTYPE{ SPHERE, CUBE, MESH };
+
struct ray {
+ __host__ __device__ ray()
+ {
+ m_index = 1.0;
+ tag = 1.0;
+ color_fraction = 1.0;//keep track of how much this ray contribute the final color
+ }
glm::vec3 origin;
glm::vec3 direction;
+ int tag; // -1 if dead, 1 if alive
+ int pixelId; //each ray stores the pixelId when been initialized
+ float m_index;
+ float color_fraction;
+};
+struct mesh{
+ mesh()
+ {
+ triangleNum = 0;
+ faceNum = 0;
+ }
+ int triangleNum;
+ int faceNum;
+ glm::vec3* boundingBox_min;
+ glm::vec3* boundingBox_max;
+ glm::vec3* pbo;
+ glm::vec3* ibo;
+ glm::vec3* nbo;
+ //thrust::device_vector pbo;
};
-
struct geom {
+ geom(){
+ numberOfTriangle = 0;
+ }
enum GEOMTYPE type;
int materialid;
int frames;
@@ -27,6 +57,12 @@ struct geom {
glm::vec3* scales;
cudaMat4* transforms;
cudaMat4* inverseTransforms;
+ int pboIndexOffset;
+ int iboIndexOffset;
+ int nboIndexOffset;
+ int numberOfTriangle;
+ glm::vec3* boundingBox_min;
+ glm::vec3* boundingBox_max;
};
struct staticGeom {
@@ -37,6 +73,13 @@ struct staticGeom {
glm::vec3 scale;
cudaMat4 transform;
cudaMat4 inverseTransform;
+ int pboIndexOffset;
+ int iboIndexOffset;
+ int nboIndexOffset;
+ int numberOfTriangle;
+ glm::vec3 boundingBox_min;
+ glm::vec3 boundingBox_max;
+
};
struct cameraData {
diff --git a/src/utilities.cpp b/src/utilities.cpp
index 3fd4b73..ba0c727 100755
--- a/src/utilities.cpp
+++ b/src/utilities.cpp
@@ -33,6 +33,13 @@ std::string utilityCore::convertIntToString(int number){
return ss.str();
}
+std::string utilityCore::convertFloatToString(float number)
+{
+ std::stringstream ss;
+ ss<