diff --git a/565Pathtracer 2013-10-02 08-18-44-04.wmv b/565Pathtracer 2013-10-02 08-18-44-04.wmv
new file mode 100644
index 0000000..4111eac
Binary files /dev/null and b/565Pathtracer 2013-10-02 08-18-44-04.wmv differ
diff --git a/PROJ1_WIN/565Pathtracer.sdf b/PROJ1_WIN/565Pathtracer.sdf
new file mode 100644
index 0000000..fea6439
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer.sdf differ
diff --git a/PROJ1_WIN/565Pathtracer.v11.suo b/PROJ1_WIN/565Pathtracer.v11.suo
new file mode 100644
index 0000000..801be1c
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer.v11.suo differ
diff --git a/PROJ1_WIN/565Pathtracer/2000.bmp b/PROJ1_WIN/565Pathtracer/2000.bmp
new file mode 100644
index 0000000..f21f40c
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/2000.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/565.bmp b/PROJ1_WIN/565Pathtracer/565.bmp
new file mode 100644
index 0000000..ae4f7b7
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/565.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj b/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj
index 4515c57..1e9eb32 100755
--- a/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj
+++ b/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj
@@ -20,6 +20,10 @@
+
+
+
+
@@ -30,20 +34,26 @@
+
+
+
+
+
+
{FF21CA49-522E-4E86-B508-EE515B248FC4}
Win32Proj
@@ -75,7 +85,7 @@
-
+
@@ -109,7 +119,7 @@
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)
+ $(NVCUDASAMPLES_ROOT)\common\inc;$(CudaToolkitIncludeDir);../shared/glew/include;../shared/freeglut/include;%(AdditionalIncludeDirectories)
Console
@@ -122,7 +132,8 @@
$(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
+ $(CudaToolkitIncludeDir);$(NVCUDASAMPLES_ROOT)\common\inc;../shared/glew/includes;../shared/freeglut/includes
+ compute_20,sm_20
@@ -132,7 +143,7 @@
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;%(AdditionalIncludeDirectories)
+ $(NVCUDASAMPLES_ROOT)\common\inc;$(CudaToolkitIncludeDir);../shared/glew/include;../shared/freeglut/include;%(AdditionalIncludeDirectories)
Console
@@ -145,7 +156,10 @@
$(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
+ $(CudaToolkitIncludeDir);$(NVCUDASAMPLES_ROOT)\common\inc;../shared/glew/includes;../shared/freeglut/includes
+ compute_20,sm_20
+ true
+ true
@@ -182,7 +196,7 @@
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)
+ $(NVCUDASAMPLES_ROOT)\common\inc;$(CudaToolkitIncludeDir);../shared/glew/include;../shared/freeglut/include;%(AdditionalIncludeDirectories)
Console
@@ -195,11 +209,14 @@
$(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
+ $(CudaToolkitIncludeDir);$(NVCUDASAMPLES_ROOT)\common\inc;../shared/glew/includes;../shared/freeglut/includes
+ compute_20,sm_20
+ false
+ false
-
+
-
+
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj.filters b/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj.filters
index d49ad9c..4462629 100755
--- a/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj.filters
+++ b/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj.filters
@@ -12,6 +12,8 @@
stb_image
+
+
@@ -30,6 +32,11 @@
stb_image
+
+
+
+
+
@@ -39,4 +46,7 @@
{011aa553-95e8-4e59-b7ff-1bb89aebe21d}
+
+
+
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj.tiansijie.nvuser b/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj.tiansijie.nvuser
new file mode 100644
index 0000000..7320c3f
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/565Pathtracer.vcxproj.tiansijie.nvuser
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.exe.embed.manifest b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.exe.embed.manifest
new file mode 100644
index 0000000..11bb704
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.exe.embed.manifest
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.exe.embed.manifest.res b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.exe.embed.manifest.res
new file mode 100644
index 0000000..9c8df0e
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.exe.embed.manifest.res differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.exe.intermediate.manifest b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.exe.intermediate.manifest
new file mode 100644
index 0000000..ecea6f7
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.exe.intermediate.manifest
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.lastbuildstate b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.lastbuildstate
new file mode 100644
index 0000000..5824b32
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.lastbuildstate
@@ -0,0 +1,2 @@
+#v4.0:v100:false
+Debug (v5.5)|Win32|D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\|
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.log b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.log
new file mode 100644
index 0000000..96f715d
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer.log
@@ -0,0 +1,50 @@
+Build started 10/6/2013 2:05:31 PM.
+ 1>Project "D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\565Pathtracer\565Pathtracer.vcxproj" on node 2 (Build target(s)).
+ 1>InitializeBuildStatus:
+ Creating "Debug (v5.5)\565Pathtracer.unsuccessfulbuild" because "AlwaysCreate" was specified.
+ AddCudaCompileDeps:
+ Skipping target "AddCudaCompileDeps" because all output files are up-to-date with respect to the input files.
+ AddCudaCompilePropsDeps:
+ Skipping target "AddCudaCompilePropsDeps" because all output files are up-to-date with respect to the input files.
+ CudaBuild:
+ Skipping target "CudaBuild" because all output files are up-to-date with respect to the input files.
+ ClCompile:
+ D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /I"D:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc" /I"D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include" /I../shared/glew/include /I../shared/freeglut/include /I"D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include" /ZI /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Debug (v5.5)\\" /Fd"Debug (v5.5)\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt ..\..\src\main.cpp
+ main.cpp
+ Note: including lib: glut32.lib
+
+ 1>d:\class\565\project2\project2-pathtracer\src\glm\core\func_common.hpp : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
+ 1>d:\class\565\project2\project2-pathtracer\src\glm\core\func_common.inl : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
+ 1>d:\class\565\project2\project2-pathtracer\src\glm\core\func_integer.hpp : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
+ 1>d:\class\565\project2\project2-pathtracer\src\main.cpp(114): warning C4018: '<' : signed/unsigned mismatch
+ 1>d:\class\565\project2\project2-pathtracer\src\main.cpp(123): warning C4018: '<' : signed/unsigned mismatch
+ 1>d:\class\565\project2\project2-pathtracer\src\main.cpp(126): warning C4018: '<' : signed/unsigned mismatch
+ All outputs are up-to-date.
+ ManifestResourceCompile:
+ All outputs are up-to-date.
+ Link:
+ D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\Debug (v5.5)\565Pathtracer.exe" /INCREMENTAL /NOLOGO /LIBPATH:../shared/glew/lib /LIBPATH:../shared/freeglut/lib /LIBPATH:"D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\lib\Win32" 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 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /ManifestFile:"Debug (v5.5)\565Pathtracer.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\Debug (v5.5)\565Pathtracer.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /ENTRY:"mainCRTStartup" /DYNAMICBASE /NXCOMPAT /IMPLIB:"D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\Debug (v5.5)\565Pathtracer.lib" /MACHINE:X86 "D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\565Pathtracer\Win32/Debug (v5.5)/raytraceKernel.cu.obj"
+ "Debug (v5.5)\565Pathtracer.exe.embed.manifest.res"
+ "Debug (v5.5)\EasyBMP.obj"
+ "Debug (v5.5)\glslUtility.obj"
+ "Debug (v5.5)\image.obj"
+ "Debug (v5.5)\main.obj"
+ "Debug (v5.5)\scene.obj"
+ "Debug (v5.5)\stb_image.obj"
+ "Debug (v5.5)\stb_image_write.obj"
+ "Debug (v5.5)\tiny_obj_loader.obj"
+ "Debug (v5.5)\utilities.obj"
+ Manifest:
+ C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\mt.exe /nologo /verbose /out:"Debug (v5.5)\565Pathtracer.exe.embed.manifest" /manifest "Debug (v5.5)\565Pathtracer.exe.intermediate.manifest"
+ All outputs are up-to-date.
+ LinkEmbedManifest:
+ All outputs are up-to-date.
+ 565Pathtracer.vcxproj -> D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\Debug (v5.5)\565Pathtracer.exe
+ FinalizeBuildStatus:
+ Deleting file "Debug (v5.5)\565Pathtracer.unsuccessfulbuild".
+ Touching "Debug (v5.5)\565Pathtracer.lastbuildstate".
+ 1>Done Building Project "D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\565Pathtracer\565Pathtracer.vcxproj" (Build target(s)).
+
+Build succeeded.
+
+Time Elapsed 00:00:01.80
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer_manifest.rc b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer_manifest.rc
new file mode 100644
index 0000000..2888130
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/565Pathtracer_manifest.rc differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/CL.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/CL.read.1.tlog
new file mode 100644
index 0000000..9844d42
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/CL.read.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/CL.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/CL.write.1.tlog
new file mode 100644
index 0000000..8f6b88f
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/CL.write.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/EasyBMP.obj b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/EasyBMP.obj
new file mode 100644
index 0000000..f3772df
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/EasyBMP.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/cl.command.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/cl.command.1.tlog
new file mode 100644
index 0000000..6cebb9d
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/cl.command.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/glslUtility.obj b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/glslUtility.obj
new file mode 100644
index 0000000..95e1940
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/glslUtility.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/image.obj b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/image.obj
new file mode 100644
index 0000000..f7337d1
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/image.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.10916-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.10916-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.10916-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.10916-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.10916-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.10916-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.10916.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.10916.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.10916.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.10916.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.10916.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.10916.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.11180-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.11180-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.11180-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.11180-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.11180-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.11180-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.11180.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.11180.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.11180.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.11180.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.11180.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.11180.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.13224-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.13224-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.13224-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.13224-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.13224-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.13224-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.13224.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.13224.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.13224.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.13224.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.13224.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.13224.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.15752-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.15752-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.15752-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.15752-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.15752-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.15752-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.15752.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.15752.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.15752.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.15752.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.15752.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.15752.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2096-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2096-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2096-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2096-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2096-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2096-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2096.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2096.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2096.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2096.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2096.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2096.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2204-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2204-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2204-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2204-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2204-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2204-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2204.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2204.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2204.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2204.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2204.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2204.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2872-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2872-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2872-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2872-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2872-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2872-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2872.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2872.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2872.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2872.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2872.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.2872.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.3652-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.3652-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.3652-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.3652-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.3652-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.3652-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.3652.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.3652.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.3652.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.3652.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.3652.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.3652.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4420-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4420-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4420-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4420-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4420-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4420-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4420.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4420.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4420.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4420.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4420.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4420.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4452-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4452-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4452-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4452-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4452-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4452-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4452.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4452.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4452.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4452.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4452.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.4452.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6800-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6800-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6800-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6800-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6800-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6800-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6800.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6800.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6800.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6800.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6800.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6800.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6872-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6872-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6872-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6872-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6872-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6872-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6872.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6872.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6872.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6872.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6872.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.6872.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.8684-cvtres.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.8684-cvtres.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.8684-cvtres.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.8684-cvtres.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.8684-cvtres.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.8684-cvtres.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.8684.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.8684.read.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.8684.read.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.8684.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.8684.write.1.tlog
new file mode 100644
index 0000000..46b134b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.8684.write.1.tlog
@@ -0,0 +1 @@
+ÿþ
\ No newline at end of file
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.command.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.command.1.tlog
new file mode 100644
index 0000000..32aacaa
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.command.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.read.1.tlog
new file mode 100644
index 0000000..a6333a7
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.read.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.write.1.tlog
new file mode 100644
index 0000000..053d395
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/link.write.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/main.obj b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/main.obj
new file mode 100644
index 0000000..d95958b
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/main.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/mt.command.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/mt.command.1.tlog
new file mode 100644
index 0000000..da41d6c
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/mt.command.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/mt.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/mt.read.1.tlog
new file mode 100644
index 0000000..e13e14d
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/mt.read.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/mt.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/mt.write.1.tlog
new file mode 100644
index 0000000..e13e14d
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/mt.write.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/raytraceKernel.cu.cache b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/raytraceKernel.cu.cache
new file mode 100644
index 0000000..3ca60e2
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/raytraceKernel.cu.cache
@@ -0,0 +1,49 @@
+Identity=..\..\src\raytraceKernel.cu
+AdditionalCompilerOptions=
+AdditionalCompilerOptions=
+AdditionalDependencies=
+AdditionalDeps=
+AdditionalLibraryDirectories=
+AdditionalOptions=
+AdditionalOptions=
+CInterleavedPTX=false
+CodeGeneration=compute_20,sm_20
+CodeGeneration=compute_20,sm_20
+CompileOut=D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\565Pathtracer\Win32/Debug (v5.5)/raytraceKernel.cu.obj
+CudaRuntime=Static
+CudaToolkitCustomDir=
+Defines=;WIN32;_DEBUG;_CONSOLE;_UNICODE;UNICODE;
+Emulation=false
+FastMath=false
+GenerateLineInfo=false
+GenerateRelocatableDeviceCode=false
+GPUDebugInfo=true
+GPUDebugInfo=true
+HostDebugInfo=true
+Include=D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include;D:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc;../shared/glew/includes;../shared/freeglut/includes;D:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc;D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include;../shared/glew/include;../shared/freeglut/include;;D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include
+Inputs=
+Keep=false
+KeepDir=Debug (v5.5)
+LinkOut=
+MaxRegCount=0
+NvccCompilation=compile
+NvccPath=
+Optimization=Od
+Optimization=Od
+PerformDeviceLink=
+PtxAsOptionV=false
+RequiredIncludes=
+Runtime=MDd
+Runtime=MDd
+RuntimeChecks=RTC1
+RuntimeChecks=RTC1
+TargetMachinePlatform=32
+TargetMachinePlatform=32
+TypeInfo=
+TypeInfo=
+UseHostDefines=true
+UseHostInclude=true
+UseHostLibraryDependencies=
+UseHostLibraryDirectories=
+Warning=W3
+Warning=W3
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/rc.command.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/rc.command.1.tlog
new file mode 100644
index 0000000..2d07bc9
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/rc.command.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/rc.read.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/rc.read.1.tlog
new file mode 100644
index 0000000..a173ca0
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/rc.read.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/rc.write.1.tlog b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/rc.write.1.tlog
new file mode 100644
index 0000000..6e0b06a
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/rc.write.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/scene.obj b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/scene.obj
new file mode 100644
index 0000000..32d6cdf
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/scene.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/stb_image.obj b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/stb_image.obj
new file mode 100644
index 0000000..3f7511c
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/stb_image.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/stb_image_write.obj b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/stb_image_write.obj
new file mode 100644
index 0000000..5d7583a
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/stb_image_write.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/tiny_obj_loader.obj b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/tiny_obj_loader.obj
new file mode 100644
index 0000000..1478e6d
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/tiny_obj_loader.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/utilities.obj b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/utilities.obj
new file mode 100644
index 0000000..6e5171b
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/utilities.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/vc100.idb b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/vc100.idb
new file mode 100644
index 0000000..d9a8dd3
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/vc100.idb differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug (v5.5)/vc100.pdb b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/vc100.pdb
new file mode 100644
index 0000000..0fffdba
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Debug (v5.5)/vc100.pdb differ
diff --git a/PROJ1_WIN/565Pathtracer/Debug/565Pathtracer.lastbuildstate b/PROJ1_WIN/565Pathtracer/Debug/565Pathtracer.lastbuildstate
new file mode 100644
index 0000000..6f89fbd
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug/565Pathtracer.lastbuildstate
@@ -0,0 +1,2 @@
+#v4.0:v100:false
+Debug|Win32|D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\|
diff --git a/PROJ1_WIN/565Pathtracer/Debug/565Pathtracer.log b/PROJ1_WIN/565Pathtracer/Debug/565Pathtracer.log
new file mode 100644
index 0000000..997b02a
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug/565Pathtracer.log
@@ -0,0 +1,14 @@
+Build started 9/22/2013 3:52:14 PM.
+ 1>Project "D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\565Pathtracer\565Pathtracer.vcxproj" on node 2 (Build target(s)).
+ 1>PrepareForBuild:
+ Creating directory "D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\Debug\".
+ InitializeBuildStatus:
+ Creating "Debug\565Pathtracer.unsuccessfulbuild" because "AlwaysCreate" was specified.
+ AddCudaCompileDeps:
+ D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cl.exe /E /nologo /showIncludes /TP /Iinclude /I"D:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc" /I../shared/glew/includes /I../shared/freeglut/includes /Ibin /Iinclude /I. /FIcuda_runtime.h /c D:\Class\565\Project2\Project2-Pathtracer\src\raytraceKernel.cu
+ 1>D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\Build\CUDA 4.0.targets(245,9): error : The CUDA Toolkit v4.0 directory '' does not exist. Please verify the CUDA Toolkit is installed properly or define the CudaToolkitDir property to resolve this error.
+ 1>Done Building Project "D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\565Pathtracer\565Pathtracer.vcxproj" (Build target(s)) -- FAILED.
+
+Build FAILED.
+
+Time Elapsed 00:00:06.78
diff --git a/PROJ1_WIN/565Pathtracer/Debug/565Pathtracer.unsuccessfulbuild b/PROJ1_WIN/565Pathtracer/Debug/565Pathtracer.unsuccessfulbuild
new file mode 100644
index 0000000..e69de29
diff --git a/PROJ1_WIN/565Pathtracer/Debug/raytraceKernel.cu.cache b/PROJ1_WIN/565Pathtracer/Debug/raytraceKernel.cu.cache
new file mode 100644
index 0000000..3b5d9a3
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Debug/raytraceKernel.cu.cache
@@ -0,0 +1,26 @@
+Identity=..\..\src\raytraceKernel.cu
+AdditionalDeps=
+AdditionalOptions=
+CInterleavedPTX=false
+CodeGeneration=compute_20,sm_20
+CompileOut=D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\565Pathtracer\Win32/Debug/raytraceKernel.cu.obj
+CudaToolkitCustomDir=
+Defines=
+Emulation=false
+FastMath=false
+GPUDebugInfo=true
+HostDebugInfo=true
+Include=include;D:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc;../shared/glew/includes;../shared/freeglut/includes
+Keep=false
+KeepDir=Debug
+MaxRegCount=0
+NvccCompilation=compile
+NvccPath=
+Optimization=Od
+PtxAsOptionV=false
+RequiredIncludes=
+Runtime=MDd
+RuntimeChecks=Default
+TargetMachinePlatform=32
+TypeInfo=false
+Warning=W3
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/565Pathtracer.exe.intermediate.manifest b/PROJ1_WIN/565Pathtracer/Release (v5.5)/565Pathtracer.exe.intermediate.manifest
new file mode 100644
index 0000000..ecea6f7
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Release (v5.5)/565Pathtracer.exe.intermediate.manifest
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/565Pathtracer.lastbuildstate b/PROJ1_WIN/565Pathtracer/Release (v5.5)/565Pathtracer.lastbuildstate
new file mode 100644
index 0000000..898d9c5
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Release (v5.5)/565Pathtracer.lastbuildstate
@@ -0,0 +1,2 @@
+#v4.0:v100:false
+Release (v5.5)|Win32|D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\|
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/565Pathtracer.log b/PROJ1_WIN/565Pathtracer/Release (v5.5)/565Pathtracer.log
new file mode 100644
index 0000000..d70338a
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Release (v5.5)/565Pathtracer.log
@@ -0,0 +1,46 @@
+Build started 10/12/2013 11:27:24 PM.
+ 1>Project "D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\565Pathtracer\565Pathtracer.vcxproj" on node 2 (Build target(s)).
+ 1>InitializeBuildStatus:
+ Creating "Release (v5.5)\565Pathtracer.unsuccessfulbuild" because "AlwaysCreate" was specified.
+ AddCudaCompileDeps:
+ Skipping target "AddCudaCompileDeps" because all output files are up-to-date with respect to the input files.
+ AddCudaCompilePropsDeps:
+ Skipping target "AddCudaCompilePropsDeps" because all output files are up-to-date with respect to the input files.
+ CudaBuild:
+ Skipping target "CudaBuild" because all output files are up-to-date with respect to the input files.
+ ClCompile:
+ D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /I"D:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc" /I"D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include" /I../shared/glew/include /I../shared/freeglut/include /I"D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include" /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D WIN32 /D NDEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Release (v5.5)\\" /Fd"Release (v5.5)\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt ..\..\src\main.cpp
+ main.cpp
+ Note: including lib: glut32.lib
+
+ 1>d:\class\565\project2\project2-pathtracer\src\glm\./core/func_common.hpp : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
+ 1>d:\class\565\project2\project2-pathtracer\src\glm\core\func_common.inl : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
+ 1>d:\class\565\project2\project2-pathtracer\src\glm\./core/func_integer.hpp : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
+ 1>..\..\src\main.cpp(117): warning C4018: '<' : signed/unsigned mismatch
+ 1>..\..\src\main.cpp(126): warning C4018: '<' : signed/unsigned mismatch
+ 1>..\..\src\main.cpp(129): warning C4018: '<' : signed/unsigned mismatch
+ All outputs are up-to-date.
+ Link:
+ D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\Release (v5.5)\565Pathtracer.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:../shared/glew/lib /LIBPATH:../shared/freeglut/lib /LIBPATH:"D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\lib\Win32" 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 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /ManifestFile:"Release (v5.5)\565Pathtracer.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\Release (v5.5)\565Pathtracer.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /TLBID:1 /ENTRY:"mainCRTStartup" /DYNAMICBASE /NXCOMPAT /IMPLIB:"D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\Release (v5.5)\565Pathtracer.lib" /MACHINE:X86 "D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\565Pathtracer\Win32/Release (v5.5)/raytraceKernel.cu.obj"
+ "Release (v5.5)\EasyBMP.obj"
+ "Release (v5.5)\glslUtility.obj"
+ "Release (v5.5)\image.obj"
+ "Release (v5.5)\main.obj"
+ "Release (v5.5)\scene.obj"
+ "Release (v5.5)\stb_image.obj"
+ "Release (v5.5)\stb_image_write.obj"
+ "Release (v5.5)\tiny_obj_loader.obj"
+ "Release (v5.5)\utilities.obj"
+ Generating code
+ Finished generating code
+ 565Pathtracer.vcxproj -> D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\Release (v5.5)\565Pathtracer.exe
+ Manifest:
+ C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\mt.exe /nologo /verbose /outputresource:"D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\Release (v5.5)\565Pathtracer.exe;#1" /manifest "Release (v5.5)\565Pathtracer.exe.intermediate.manifest"
+ FinalizeBuildStatus:
+ Deleting file "Release (v5.5)\565Pathtracer.unsuccessfulbuild".
+ Touching "Release (v5.5)\565Pathtracer.lastbuildstate".
+ 1>Done Building Project "D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\565Pathtracer\565Pathtracer.vcxproj" (Build target(s)).
+
+Build succeeded.
+
+Time Elapsed 00:00:07.79
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/CL.read.1.tlog b/PROJ1_WIN/565Pathtracer/Release (v5.5)/CL.read.1.tlog
new file mode 100644
index 0000000..9f3f767
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/CL.read.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/CL.write.1.tlog b/PROJ1_WIN/565Pathtracer/Release (v5.5)/CL.write.1.tlog
new file mode 100644
index 0000000..d19a5ef
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/CL.write.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/EasyBMP.obj b/PROJ1_WIN/565Pathtracer/Release (v5.5)/EasyBMP.obj
new file mode 100644
index 0000000..15dc29d
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/EasyBMP.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/cl.command.1.tlog b/PROJ1_WIN/565Pathtracer/Release (v5.5)/cl.command.1.tlog
new file mode 100644
index 0000000..14f76e9
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/cl.command.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/glslUtility.obj b/PROJ1_WIN/565Pathtracer/Release (v5.5)/glslUtility.obj
new file mode 100644
index 0000000..639ed4d
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/glslUtility.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/image.obj b/PROJ1_WIN/565Pathtracer/Release (v5.5)/image.obj
new file mode 100644
index 0000000..ea2f614
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/image.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/link.command.1.tlog b/PROJ1_WIN/565Pathtracer/Release (v5.5)/link.command.1.tlog
new file mode 100644
index 0000000..5a87b91
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/link.command.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/link.read.1.tlog b/PROJ1_WIN/565Pathtracer/Release (v5.5)/link.read.1.tlog
new file mode 100644
index 0000000..3cb9e04
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/link.read.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/link.write.1.tlog b/PROJ1_WIN/565Pathtracer/Release (v5.5)/link.write.1.tlog
new file mode 100644
index 0000000..430cb3c
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/link.write.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/main.obj b/PROJ1_WIN/565Pathtracer/Release (v5.5)/main.obj
new file mode 100644
index 0000000..233b892
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/main.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/mt.command.1.tlog b/PROJ1_WIN/565Pathtracer/Release (v5.5)/mt.command.1.tlog
new file mode 100644
index 0000000..3486484
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/mt.command.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/mt.read.1.tlog b/PROJ1_WIN/565Pathtracer/Release (v5.5)/mt.read.1.tlog
new file mode 100644
index 0000000..fbd43f9
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/mt.read.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/mt.write.1.tlog b/PROJ1_WIN/565Pathtracer/Release (v5.5)/mt.write.1.tlog
new file mode 100644
index 0000000..be462a5
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/mt.write.1.tlog differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/raytraceKernel.cu.cache b/PROJ1_WIN/565Pathtracer/Release (v5.5)/raytraceKernel.cu.cache
new file mode 100644
index 0000000..f12ad5b
--- /dev/null
+++ b/PROJ1_WIN/565Pathtracer/Release (v5.5)/raytraceKernel.cu.cache
@@ -0,0 +1,49 @@
+Identity=..\..\src\raytraceKernel.cu
+AdditionalCompilerOptions=
+AdditionalCompilerOptions=
+AdditionalDependencies=
+AdditionalDeps=
+AdditionalLibraryDirectories=
+AdditionalOptions=
+AdditionalOptions=
+CInterleavedPTX=false
+CodeGeneration=compute_20,sm_20
+CodeGeneration=compute_20,sm_20
+CompileOut=D:\Class\565\Project2\Project2-Pathtracer\PROJ1_WIN\565Pathtracer\Win32/Release (v5.5)/raytraceKernel.cu.obj
+CudaRuntime=Static
+CudaToolkitCustomDir=
+Defines=;WIN32;NDEBUG;_CONSOLE;_UNICODE;UNICODE;
+Emulation=false
+FastMath=false
+GenerateLineInfo=false
+GenerateRelocatableDeviceCode=false
+GPUDebugInfo=false
+GPUDebugInfo=false
+HostDebugInfo=false
+Include=D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include;D:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc;../shared/glew/includes;../shared/freeglut/includes;D:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc;D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include;../shared/glew/include;../shared/freeglut/include;;D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include
+Inputs=
+Keep=false
+KeepDir=Release (v5.5)
+LinkOut=
+MaxRegCount=0
+NvccCompilation=compile
+NvccPath=
+Optimization=O2
+Optimization=O2
+PerformDeviceLink=
+PtxAsOptionV=false
+RequiredIncludes=
+Runtime=MD
+Runtime=MD
+RuntimeChecks=Default
+RuntimeChecks=Default
+TargetMachinePlatform=32
+TargetMachinePlatform=32
+TypeInfo=
+TypeInfo=
+UseHostDefines=true
+UseHostInclude=true
+UseHostLibraryDependencies=
+UseHostLibraryDirectories=
+Warning=W3
+Warning=W3
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/scene.obj b/PROJ1_WIN/565Pathtracer/Release (v5.5)/scene.obj
new file mode 100644
index 0000000..6b3897e
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/scene.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/stb_image.obj b/PROJ1_WIN/565Pathtracer/Release (v5.5)/stb_image.obj
new file mode 100644
index 0000000..ad442bb
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/stb_image.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/stb_image_write.obj b/PROJ1_WIN/565Pathtracer/Release (v5.5)/stb_image_write.obj
new file mode 100644
index 0000000..fcf123c
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/stb_image_write.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/tiny_obj_loader.obj b/PROJ1_WIN/565Pathtracer/Release (v5.5)/tiny_obj_loader.obj
new file mode 100644
index 0000000..be406a7
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/tiny_obj_loader.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/utilities.obj b/PROJ1_WIN/565Pathtracer/Release (v5.5)/utilities.obj
new file mode 100644
index 0000000..33c1828
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/utilities.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/Release (v5.5)/vc100.pdb b/PROJ1_WIN/565Pathtracer/Release (v5.5)/vc100.pdb
new file mode 100644
index 0000000..080473d
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Release (v5.5)/vc100.pdb 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..436ad59
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Win32/Debug (v5.5)/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..06ef595
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/Win32/Release (v5.5)/raytraceKernel.cu.obj differ
diff --git a/PROJ1_WIN/565Pathtracer/test.0 - Copy (2).bmp b/PROJ1_WIN/565Pathtracer/test.0 - Copy (2).bmp
new file mode 100644
index 0000000..9198e40
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test.0 - Copy (2).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test.0 - Copy (3).bmp b/PROJ1_WIN/565Pathtracer/test.0 - Copy (3).bmp
new file mode 100644
index 0000000..667cdf4
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test.0 - Copy (3).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test.0 - Copy (4).bmp b/PROJ1_WIN/565Pathtracer/test.0 - Copy (4).bmp
new file mode 100644
index 0000000..03ab104
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test.0 - Copy (4).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test.0 - Copy.bmp
new file mode 100644
index 0000000..e7a3f1d
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test.0.bmp b/PROJ1_WIN/565Pathtracer/test.0.bmp
new file mode 100644
index 0000000..03ab104
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test100.0.bmp b/PROJ1_WIN/565Pathtracer/test100.0.bmp
new file mode 100644
index 0000000..2ee553f
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test100.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test1000.0.bmp b/PROJ1_WIN/565Pathtracer/test1000.0.bmp
new file mode 100644
index 0000000..54d9a8b
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test1000.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test1000Scatter.0.bmp b/PROJ1_WIN/565Pathtracer/test1000Scatter.0.bmp
new file mode 100644
index 0000000..4665c37
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test1000Scatter.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test100Scatter.0.bmp b/PROJ1_WIN/565Pathtracer/test100Scatter.0.bmp
new file mode 100644
index 0000000..fce0b98
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test100Scatter.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test200.0.bmp b/PROJ1_WIN/565Pathtracer/test200.0.bmp
new file mode 100644
index 0000000..b2d03c1
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test200.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2000.0 - Copy (2).bmp b/PROJ1_WIN/565Pathtracer/test2000.0 - Copy (2).bmp
new file mode 100644
index 0000000..29d8a21
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2000.0 - Copy (2).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2000.0 - Copy (3).bmp b/PROJ1_WIN/565Pathtracer/test2000.0 - Copy (3).bmp
new file mode 100644
index 0000000..54fcc77
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2000.0 - Copy (3).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2000.0 - Copy - Copy.bmp b/PROJ1_WIN/565Pathtracer/test2000.0 - Copy - Copy.bmp
new file mode 100644
index 0000000..a44515b
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2000.0 - Copy - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2000.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test2000.0 - Copy.bmp
new file mode 100644
index 0000000..a44515b
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2000.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2000.0.bmp b/PROJ1_WIN/565Pathtracer/test2000.0.bmp
new file mode 100644
index 0000000..243b5f9
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2000.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2000FUN.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test2000FUN.0 - Copy.bmp
new file mode 100644
index 0000000..ff499a3
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2000FUN.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2000FUN.0.bmp b/PROJ1_WIN/565Pathtracer/test2000FUN.0.bmp
new file mode 100644
index 0000000..ff499a3
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2000FUN.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2000Scatter.0 - Copy (3).bmp b/PROJ1_WIN/565Pathtracer/test2000Scatter.0 - Copy (3).bmp
new file mode 100644
index 0000000..07b6957
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2000Scatter.0 - Copy (3).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2000Scatter.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test2000Scatter.0 - Copy.bmp
new file mode 100644
index 0000000..d0a3e63
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2000Scatter.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2000Scatter.0.bmp b/PROJ1_WIN/565Pathtracer/test2000Scatter.0.bmp
new file mode 100644
index 0000000..1667913
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2000Scatter.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2500.0 - Copy (2).bmp b/PROJ1_WIN/565Pathtracer/test2500.0 - Copy (2).bmp
new file mode 100644
index 0000000..b11ee25
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2500.0 - Copy (2).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2500.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test2500.0 - Copy.bmp
new file mode 100644
index 0000000..b177a38
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2500.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test2500.0.bmp b/PROJ1_WIN/565Pathtracer/test2500.0.bmp
new file mode 100644
index 0000000..b11ee25
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test2500.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3000.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test3000.0 - Copy.bmp
new file mode 100644
index 0000000..2214a01
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3000.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3000.0.bmp b/PROJ1_WIN/565Pathtracer/test3000.0.bmp
new file mode 100644
index 0000000..2214a01
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3000.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3000Scatter.0 - Copy (2).bmp b/PROJ1_WIN/565Pathtracer/test3000Scatter.0 - Copy (2).bmp
new file mode 100644
index 0000000..8ec292a
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3000Scatter.0 - Copy (2).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3000Scatter.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test3000Scatter.0 - Copy.bmp
new file mode 100644
index 0000000..d97ad99
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3000Scatter.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3000Scatter.0.bmp b/PROJ1_WIN/565Pathtracer/test3000Scatter.0.bmp
new file mode 100644
index 0000000..8ec292a
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3000Scatter.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (2).bmp b/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (2).bmp
new file mode 100644
index 0000000..f8e7f36
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (2).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (3).bmp b/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (3).bmp
new file mode 100644
index 0000000..3482c9f
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (3).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (4).bmp b/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (4).bmp
new file mode 100644
index 0000000..ce3d351
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (4).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (5).bmp b/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (5).bmp
new file mode 100644
index 0000000..5ca6c1c
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (5).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (6).bmp b/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (6).bmp
new file mode 100644
index 0000000..635561f
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3500.0 - Copy (6).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3500.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test3500.0 - Copy.bmp
new file mode 100644
index 0000000..72c7d26
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3500.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3500.0.bmp b/PROJ1_WIN/565Pathtracer/test3500.0.bmp
new file mode 100644
index 0000000..635561f
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3500.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3500Scatter.0 - Copy (2).bmp b/PROJ1_WIN/565Pathtracer/test3500Scatter.0 - Copy (2).bmp
new file mode 100644
index 0000000..71b7341
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3500Scatter.0 - Copy (2).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3500Scatter.0 - Copy (3).bmp b/PROJ1_WIN/565Pathtracer/test3500Scatter.0 - Copy (3).bmp
new file mode 100644
index 0000000..e0b165d
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3500Scatter.0 - Copy (3).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3500Scatter.0 - Copy - Copy.bmp b/PROJ1_WIN/565Pathtracer/test3500Scatter.0 - Copy - Copy.bmp
new file mode 100644
index 0000000..de9d23a
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3500Scatter.0 - Copy - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3500Scatter.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test3500Scatter.0 - Copy.bmp
new file mode 100644
index 0000000..de9d23a
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3500Scatter.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test3500Scatter.0.bmp b/PROJ1_WIN/565Pathtracer/test3500Scatter.0.bmp
new file mode 100644
index 0000000..4c80485
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test3500Scatter.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test4000.0 - Copy (2).bmp b/PROJ1_WIN/565Pathtracer/test4000.0 - Copy (2).bmp
new file mode 100644
index 0000000..80393ae
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test4000.0 - Copy (2).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test4000.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test4000.0 - Copy.bmp
new file mode 100644
index 0000000..1c4042b
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test4000.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test4000.0.bmp b/PROJ1_WIN/565Pathtracer/test4000.0.bmp
new file mode 100644
index 0000000..80393ae
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test4000.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test4000FUN.0.bmp b/PROJ1_WIN/565Pathtracer/test4000FUN.0.bmp
new file mode 100644
index 0000000..d6ee583
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test4000FUN.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test4000FUNScattering.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test4000FUNScattering.0 - Copy.bmp
new file mode 100644
index 0000000..d82a901
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test4000FUNScattering.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test4000FUNScattering.0.bmp b/PROJ1_WIN/565Pathtracer/test4000FUNScattering.0.bmp
new file mode 100644
index 0000000..078e073
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test4000FUNScattering.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test4000Scatter.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test4000Scatter.0 - Copy.bmp
new file mode 100644
index 0000000..e97ea9f
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test4000Scatter.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test4000Scatter.0.bmp b/PROJ1_WIN/565Pathtracer/test4000Scatter.0.bmp
new file mode 100644
index 0000000..e97ea9f
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test4000Scatter.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test5000.0 - Copy (2).bmp b/PROJ1_WIN/565Pathtracer/test5000.0 - Copy (2).bmp
new file mode 100644
index 0000000..06a12cb
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test5000.0 - Copy (2).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test5000.0 - Copy (3).bmp b/PROJ1_WIN/565Pathtracer/test5000.0 - Copy (3).bmp
new file mode 100644
index 0000000..f3a5d23
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test5000.0 - Copy (3).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test5000.0 - Copy (4).bmp b/PROJ1_WIN/565Pathtracer/test5000.0 - Copy (4).bmp
new file mode 100644
index 0000000..d423304
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test5000.0 - Copy (4).bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test5000.0 - Copy.bmp b/PROJ1_WIN/565Pathtracer/test5000.0 - Copy.bmp
new file mode 100644
index 0000000..5238287
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test5000.0 - Copy.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/test5000.0.bmp b/PROJ1_WIN/565Pathtracer/test5000.0.bmp
new file mode 100644
index 0000000..d423304
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/test5000.0.bmp differ
diff --git a/PROJ1_WIN/565Pathtracer/vc100.pdb b/PROJ1_WIN/565Pathtracer/vc100.pdb
new file mode 100644
index 0000000..0289bcc
Binary files /dev/null and b/PROJ1_WIN/565Pathtracer/vc100.pdb differ
diff --git a/PROJ1_WIN/Debug (v5.5)/565Pathtracer.exe b/PROJ1_WIN/Debug (v5.5)/565Pathtracer.exe
new file mode 100644
index 0000000..ea326d0
Binary files /dev/null and b/PROJ1_WIN/Debug (v5.5)/565Pathtracer.exe differ
diff --git a/PROJ1_WIN/Debug (v5.5)/565Pathtracer.ilk b/PROJ1_WIN/Debug (v5.5)/565Pathtracer.ilk
new file mode 100644
index 0000000..5a98371
Binary files /dev/null and b/PROJ1_WIN/Debug (v5.5)/565Pathtracer.ilk differ
diff --git a/PROJ1_WIN/Debug (v5.5)/565Pathtracer.pdb b/PROJ1_WIN/Debug (v5.5)/565Pathtracer.pdb
new file mode 100644
index 0000000..7fd6d1c
Binary files /dev/null and b/PROJ1_WIN/Debug (v5.5)/565Pathtracer.pdb differ
diff --git a/PROJ1_WIN/Release (v5.5)/565Pathtracer.exe b/PROJ1_WIN/Release (v5.5)/565Pathtracer.exe
new file mode 100644
index 0000000..3eb59c9
Binary files /dev/null and b/PROJ1_WIN/Release (v5.5)/565Pathtracer.exe differ
diff --git a/PROJ1_WIN/Release (v5.5)/565Pathtracer.pdb b/PROJ1_WIN/Release (v5.5)/565Pathtracer.pdb
new file mode 100644
index 0000000..8535b13
Binary files /dev/null and b/PROJ1_WIN/Release (v5.5)/565Pathtracer.pdb differ
diff --git a/PROJ1_WIN/src/raytraceKernel.cu.deps b/PROJ1_WIN/src/raytraceKernel.cu.deps
new file mode 100644
index 0000000..9343f94
--- /dev/null
+++ b/PROJ1_WIN/src/raytraceKernel.cu.deps
@@ -0,0 +1,1325 @@
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda_runtime.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_config.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\sal.h
+d:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\vadefs.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\limits.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stddef.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\channel_descriptor.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_runtime_api.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_device_runtime_api.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_runtime_api.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\common_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\time.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\wtime.inl
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\time.inl
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\math_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdlib.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cmath
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\yvals.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\use_ansi.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cstdlib
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\channel_descriptor.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\channel_descriptor.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_11_atomic_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_12_atomic_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_13_double_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_20_atomic_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_32_atomic_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_35_atomic_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_32_atomic_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_20_intrinsics.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_30_intrinsics.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_32_intrinsics.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_35_intrinsics.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\sm_32_intrinsics.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_fetch_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\cuda_texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_indirect_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_indirect_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\builtin_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\driver_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\surface_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\texture_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\host_defines.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_functions.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\device_launch_parameters.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\vector_types.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/device_vector.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/config.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/simple_defines.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/compiler.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/host_system.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/device_system.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/host_device.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\host_defines.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/debug.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/compiler_fence.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\intrin.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\setjmp.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\immintrin.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\wmmintrin.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\nmmintrin.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\smmintrin.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\tmmintrin.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\pmmintrin.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\emmintrin.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xmmintrin.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\mmintrin.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\malloc.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ammintrin.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\mm3dnow.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\mmintrin.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/forceinline.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/config/hd_warning_disable.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/device_malloc_allocator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/device_ptr.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/memory.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/pointer_traits.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/has_trivial_assign.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/is_metafunction_defined.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/has_nested_type.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/iterator_traits.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\iterator
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\istream
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ios
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xlocnum
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\climits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cstdio
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\swprintf.inl
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\streambuf
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xiosbase
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xlocale
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cstring
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdexcept
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\exception
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xstddef
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cstddef
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\eh.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xstring
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xmemory
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\new
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xutility
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\iosfwd
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cwchar
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\wchar.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdbg.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\type_traits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\limits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ymath.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cfloat
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\float.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtwrn.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xtr1common
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtype_traits
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\typeinfo
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xlocinfo
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xlocinfo.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ctype.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\locale.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xdebug
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\system_error
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cerrno
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\errno.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\share.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/iterator_traversal_tags.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/host_system_tag.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/execution_policy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/execution_policy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/device_system_tag.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/execution_policy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/any_system_tag.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/iterator_traits.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/iterator_categories.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/universal_categories.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/iterator_category_to_traversal.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/iterator_category_to_system.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/pointer.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/iterator_adaptor.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/iterator_facade.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/iterator_facade_category.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/is_iterator_category.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/distance_from_result.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/use_default.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/iterator_adaptor_base.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/reference_forward_declaration.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/pointer.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/reference.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/reference.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/select_system.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/minimum_system.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/minimum_type.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/type_traits.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/memory.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/tag.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/pair.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/pair.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/swap.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/memory.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/malloc_and_free.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/malloc_and_free.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/raw_pointer_cast.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/malloc_and_free.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/guarded_cuda_runtime_api.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda_runtime_api.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/system_error.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/error_code.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/errno.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\iostream
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/error_category.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/functional.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\functional
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfunctional
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xrefwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxresult
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallobj
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxpmfcaller
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallpmf
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallfun
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xawrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxcallwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxrefwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxmem_fn
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxfunction
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xawrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind0
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxbind1
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/placeholder.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/actor.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/tuple.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/tuple.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/value.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/composite.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/assignment_operator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/operator_adaptors.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/result_of.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/function_traits.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/actor.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/argument.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/arithmetic_operators.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/relational_operators.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/logical_operators.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/bitwise_operators.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/functional/operators/compound_assignment_operators.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/error_code.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/error_condition.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/system_error.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/error.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\driver_types.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/error.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/bad_alloc.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/static_assert.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/malloc_and_free.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/get_value.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/get_value.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/get_value.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/assign_value.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/copy.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/copy.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/internal_functional.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/tuple_of_iterator_references.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/raw_reference_cast.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/raw_reference_cast.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/tuple_transform.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/tuple_meta_transform.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\memory
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xfwrap1
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxshared
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/transform.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/transform.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/transform.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/transform.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/for_each.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/for_each.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/for_each.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/for_each.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/for_each.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/for_each.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/function.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/for_each.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/for_each.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/minmax.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/distance.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/distance.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/advance.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/advance.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/advance.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/advance.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/distance.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/distance.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/launch_closure.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/cuda_launch_config.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/launch_closure.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/temporary_array.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/retag.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/retag.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/tagged_iterator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/contiguous_storage.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/normal_iterator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/is_trivial_iterator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/allocator_traits.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/allocator_traits.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/has_member_function.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/is_call_possible.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/contiguous_storage.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/copy_construct_range.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/copy_construct_range.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/zip_iterator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/zip_iterator_base.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/minimum_category.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/zip_iterator.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/default_construct_range.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/default_construct_range.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/uninitialized_fill.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/uninitialized_fill.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/uninitialized_fill.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/uninitialized_fill.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/fill.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/fill.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/fill.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/generate.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/generate.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/generate.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/generate.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/generate.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/generate.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/generate.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/fill.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/fill.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/fill.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/fill.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/util/align.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/cstdint.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/runtime_introspection.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/runtime_introspection.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/util/blocking.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system_error.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/uninitialized_fill.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/uninitialized_fill.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/uninitialized_fill.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/destroy_range.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/destroy_range.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/fill_construct_range.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/fill_construct_range.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/temporary_allocator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/tagged_allocator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/tagged_allocator.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/memory.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/temporary_buffer.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/temporary_buffer.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/temporary_buffer.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/temporary_buffer.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/temporary_buffer.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/temporary_buffer.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/temporary_allocator.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/allocator/no_throw_allocator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/temporary_array.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/synchronize.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/synchronize.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/launch_calculator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/launch_calculator.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/transform.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/transform.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/transform.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/copy.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/dispatch/is_trivial_copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/general_copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/trivial_copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy_device_to_device.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy_device_to_device.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy_cross_system.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy_cross_system.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/trivial_copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/trivial_copy.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/trivial_copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/trivial_copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/assign_value.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/assign_value.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/iter_swap.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/iter_swap.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/iter_swap.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/swap.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/swap.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/swap_ranges.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/swap_ranges.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/swap_ranges.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/swap_ranges.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/swap_ranges.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/swap_ranges.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/device_ptr.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/device_reference.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/device_reference.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/device_malloc.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/device_malloc.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/device_free.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/device_free.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/vector_base.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/reverse_iterator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/reverse_iterator_base.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/reverse_iterator.inl
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\vector
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/vector_base.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/overlapped_copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/equal.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/equal.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/equal.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/equal.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/mismatch.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/mismatch.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/mismatch.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/mismatch.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/find.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/find.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/find.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/find.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/reduce.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/reduce.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/reduce.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/reduce.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/reduce_by_key.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/reduce_by_key.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/iterator/is_output_iterator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/any_assign.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/scatter.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/scatter.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scatter.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scatter.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/permutation_iterator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/permutation_iterator_base.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/scatter.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/scatter.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/scatter.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/scan.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/scan.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scan.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scan.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scan_by_key.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/scan_by_key.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/replace.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/replace.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/replace.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/replace.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/replace.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/replace.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/replace.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/scan.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/scan.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/scan.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/scan.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/scan.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/fast_scan.h
+d:\program files\nvidia gpu computing toolkit\cuda\v5.5\include\thrust\system\cuda\detail\detail\fast_scan.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/reduce_intervals.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/reduce_intervals.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/decompose.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/extern_shared_ptr.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/reduce.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/default_decomposition.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/default_decomposition.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/uninitialized.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/detail/alignment.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/scan_by_key.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/scan_by_key.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/scan_by_key.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/scan_by_key.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/reduce.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/reduce.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/reduce.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/reduce.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/reduce.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/reduce_by_key.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/reduce_by_key.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/reduce_by_key.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/algorithm/intermediate_type_from_function_and_iterators.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/reduce_by_key.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/reduce_by_key.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/counting_iterator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/counting_iterator.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/numeric_traits.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/transform_iterator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/transform_iterator.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/type_traits/iterator/is_discard_iterator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/discard_iterator.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/iterator/detail/discard_iterator_base.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/block/inclusive_scan.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/extrema.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/extrema.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/extrema.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/extrema.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/transform_reduce.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/transform_reduce.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/transform_reduce.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/transform_reduce.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/transform_reduce.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/transform_reduce.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/transform_reduce.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/extrema.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/extrema.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/extrema.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/extrema.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/find.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/find.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/find.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/find.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/mismatch.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/mismatch.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/mismatch.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/equal.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/equal.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/equal.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/device_vector.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/host_vector.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/host_vector.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/remove.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/remove.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/remove.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/remove.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/copy_if.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/copy_if.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/copy_if.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/generic/copy_if.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/copy_if.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/copy_if.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/copy_if.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy_if.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/copy_if.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/adl/remove.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cpp/detail/remove.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/detail/internal/scalar/remove.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/remove.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/copy.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda.h
+d:\class\565\project2\project2-pathtracer\src\sceneStructs.h
+d:\class\565\project2\project2-pathtracer\src\glm/glm.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core/_fixes.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core/setup.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\./core/_detail.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\setup.hpp
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cassert
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\assert.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+d:\class\565\project2\project2-pathtracer\src\glm\./core/type.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_half.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_half.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\_detail.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_float.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_half.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\setup.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_int.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\setup.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\_detail.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_gentype.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_size.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_vec1.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_vec.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_gentype.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_float.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_int.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_size.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\_swizzle.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\_swizzle_func.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_vec1.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_vec2.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_vec.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_float.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_int.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_size.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\_swizzle.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_vec2.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_vec3.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_vec.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_float.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_int.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_size.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\_swizzle.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_vec3.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_vec4.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_vec.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_float.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_int.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_size.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\_swizzle.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_vec4.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat2x2.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_gentype.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat2x2.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat2x3.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat2x3.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat2x4.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat2x4.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat3x2.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat3x2.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat3x3.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat3x3.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat3x4.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat3x4.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat4x2.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat4x2.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat4x3.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat4x3.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat4x4.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\type_mat4x4.inl
+d:\class\565\project2\project2-pathtracer\src\glm\./core/func_trigonometric.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\func_trigonometric.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\_vectorize.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\./core/func_exponential.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\func_exponential.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\_vectorize.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\./core/func_common.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\_fixes.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\func_common.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\_vectorize.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\./core/func_packing.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\func_packing.inl
+d:\class\565\project2\project2-pathtracer\src\glm\./core/func_geometric.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\func_geometric.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\_vectorize.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\./core/func_matrix.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\func_matrix.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\_vectorize.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\./core/func_vector_relational.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\_detail.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\func_vector_relational.inl
+d:\class\565\project2\project2-pathtracer\src\glm\./core/func_integer.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\func_integer.inl
+d:\class\565\project2\project2-pathtracer\src\glm\core\_vectorize.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\./core/func_noise.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core\func_noise.inl
+d:\class\565\project2\project2-pathtracer\src\glm\./core/_swizzle.hpp
+d:\class\565\project2\project2-pathtracer\src\cudaMat4.h
+d:\class\565\project2\project2-pathtracer\src\glm/glm.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core/_fixes.hpp
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda_runtime.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda_runtime.h
+d:\class\565\project2\project2-pathtracer\src\glm/glm.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core/_fixes.hpp
+d:\class\565\project2\project2-pathtracer\src\utilities.h
+d:\class\565\project2\project2-pathtracer\src\glm/glm.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core/_fixes.hpp
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\algorithm
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\sstream
+d:\class\565\project2\project2-pathtracer\src\cudaMat4.h
+d:\class\565\project2\project2-pathtracer\src\raytraceKernel.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/discard_block_engine.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/random_core_access.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/discard_block_engine.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/linear_congruential_engine.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/linear_congruential_engine_discard.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/mod.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/linear_congruential_engine.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/linear_feedback_shift_engine.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/linear_feedback_shift_engine_wordmask.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/linear_feedback_shift_engine.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/subtract_with_carry_engine.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/subtract_with_carry_engine.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/xor_combine_engine.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/xor_combine_engine_max.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/mpl/math.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/xor_combine_engine.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/uniform_int_distribution.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/detail/integer_traits.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/uniform_int_distribution.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/uniform_real_distribution.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/uniform_real_distribution.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/normal_distribution.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/normal_distribution_base.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/random/detail/normal_distribution.inl
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\math_constants.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda.h
+d:\class\565\project2\project2-pathtracer\src\sceneStructs.h
+D:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc\helper_math.h
+D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\cuda_runtime.h
+d:\class\565\project2\project2-pathtracer\src\intersections.h
+d:\class\565\project2\project2-pathtracer\src\sceneStructs.h
+d:\class\565\project2\project2-pathtracer\src\cudaMat4.h
+d:\class\565\project2\project2-pathtracer\src\glm/glm.hpp
+d:\class\565\project2\project2-pathtracer\src\glm\core/_fixes.hpp
+d:\class\565\project2\project2-pathtracer\src\utilities.h
+d:\class\565\project2\project2-pathtracer\src\interactions.h
+d:\class\565\project2\project2-pathtracer\src\intersections.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windows.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\sdkddkver.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\excpt.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdarg.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\specstrings.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sal_supp.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\specstrings_supp.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\specstrings_strict.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\specstrings_undef.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sdv_driverspecs.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\kernelspecs.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\basetsd.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\guiddef.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\pshpack4.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\poppack.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\pshpack4.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack4.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\pshpack4.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\pshpack2.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\poppack.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\pshpack2.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack2.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\poppack.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\pshpack8.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\poppack.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ktmtypes.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winbase.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winerror.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wingdi.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack1.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack2.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack2.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack4.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack4.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack2.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\tvout.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnls.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincon.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winver.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\verrsrc.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winreg.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\reason.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnetwk.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wnnc.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\cderr.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\dde.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ddeml.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\dlgs.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\lzexpand.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\mmsystem.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack1.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\nb30.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\rpc.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\rpcdce.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\rpcdcep.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\rpcnsi.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\rpcnterr.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\rpcasync.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\shellapi.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack1.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winperf.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack8.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\inaddr.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\bcrypt.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ncrypt.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\bcrypt.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winefs.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winscard.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wtypes.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\rpcndr.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack8.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\rpcnsip.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\rpcsal.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\guiddef.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winioctl.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack1.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack1.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack1.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack1.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack1.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack1.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winsmcrd.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\prsht.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack4.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ole2.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack8.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\objbase.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack8.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\objidl.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\guiddef.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\cguid.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\urlmon.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\oleidl.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\servprov.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\msxml.h
+c:\program files (x86)\microsoft sdks\windows\v7.0a\include\oaidl.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\propidl.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\oleauto.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack8.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\commdlg.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\prsht.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\pshpack1.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\poppack.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\stralign.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsvc.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\mcx.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\imm.h
+C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ime_cmodes.h
+d:\class\565\project2\project2-pathtracer\src\EasyBMP.h
+D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cctype
+d:\class\565\project2\project2-pathtracer\src\EasyBMP_DataStructures.h
+d:\class\565\project2\project2-pathtracer\src\EasyBMP_BMP.h
+d:\class\565\project2\project2-pathtracer\src\EasyBMP_VariousBMPutilities.h
+D:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\common\inc\helper_math.h
diff --git a/Paper_Texture_by_Spiteful_Pie_Stock.jpg b/Paper_Texture_by_Spiteful_Pie_Stock.jpg
new file mode 100644
index 0000000..33e45f5
Binary files /dev/null and b/Paper_Texture_by_Spiteful_Pie_Stock.jpg differ
diff --git a/README.md b/README.md
index 55897b6..bc5d731 100755
--- a/README.md
+++ b/README.md
@@ -1,3 +1,79 @@
+
+
+
+
+
+
+CUDA Path Tracing
+-------------------------------------------------------------------------------
+**Description:**
+
+In this project, except for implementing the basic requirement of Pathtracer, I also did motion blur, depth of filed, fresnel-based refraction and OBJ mesh loader.
+
+For the path tracer, due the recursion ability of GPU, I decided to change the path tracer to a iterative one. I multiply the color for each time the ray hit an object. If before the max depth of iteration, the ray hit the light, then add this color to scene, otherwise, just simply set this color to black. I accumulate the color for each iteration and divide by the iteration for rendering. At the every beginning of each iteration, I will jitter around the ray direction using random number, which can has the effect of supersampled antialiasing.
+
+For the stream compaction in my program, you can find the #define at the very top of .cu file. Comment out this #define STREAMCOMPACTION is to turn off the stream compaction. With great help of our TA, Liam, I also found out the the stream compaction will be faster only when the number of depth for path tracing is bigger than 10. If this depth number is smaller than 10, then the original path tracer actually is faster than stream compaction. I am using thrust to manage the ray pool.
+
+The motion blur part currently is hard coded in my program and using translation motion blur. Basically it's just moving a specific object forward and backward in each iteration. I have #define MOTIONBLUR at the very top of .cn file for turning off or on this effect.
+
+For the depth of filed, I changed the camera aim at position base on the focal length and jitter camera position at the initialization of ray cast from camera. I have #define DOF at the very top of .cu file for turning on and off this effect.
+
+In fresnel refraction, I treated the light as unpolarised and average the result of reflection coefficient from s-polarised and p-polarized. Then the refraction coefficient is just using T = 1 - R.
+
+The OBJ mesh loader I am using TinyObjLoader from [https://github.com/syoyo/tinyobjloader](https://github.com/syoyo/tinyobjloader "TinyOBJLoader"), which is a simple, robust and easy to use library. Then I added the triangle intersection function for testing the ray intersect with triangle in the mesh. Due to the ability of my graphic card, it cannot load a large mesh file.
+
+The subsurface scattering, I am using the dipole light source method to represent multiple scattering. Please refer this paper for more information about subsurface scattering [A Practical Model for Subsurface Light Transport](http://graphics.ucsd.edu/~henrik/papers/bssrdf/)
+
+Interactive camera, using the w, a, s, d to move the camera forward, left, backward and right. Using the move drag to rotate the camera.
+
+**Performance Evaluation:**
+
+I did performance evaluation in stream compaction and without stream compaction related to the max depth for iteration. There is a very interesting result here. When the max depth is smaller than 10, the path tracer without stream compaction is actually faster than the one with stream compaction. However, when I keep increasing the max depth, the time for path tracer without stream compaction goes up very quickly. The iteration time for path tracer with stream compaction goes up very slow with the increasing max depth.
+
+I think the reason why the number of max depth is small and the normal path tracer is faster is because there is a lot of transaction between host and device in stream compaction, which the program spend a lot of time on it. Also, in one iteration, the program has to launch kernel for several times, which also takes some time for the program to execute. These two main reasons lead to the stream compaction in small number of max depth is slower than normal path tracer.
+
+As the max depth goes up, the time for normal path tracer goes up really quickly, but the stream compaction becomes steady. The reason why stream compaction becomes steady is that although the max depth goes up, the number of ray in pool actually is become empty before it hits the limit of iteration times. Therefore, in spite of the max depth number is increasing, there is no big effect on stream compaction.
+
+ 
+
+**Instruction for Building:**
+
+I am currently using CUDA 5.5 for my project and I also set my computation ability to 2.0.
+
+For loading the obj mesh, change the cube or sphere in the scene file to the obj file path.
+
+
+**Third Party Code:**
+
+TinyObjLoader [https://github.com/syoyo/tinyobjloader](https://github.com/syoyo/tinyobjloader "TinyOBJLoader")
+
+The OBJ file I found it here [http://people.sc.fsu.edu/~jburkardt/data/obj/obj.html](http://people.sc.fsu.edu/~jburkardt/data/obj/obj.html "OBJ FILES")
+
+
+
+**Video:**
+
+[Video shows the interactive camera](http://vimeo.com/76803159)
+
+**Screen Shots:**
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-------------------------------------------------------------------------------
CIS565: Project 2: CUDA Pathtracer
-------------------------------------------------------------------------------
diff --git a/ScperformaceTest.png b/ScperformaceTest.png
new file mode 100644
index 0000000..699869c
Binary files /dev/null and b/ScperformaceTest.png differ
diff --git a/TextureX Stone Pebble Rocky Beach Grey Texture.jpg b/TextureX Stone Pebble Rocky Beach Grey Texture.jpg
new file mode 100644
index 0000000..05d07da
Binary files /dev/null and b/TextureX Stone Pebble Rocky Beach Grey Texture.jpg differ
diff --git a/pyramid.obj b/pyramid.obj
new file mode 100644
index 0000000..f2c4ca1
--- /dev/null
+++ b/pyramid.obj
@@ -0,0 +1,16 @@
+# OBJ file created by ply_to_obj.c
+#
+g Object001
+
+v 0 0 0
+v 1 0 0
+v 1 1 0
+v 0 1 0
+v 0.5 0.5 1.6
+
+f 4 1 2
+f 3 4 2
+f 5 2 1
+f 4 5 1
+f 3 5 4
+f 5 3 2
diff --git a/renders/Scattering.0.bmp b/renders/Scattering.0.bmp
new file mode 100644
index 0000000..078e073
Binary files /dev/null and b/renders/Scattering.0.bmp differ
diff --git a/renders/subscattering.bmp b/renders/subscattering.bmp
new file mode 100644
index 0000000..de9d23a
Binary files /dev/null and b/renders/subscattering.bmp differ
diff --git a/renders/test2500.0 - Copy (2).bmp b/renders/test2500.0 - Copy (2).bmp
new file mode 100644
index 0000000..b11ee25
Binary files /dev/null and b/renders/test2500.0 - Copy (2).bmp differ
diff --git a/renders/test2500.0.bmp b/renders/test2500.0.bmp
new file mode 100644
index 0000000..b11ee25
Binary files /dev/null and b/renders/test2500.0.bmp differ
diff --git a/renders/test3000.0 - Copy.bmp b/renders/test3000.0 - Copy.bmp
new file mode 100644
index 0000000..2214a01
Binary files /dev/null and b/renders/test3000.0 - Copy.bmp differ
diff --git a/renders/test3000.0.bmp b/renders/test3000.0.bmp
new file mode 100644
index 0000000..2214a01
Binary files /dev/null and b/renders/test3000.0.bmp differ
diff --git a/renders/test3500.0 - Copy (3).bmp b/renders/test3500.0 - Copy (3).bmp
new file mode 100644
index 0000000..3482c9f
Binary files /dev/null and b/renders/test3500.0 - Copy (3).bmp differ
diff --git a/renders/test3500.0 - Copy (4).bmp b/renders/test3500.0 - Copy (4).bmp
new file mode 100644
index 0000000..ce3d351
Binary files /dev/null and b/renders/test3500.0 - Copy (4).bmp differ
diff --git a/renders/test3500.0OBJ.bmp b/renders/test3500.0OBJ.bmp
new file mode 100644
index 0000000..f8e7f36
Binary files /dev/null and b/renders/test3500.0OBJ.bmp differ
diff --git a/renders/test3500.0OBJ2.bmp b/renders/test3500.0OBJ2.bmp
new file mode 100644
index 0000000..72c7d26
Binary files /dev/null and b/renders/test3500.0OBJ2.bmp differ
diff --git a/renders/test3500.0OBJ3.bmp b/renders/test3500.0OBJ3.bmp
new file mode 100644
index 0000000..ce3d351
Binary files /dev/null and b/renders/test3500.0OBJ3.bmp differ
diff --git a/renders/test4000.0 - Copy.bmp b/renders/test4000.0 - Copy.bmp
new file mode 100644
index 0000000..1c4042b
Binary files /dev/null and b/renders/test4000.0 - Copy.bmp differ
diff --git a/renders/test4000.0.bmp b/renders/test4000.0.bmp
new file mode 100644
index 0000000..d0fb58f
Binary files /dev/null and b/renders/test4000.0.bmp differ
diff --git a/renders/test4000.0WithOBJ.bmp b/renders/test4000.0WithOBJ.bmp
new file mode 100644
index 0000000..80393ae
Binary files /dev/null and b/renders/test4000.0WithOBJ.bmp differ
diff --git a/renders/test4000FUN.0.bmp b/renders/test4000FUN.0.bmp
new file mode 100644
index 0000000..d6ee583
Binary files /dev/null and b/renders/test4000FUN.0.bmp differ
diff --git a/renders/test5000.0.bmp b/renders/test5000.0.bmp
new file mode 100644
index 0000000..f3a5d23
Binary files /dev/null and b/renders/test5000.0.bmp differ
diff --git a/renders/test5000.0DOP.bmp b/renders/test5000.0DOP.bmp
new file mode 100644
index 0000000..5238287
Binary files /dev/null and b/renders/test5000.0DOP.bmp differ
diff --git a/renders/test5000.0DOP2.bmp b/renders/test5000.0DOP2.bmp
new file mode 100644
index 0000000..06a12cb
Binary files /dev/null and b/renders/test5000.0DOP2.bmp differ
diff --git a/renders/test5000.0MB.bmp b/renders/test5000.0MB.bmp
new file mode 100644
index 0000000..d423304
Binary files /dev/null and b/renders/test5000.0MB.bmp differ
diff --git a/renders/texture.bmp b/renders/texture.bmp
new file mode 100644
index 0000000..5ca6c1c
Binary files /dev/null and b/renders/texture.bmp differ
diff --git a/scenes/pyramid.obj b/scenes/pyramid.obj
new file mode 100644
index 0000000..f2c4ca1
--- /dev/null
+++ b/scenes/pyramid.obj
@@ -0,0 +1,16 @@
+# OBJ file created by ply_to_obj.c
+#
+g Object001
+
+v 0 0 0
+v 1 0 0
+v 1 1 0
+v 0 1 0
+v 0.5 0.5 1.6
+
+f 4 1 2
+f 3 4 2
+f 5 2 1
+f 4 5 1
+f 3 5 4
+f 5 3 2
diff --git a/scenes/sampleScene - Copy (2).txt b/scenes/sampleScene - Copy (2).txt
new file mode 100644
index 0000000..faa3b3a
--- /dev/null
+++ b/scenes/sampleScene - Copy (2).txt
@@ -0,0 +1,247 @@
+MATERIAL 0 //white diffuse
+RGB 0.9 0.9 0.9
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 1 //red diffuse
+RGB .63 .06 .04
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 2 //green diffuse
+RGB .15 .48 .09
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 3 //red glossy
+RGB .63 .26 .24
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 4 //white glossy
+RGB 1 1 1
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 5 //glass
+RGB 0 0 0
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 1
+REFRIOR 1.8
+SCATTER 0
+ABSCOEFF .02 5.1 5.7
+RSCTCOEFF 13
+EMITTANCE 0
+
+MATERIAL 6 //green glossy
+RGB .35 .48 .29
+//RGB .48 .48 .48
+SPECEX 0
+SPECRGB 1 1 1
+REFL 1
+REFR 0
+REFRIOR 2.6
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 7 //light
+RGB 1 1 1
+SPECEX 0
+SPECRGB 0 0 0
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 1
+
+MATERIAL 8 //light
+RGB 1 1 1
+SPECEX 0
+SPECRGB 0 0 0
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 15
+
+MATERIAL 9 //yellow diffuse
+RGB .83 .96 .14
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 10 //blue reflective
+RGB .23 .16 .94
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+
+CAMERA
+RES 800 800
+FOVY 25
+ITERATIONS 4000
+FILE test4000.bmp
+frame 0
+EYE 0 4.5 14
+VIEW 0 0 -1
+UP 0 1 0
+frame 1
+EYE 0 4.5 14
+VIEW 0 0 -1
+UP 0 1 0
+
+OBJECT 0
+cube
+material 0
+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 10
+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
+
+OBJECT 2
+cube
+material 0
+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
+material 1
+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
+material 2
+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
+D:\Class\565\Project2\Project2-Pathtracer\src\humanoid_tri.obj
+material 3
+frame 0
+TRANS -3 -5 1
+ROTAT -90 10 60
+SCALE .8 .8 .8
+frame 1
+TRANS -3 -5 1
+ROTAT -90 10 60
+SCALE .8 .8 .8
+
+
+OBJECT 6
+cube
+material 8
+frame 0
+TRANS 0 10 0
+ROTAT 0 0 90
+SCALE .3 6 6
+frame 1
+TRANS 0 10 0
+ROTAT 0 0 90
+SCALE .3 6 6
+
+
+OBJECT 7
+cube
+material 6
+frame 0
+TRANS -5 5 -1
+ROTAT 0 0 0
+SCALE .1 8 8
+frame 1
+TRANS -5 5 -1
+ROTAT 0 0 0
+SCALE .1 8 8
\ No newline at end of file
diff --git a/scenes/sampleScene - Copy (3).txt b/scenes/sampleScene - Copy (3).txt
new file mode 100644
index 0000000..1a644d1
--- /dev/null
+++ b/scenes/sampleScene - Copy (3).txt
@@ -0,0 +1,280 @@
+MATERIAL 0 //white diffuse
+RGB 0.9 0.9 0.9
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 1 //red diffuse
+RGB .63 .06 .04
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 2 //green diffuse
+RGB .15 .48 .09
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 3 //red glossy
+RGB .63 .26 .24
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 4 //white glossy
+RGB 1 1 1
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 5 //glass
+RGB 0 0 0
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 1
+REFRIOR 2.2
+SCATTER 0
+ABSCOEFF .02 5.1 5.7
+RSCTCOEFF 13
+EMITTANCE 0
+
+MATERIAL 6 //green glossy
+RGB .35 .48 .29
+//RGB .48 .48 .48
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0.3
+REFR 0
+REFRIOR 2.6
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 7 //light
+RGB 1 1 1
+SPECEX 0
+SPECRGB 0 0 0
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 1
+
+MATERIAL 8 //light
+RGB 1 1 1
+SPECEX 0
+SPECRGB 0 0 0
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 15
+
+MATERIAL 9 //yellow diffuse
+RGB .83 .96 .14
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 10 //blue reflective
+RGB .23 .16 .94
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+
+CAMERA
+RES 800 800
+FOVY 25
+ITERATIONS 4000
+FILE test4000.bmp
+frame 0
+EYE 0 4.5 14
+VIEW 0 0 -1
+UP 0 1 0
+frame 1
+EYE 0 4.5 14
+VIEW 0 0 -1
+UP 0 1 0
+
+OBJECT 0
+cube
+material 0
+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 10
+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
+
+OBJECT 2
+cube
+material 0
+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
+material 1
+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
+material 2
+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 5
+frame 0
+TRANS 1 2 0
+ROTAT 0 180 0
+SCALE 3 3 3
+frame 1
+TRANS 0 2 0
+ROTAT 0 180 0
+SCALE 3 3 3
+
+OBJECT 6
+sphere
+material 3
+frame 0
+TRANS 2 5 2
+ROTAT 0 180 0
+SCALE 2.5 2.5 2.5
+frame 1
+TRANS 2 5 2
+ROTAT 0 180 0
+SCALE 2.5 2.5 2.5
+
+OBJECT 7
+sphere
+material 6
+frame 0
+TRANS -2 7 -2
+ROTAT 0 180 0
+SCALE 3 3 3
+frame 1
+TRANS -2 5 -2
+ROTAT 0 180 0
+SCALE 3 3 3
+
+OBJECT 8
+cube
+material 8
+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
+
+OBJECT 9
+cube
+material 9
+frame 0
+TRANS -3 3 0
+ROTAT 0 60 30
+SCALE 2 2 2
+frame 1
+TRANS 3 3 0
+ROTAT 0 60 30
+SCALE 2 2 2
+
+OBJECT 10
+cube
+material 6
+frame 0
+TRANS -5 5 -1
+ROTAT 0 0 0
+SCALE .1 6 8
+frame 1
+TRANS -5 5 -1
+ROTAT 0 0 0
+SCALE .1 6 8
+
diff --git a/scenes/sampleScene - Copy (4).txt b/scenes/sampleScene - Copy (4).txt
new file mode 100644
index 0000000..2529513
--- /dev/null
+++ b/scenes/sampleScene - Copy (4).txt
@@ -0,0 +1,312 @@
+MATERIAL 0 //white diffuse
+RGB 0.9 0.9 0.9
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 1 //red diffuse
+RGB .63 .06 .04
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 2 //green diffuse
+RGB .15 .48 .09
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 3 //red glossy
+RGB .63 .26 .24
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 4 //white glossy
+RGB 1 1 1
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 5 //glass
+RGB 0 0 0
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 1
+REFRIOR 2.2
+SCATTER 0
+ABSCOEFF .02 5.1 5.7
+RSCTCOEFF 13
+EMITTANCE 0
+
+MATERIAL 6 //green glossy
+//RGB .35 .48 .29
+RGB .48 .48 .48
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0.8
+REFR 0
+REFRIOR 2.6
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 7 //light
+RGB 1 1 1
+SPECEX 0
+SPECRGB 0 0 0
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 1
+
+MATERIAL 8 //light
+RGB 1 1 1
+SPECEX 0
+SPECRGB 0 0 0
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 15
+
+MATERIAL 9 //yellow diffuse
+RGB .83 .96 .14
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0.7
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 10 //blue reflective
+RGB .23 .16 .94
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0.5
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+
+MATERIAL 11 //black reflective
+RGB 0.12 .13 .15
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0.4
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+
+MATERIAL 12 //orange reflective
+RGB .83 .46 .1
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+
+CAMERA
+RES 800 800
+FOVY 26
+ITERATIONS 4000
+FILE test4000FUN.bmp
+frame 0
+EYE 0 4.5 21
+VIEW 0 0 -1
+UP 0 1 0
+
+
+OBJECT 0
+cube
+material 0
+frame 0
+TRANS 0 0 0
+ROTAT 0 0 90
+SCALE .01 25 25
+
+
+
+//back
+OBJECT 1
+cube
+material 6
+frame 0
+TRANS -4 5 -7
+ROTAT 0 -60 0
+SCALE .01 25 25
+
+
+OBJECT 2
+cube
+material 6
+frame 0
+TRANS 4 5 -7
+ROTAT 0 60 0
+SCALE .01 25 25
+
+
+//top
+OBJECT 3
+cube
+material 0
+frame 0
+TRANS 0 10 0
+ROTAT 0 0 90
+SCALE .01 25 25
+
+
+//right
+OBJECT 4
+cube
+material 6
+frame 0
+TRANS -7 5 0
+ROTAT 0 -20 0
+SCALE .01 15 15
+
+OBJECT 5
+cube
+material 6
+frame 0
+TRANS -7 5 8
+ROTAT 0 20 0
+SCALE .01 15 15
+
+
+
+//left
+OBJECT 6
+cube
+material 6
+frame 0
+TRANS 7 5 0
+ROTAT 0 20 0
+SCALE .01 15 15
+
+
+OBJECT 7
+cube
+material 6
+frame 0
+TRANS 7 5 8
+ROTAT 0 -20 0
+SCALE .01 15 15
+
+OBJECT 8
+sphere
+material 10
+frame 0
+TRANS 0 6 2
+ROTAT 0 180 0
+SCALE 3 3 3
+
+OBJECT 9
+sphere
+material 5
+frame 0
+TRANS 0 2 5
+ROTAT 0 180 0
+SCALE 3 3 3
+
+OBJECT 10
+sphere
+material 9
+frame 0
+TRANS 0 3 -1
+ROTAT 0 180 0
+SCALE 3 3 3
+
+OBJECT 11
+sphere
+material 3
+frame 0
+TRANS 3 3 2
+ROTAT 0 180 0
+SCALE 3 3 3
+
+OBJECT 12
+sphere
+material 2
+frame 0
+TRANS -3 3 2
+ROTAT 0 180 0
+SCALE 3 3 3
+
+OBJECT 13
+sphere
+material 11
+frame 0
+TRANS -5 2 4
+ROTAT 0 180 0
+SCALE 2 2 2
+
+OBJECT 14
+sphere
+material 12
+frame 0
+TRANS 5 2 4
+ROTAT 0 180 0
+SCALE 2 2 2
+
+
+
+OBJECT 15
+cube
+material 8
+frame 0
+TRANS 0 10 0
+ROTAT 0 0 90
+SCALE .3 6 6
\ No newline at end of file
diff --git a/scenes/sampleScene - Copy (5).txt b/scenes/sampleScene - Copy (5).txt
new file mode 100644
index 0000000..8788cd1
--- /dev/null
+++ b/scenes/sampleScene - Copy (5).txt
@@ -0,0 +1,257 @@
+MATERIAL 0 //white diffuse
+RGB 0.9 0.9 0.9
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 1
+SCATTER 0
+ABSCOEFF 0.5 0.5 0.5
+RSCTCOEFF 0.9
+EMITTANCE 0
+
+MATERIAL 1 //red diffuse
+RGB .63 .06 .04
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 2 //green diffuse
+RGB .15 .48 .09
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 3 //red glossy
+RGB .63 .26 .24
+SPECEX 20
+SPECRGB 1 1 1
+REFL 0.1
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0.8 0.3 0.5
+RSCTCOEFF 7.6
+EMITTANCE 0
+
+MATERIAL 4 //white glossy
+RGB 1 1 1
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 5 //glass
+RGB 0 0 0
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 1
+REFRIOR 2.2
+SCATTER 0
+ABSCOEFF .02 5.1 5.7
+RSCTCOEFF 13
+EMITTANCE 0
+
+MATERIAL 6 //green glossy
+//RGB .35 .48 .29
+RGB .48 .48 .48
+SPECEX 0
+SPECRGB 1 1 1
+REFL 1
+REFR 0
+REFRIOR 2.6
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 7 //light
+RGB 1 1 1
+SPECEX 0
+SPECRGB 0 0 0
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 1
+
+MATERIAL 8 //light
+RGB 1 1 1
+SPECEX 0
+SPECRGB 0 0 0
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 20
+
+MATERIAL 9 //yellow diffuse
+RGB .83 .96 .14
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0.4 0.3 0.7
+RSCTCOEFF 2.1
+EMITTANCE 0
+
+MATERIAL 10 //blue reflective
+RGB .23 .16 .94
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+
+CAMERA
+RES 800 800
+FOVY 25
+ITERATIONS 1000
+FILE test1000Scatter.bmp
+frame 0
+EYE 0 4.5 14
+VIEW 0 0 -1
+UP 0 1 0
+frame 1
+EYE 0 4.5 14
+VIEW 0 0 -1
+UP 0 1 0
+
+OBJECT 0
+cube
+material 0
+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 10
+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
+
+OBJECT 2
+cube
+material 0
+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
+material 1
+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
+material 2
+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 5
+frame 0
+TRANS 1 2 0
+ROTAT 0 180 0
+SCALE 3 3 3
+frame 1
+TRANS 0 2 0
+ROTAT 0 180 0
+SCALE 3 3 3
+
+OBJECT 6
+sphere
+material 3
+frame 0
+TRANS 2 5 0
+ROTAT 0 180 0
+SCALE 3 3 3
+frame 1
+TRANS 2 5 2
+ROTAT 0 180 0
+SCALE 2.5 2.5 2.5
+
+OBJECT 7
+sphere
+material 6
+frame 0
+TRANS -2 7 -2
+ROTAT 0 180 0
+SCALE 3 3 3
+frame 1
+TRANS -2 5 -2
+ROTAT 0 180 0
+SCALE 3 3 3
+
+OBJECT 8
+cube
+material 8
+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/scenes/sampleScene - Copy.txt b/scenes/sampleScene - Copy.txt
new file mode 100644
index 0000000..b77213a
--- /dev/null
+++ b/scenes/sampleScene - Copy.txt
@@ -0,0 +1,280 @@
+MATERIAL 0 //white diffuse
+RGB 0.9 0.9 0.9
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 1 //red diffuse
+RGB .63 .06 .04
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 2 //green diffuse
+RGB .15 .48 .09
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 3 //red glossy
+RGB .63 .26 .24
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 4 //white glossy
+RGB 1 1 1
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 5 //glass
+RGB 0 0 0
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 1
+REFRIOR 2.2
+SCATTER 0
+ABSCOEFF .02 5.1 5.7
+RSCTCOEFF 13
+EMITTANCE 0
+
+MATERIAL 6 //green glossy
+//RGB .35 .48 .29
+RGB .48 .48 .48
+SPECEX 0
+SPECRGB 1 1 1
+REFL 1
+REFR 0
+REFRIOR 2.6
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 7 //light
+RGB 1 1 1
+SPECEX 0
+SPECRGB 0 0 0
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 1
+
+MATERIAL 8 //light
+RGB 1 1 1
+SPECEX 0
+SPECRGB 0 0 0
+REFL 0
+REFR 0
+REFRIOR 0
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 15
+
+MATERIAL 9 //yellow diffuse
+RGB .83 .96 .14
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 10 //blue reflective
+RGB .23 .16 .94
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+
+CAMERA
+RES 800 800
+FOVY 25
+ITERATIONS 4000
+FILE test4000.bmp
+frame 0
+EYE 0 4.5 14
+VIEW 0 0 -1
+UP 0 1 0
+frame 1
+EYE 0 4.5 14
+VIEW 0 0 -1
+UP 0 1 0
+
+OBJECT 0
+cube
+material 0
+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 10
+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
+
+OBJECT 2
+cube
+material 0
+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
+material 1
+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
+material 2
+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 5
+frame 0
+TRANS 1 2 0
+ROTAT 0 180 0
+SCALE 3 3 3
+frame 1
+TRANS 0 2 0
+ROTAT 0 180 0
+SCALE 3 3 3
+
+OBJECT 6
+sphere
+material 3
+frame 0
+TRANS 2 5 2
+ROTAT 0 180 0
+SCALE 2.5 2.5 2.5
+frame 1
+TRANS 2 5 2
+ROTAT 0 180 0
+SCALE 2.5 2.5 2.5
+
+OBJECT 7
+sphere
+material 6
+frame 0
+TRANS -2 7 -2
+ROTAT 0 180 0
+SCALE 3 3 3
+frame 1
+TRANS -2 5 -2
+ROTAT 0 180 0
+SCALE 3 3 3
+
+OBJECT 8
+cube
+material 8
+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
+
+OBJECT 9
+cube
+material 9
+frame 0
+TRANS -3 3 0
+ROTAT 0 60 30
+SCALE 2 2 2
+frame 1
+TRANS 3 3 0
+ROTAT 0 60 30
+SCALE 2 2 2
+
+OBJECT 10
+cube
+material 6
+frame 0
+TRANS -5 5 -1
+ROTAT 0 0 0
+SCALE .1 6 8
+frame 1
+TRANS -5 5 -1
+ROTAT 0 0 0
+SCALE .1 6 8
+
diff --git a/scenes/sampleScene.txt b/scenes/sampleScene.txt
index 52d079e..6fe10e4 100755
--- a/scenes/sampleScene.txt
+++ b/scenes/sampleScene.txt
@@ -36,14 +36,14 @@ EMITTANCE 0
MATERIAL 3 //red glossy
RGB .63 .26 .24
-SPECEX 0
+SPECEX 20
SPECRGB 1 1 1
-REFL 0
+REFL 0.1
REFR 0
REFRIOR 2
-SCATTER 0
-ABSCOEFF 0 0 0
-RSCTCOEFF 0
+SCATTER 0.6
+ABSCOEFF 0.8 0.3 0.5
+RSCTCOEFF 7.6
EMITTANCE 0
MATERIAL 4 //white glossy
@@ -71,10 +71,11 @@ RSCTCOEFF 13
EMITTANCE 0
MATERIAL 6 //green glossy
-RGB .35 .48 .29
+//RGB .35 .48 .29
+RGB .48 .48 .48
SPECEX 0
SPECRGB 1 1 1
-REFL 0
+REFL 0.8
REFR 0
REFRIOR 2.6
SCATTER 0
@@ -106,124 +107,206 @@ ABSCOEFF 0 0 0
RSCTCOEFF 0
EMITTANCE 15
+MATERIAL 9 //yellow diffuse
+RGB .83 .96 .14
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0.7
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+MATERIAL 10 //blue reflective
+RGB .23 .16 .94
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0.5
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+
+MATERIAL 11 //black reflective
+RGB 0.12 .13 .15
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0.4
+REFR 0
+REFRIOR 2
+SCATTER 0
+ABSCOEFF 0 0 0
+RSCTCOEFF 0
+EMITTANCE 0
+
+
+MATERIAL 12 //orange reflective
+RGB .83 .46 .1
+SPECEX 0
+SPECRGB 1 1 1
+REFL 0
+REFR 0
+REFRIOR 2
+SCATTER 0.7
+ABSCOEFF 0.9 0.1 0.3
+RSCTCOEFF 2.3
+EMITTANCE 0
+
+
CAMERA
RES 800 800
-FOVY 25
-ITERATIONS 5000
-FILE test.bmp
+FOVY 26
+ITERATIONS 4000
+FILE test4000FUNScattering.bmp
frame 0
-EYE 0 4.5 12
-VIEW 0 0 -1
-UP 0 1 0
-frame 1
-EYE 0 4.5 12
+EYE 0 4.5 21
VIEW 0 0 -1
UP 0 1 0
+
OBJECT 0
cube
material 0
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
+SCALE .01 25 25
+
+
+//back
OBJECT 1
cube
-material 0
+material 6
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
+TRANS -4 5 -7
+ROTAT 0 -60 0
+SCALE .01 25 25
+
OBJECT 2
cube
-material 0
+material 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
+TRANS 4 5 -7
+ROTAT 0 60 0
+SCALE .01 25 25
+
+//top
OBJECT 3
cube
-material 1
+material 0
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
+TRANS 0 10 0
+ROTAT 0 0 90
+SCALE .01 25 25
+
+//right
OBJECT 4
cube
-material 2
+material 6
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
+TRANS -7 5 0
+ROTAT 0 -20 0
+SCALE .01 15 15
OBJECT 5
+cube
+material 6
+frame 0
+TRANS -7 5 8
+ROTAT 0 20 0
+SCALE .01 15 15
+
+
+
+//left
+OBJECT 6
+cube
+material 6
+frame 0
+TRANS 7 5 0
+ROTAT 0 20 0
+SCALE .01 15 15
+
+
+OBJECT 7
+cube
+material 6
+frame 0
+TRANS 7 5 8
+ROTAT 0 -20 0
+SCALE .01 15 15
+
+OBJECT 8
sphere
-material 4
+material 10
frame 0
-TRANS 0 2 0
+TRANS 0 6 2
ROTAT 0 180 0
SCALE 3 3 3
-frame 1
-TRANS 0 2 0
+
+OBJECT 9
+sphere
+material 5
+frame 0
+TRANS 0 2 5
ROTAT 0 180 0
SCALE 3 3 3
-OBJECT 6
+OBJECT 10
sphere
-material 3
+material 9
frame 0
-TRANS 2 5 2
-ROTAT 0 180 0
-SCALE 2.5 2.5 2.5
-frame 1
-TRANS 2 5 2
+TRANS 0 3 -1
ROTAT 0 180 0
-SCALE 2.5 2.5 2.5
+SCALE 3 3 3
-OBJECT 7
+OBJECT 11
sphere
-material 6
+material 3
frame 0
-TRANS -2 5 -2
+TRANS 3 3 2
ROTAT 0 180 0
SCALE 3 3 3
-frame 1
-TRANS -2 5 -2
+
+OBJECT 12
+sphere
+material 2
+frame 0
+TRANS -3 3 2
ROTAT 0 180 0
SCALE 3 3 3
-OBJECT 8
+OBJECT 13
+sphere
+material 11
+frame 0
+TRANS -5 2 4
+ROTAT 0 180 0
+SCALE 2 2 2
+
+OBJECT 14
+sphere
+material 12
+frame 0
+TRANS 5 2 4
+ROTAT 0 180 0
+SCALE 2 2 2
+
+
+
+OBJECT 15
cube
material 8
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
+SCALE .3 6 6
\ No newline at end of file
diff --git a/src/EasyBMP.cpp b/src/EasyBMP.cpp
new file mode 100644
index 0000000..4e2b006
--- /dev/null
+++ b/src/EasyBMP.cpp
@@ -0,0 +1,1905 @@
+/*************************************************
+* *
+* EasyBMP Cross-Platform Windows Bitmap Library *
+* *
+* Author: Paul Macklin *
+* email: macklin01@users.sourceforge.net *
+* support: http://easybmp.sourceforge.net *
+* *
+* file: EasyBMP.cpp *
+* date added: 03-31-2006 *
+* date modified: 12-01-2006 *
+* version: 1.06 *
+* *
+* License: BSD (revised/modified) *
+* Copyright: 2005-6 by the EasyBMP Project *
+* *
+* description: Actual source file *
+* *
+*************************************************/
+
+#include "EasyBMP.h"
+
+/* These functions are defined in EasyBMP.h */
+
+bool EasyBMPwarnings = true;
+
+void SetEasyBMPwarningsOff( void )
+{ EasyBMPwarnings = false; }
+void SetEasyBMPwarningsOn( void )
+{ EasyBMPwarnings = true; }
+bool GetEasyBMPwarningState( void )
+{ return EasyBMPwarnings; }
+
+/* These functions are defined in EasyBMP_DataStructures.h */
+
+int IntPow( int base, int exponent )
+{
+ int i;
+ int output = 1;
+ for( i=0 ; i < exponent ; i++ )
+ { output *= base; }
+ return output;
+}
+
+BMFH::BMFH()
+{
+ bfType = 19778;
+ bfReserved1 = 0;
+ bfReserved2 = 0;
+}
+
+void BMFH::SwitchEndianess( void )
+{
+ bfType = FlipWORD( bfType );
+ bfSize = FlipDWORD( bfSize );
+ bfReserved1 = FlipWORD( bfReserved1 );
+ bfReserved2 = FlipWORD( bfReserved2 );
+ bfOffBits = FlipDWORD( bfOffBits );
+ return;
+}
+
+BMIH::BMIH()
+{
+ biPlanes = 1;
+ biCompression = 0;
+ biXPelsPerMeter = DefaultXPelsPerMeter;
+ biYPelsPerMeter = DefaultYPelsPerMeter;
+ biClrUsed = 0;
+ biClrImportant = 0;
+}
+
+void BMIH::SwitchEndianess( void )
+{
+ biSize = FlipDWORD( biSize );
+ biWidth = FlipDWORD( biWidth );
+ biHeight = FlipDWORD( biHeight );
+ biPlanes = FlipWORD( biPlanes );
+ biBitCount = FlipWORD( biBitCount );
+ biCompression = FlipDWORD( biCompression );
+ biSizeImage = FlipDWORD( biSizeImage );
+ biXPelsPerMeter = FlipDWORD( biXPelsPerMeter );
+ biYPelsPerMeter = FlipDWORD( biYPelsPerMeter );
+ biClrUsed = FlipDWORD( biClrUsed );
+ biClrImportant = FlipDWORD( biClrImportant );
+ return;
+}
+
+void BMIH::display( void )
+{
+ using namespace std;
+ cout << "biSize: " << (int) biSize << endl
+ << "biWidth: " << (int) biWidth << endl
+ << "biHeight: " << (int) biHeight << endl
+ << "biPlanes: " << (int) biPlanes << endl
+ << "biBitCount: " << (int) biBitCount << endl
+ << "biCompression: " << (int) biCompression << endl
+ << "biSizeImage: " << (int) biSizeImage << endl
+ << "biXPelsPerMeter: " << (int) biXPelsPerMeter << endl
+ << "biYPelsPerMeter: " << (int) biYPelsPerMeter << endl
+ << "biClrUsed: " << (int) biClrUsed << endl
+ << "biClrImportant: " << (int) biClrImportant << endl << endl;
+}
+
+void BMFH::display( void )
+{
+ using namespace std;
+ cout << "bfType: " << (int) bfType << endl
+ << "bfSize: " << (int) bfSize << endl
+ << "bfReserved1: " << (int) bfReserved1 << endl
+ << "bfReserved2: " << (int) bfReserved2 << endl
+ << "bfOffBits: " << (int) bfOffBits << endl << endl;
+}
+
+/* These functions are defined in EasyBMP_BMP.h */
+
+RGBApixel BMP::GetPixel( int i, int j ) const
+{
+ using namespace std;
+ bool Warn = false;
+ if( i >= Width )
+ { i = Width-1; Warn = true; }
+ if( i < 0 )
+ { i = 0; Warn = true; }
+ if( j >= Height )
+ { j = Height-1; Warn = true; }
+ if( j < 0 )
+ { j = 0; Warn = true; }
+ if( Warn && EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: Attempted to access non-existent pixel;" << endl
+ << " Truncating request to fit in the range [0,"
+ << Width-1 << "] x [0," << Height-1 << "]." << endl;
+ }
+ return Pixels[i][j];
+}
+
+bool BMP::SetPixel( int i, int j, RGBApixel NewPixel )
+{
+ Pixels[i][j] = NewPixel;
+ return true;
+}
+
+
+bool BMP::SetColor( int ColorNumber , RGBApixel NewColor )
+{
+ using namespace std;
+ if( BitDepth != 1 && BitDepth != 4 && BitDepth != 8 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: Attempted to change color table for a BMP object" << endl
+ << " that lacks a color table. Ignoring request." << endl;
+ }
+ return false;
+ }
+ if( !Colors )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: Attempted to set a color, but the color table" << endl
+ << " is not defined. Ignoring request." << endl;
+ }
+ return false;
+ }
+ if( ColorNumber >= TellNumberOfColors() )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: Requested color number "
+ << ColorNumber << " is outside the allowed" << endl
+ << " range [0," << TellNumberOfColors()-1
+ << "]. Ignoring request to set this color." << endl;
+ }
+ return false;
+ }
+ Colors[ColorNumber] = NewColor;
+ return true;
+}
+
+// RGBApixel BMP::GetColor( int ColorNumber ) const
+RGBApixel BMP::GetColor( int ColorNumber )
+{
+ RGBApixel Output;
+ Output.Red = 255;
+ Output.Green = 255;
+ Output.Blue = 255;
+ Output.Alpha = 0;
+
+ using namespace std;
+ if( BitDepth != 1 && BitDepth != 4 && BitDepth != 8 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: Attempted to access color table for a BMP object" << endl
+ << " that lacks a color table. Ignoring request." << endl;
+ }
+ return Output;
+ }
+ if( !Colors )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: Requested a color, but the color table" << endl
+ << " is not defined. Ignoring request." << endl;
+ }
+ return Output;
+ }
+ if( ColorNumber >= TellNumberOfColors() )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: Requested color number "
+ << ColorNumber << " is outside the allowed" << endl
+ << " range [0," << TellNumberOfColors()-1
+ << "]. Ignoring request to get this color." << endl;
+ }
+ return Output;
+ }
+ Output = Colors[ColorNumber];
+ return Output;
+}
+
+BMP::BMP()
+{
+ Width = 1;
+ Height = 1;
+ BitDepth = 24;
+ Pixels = new RGBApixel* [Width];
+ Pixels[0] = new RGBApixel [Height];
+ Colors = NULL;
+
+ XPelsPerMeter = 0;
+ YPelsPerMeter = 0;
+
+ MetaData1 = NULL;
+ SizeOfMetaData1 = 0;
+ MetaData2 = NULL;
+ SizeOfMetaData2 = 0;
+}
+
+// BMP::BMP( const BMP& Input )
+BMP::BMP( BMP& Input )
+{
+ // first, make the image empty.
+
+ Width = 1;
+ Height = 1;
+ BitDepth = 24;
+ Pixels = new RGBApixel* [Width];
+ Pixels[0] = new RGBApixel [Height];
+ Colors = NULL;
+ XPelsPerMeter = 0;
+ YPelsPerMeter = 0;
+
+ MetaData1 = NULL;
+ SizeOfMetaData1 = 0;
+ MetaData2 = NULL;
+ SizeOfMetaData2 = 0;
+
+ // now, set the correct bit depth
+
+ SetBitDepth( Input.TellBitDepth() );
+
+ // set the correct pixel size
+
+ SetSize( Input.TellWidth() , Input.TellHeight() );
+
+ // set the DPI information from Input
+
+ SetDPI( Input.TellHorizontalDPI() , Input.TellVerticalDPI() );
+
+ // if there is a color table, get all the colors
+
+ if( BitDepth == 1 || BitDepth == 4 ||
+ BitDepth == 8 )
+ {
+ for( int k=0 ; k < TellNumberOfColors() ; k++ )
+ {
+ SetColor( k, Input.GetColor( k ));
+ }
+ }
+
+ // get all the pixels
+
+ for( int j=0; j < Height ; j++ )
+ {
+ for( int i=0; i < Width ; i++ )
+ {
+ Pixels[i][j] = *Input(i,j);
+// Pixels[i][j] = Input.GetPixel(i,j); // *Input(i,j);
+ }
+ }
+}
+
+BMP::~BMP()
+{
+ int i;
+ for(i=0;i= Width )
+ { i = Width-1; Warn = true; }
+ if( i < 0 )
+ { i = 0; Warn = true; }
+ if( j >= Height )
+ { j = Height-1; Warn = true; }
+ if( j < 0 )
+ { j = 0; Warn = true; }
+ if( Warn && EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: Attempted to access non-existent pixel;" << endl
+ << " Truncating request to fit in the range [0,"
+ << Width-1 << "] x [0," << Height-1 << "]." << endl;
+ }
+ return &(Pixels[i][j]);
+}
+
+// int BMP::TellBitDepth( void ) const
+int BMP::TellBitDepth( void )
+{ return BitDepth; }
+
+// int BMP::TellHeight( void ) const
+int BMP::TellHeight( void )
+{ return Height; }
+
+// int BMP::TellWidth( void ) const
+int BMP::TellWidth( void )
+{ return Width; }
+
+// int BMP::TellNumberOfColors( void ) const
+int BMP::TellNumberOfColors( void )
+{
+ int output = IntPow( 2, BitDepth );
+ if( BitDepth == 32 )
+ { output = IntPow( 2, 24 ); }
+ return output;
+}
+
+bool BMP::SetBitDepth( int NewDepth )
+{
+ using namespace std;
+ if( NewDepth != 1 && NewDepth != 4 &&
+ NewDepth != 8 && NewDepth != 16 &&
+ NewDepth != 24 && NewDepth != 32 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: User attempted to set unsupported bit depth "
+ << NewDepth << "." << endl
+ << " Bit depth remains unchanged at "
+ << BitDepth << "." << endl;
+ }
+ return false;
+ }
+
+ BitDepth = NewDepth;
+ if( Colors )
+ { delete [] Colors; }
+ int NumberOfColors = IntPow( 2, BitDepth );
+ if( BitDepth == 1 || BitDepth == 4 || BitDepth == 8 )
+ { Colors = new RGBApixel [NumberOfColors]; }
+ else
+ { Colors = NULL; }
+ if( BitDepth == 1 || BitDepth == 4 || BitDepth == 8 )
+ { CreateStandardColorTable(); }
+
+ return true;
+}
+
+bool BMP::SetSize(int NewWidth , int NewHeight )
+{
+ using namespace std;
+ if( NewWidth <= 0 || NewHeight <= 0 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: User attempted to set a non-positive width or height." << endl
+ << " Size remains unchanged at "
+ << Width << " x " << Height << "." << endl;
+ }
+ return false;
+ }
+
+ int i,j;
+
+ for(i=0;i -1 )
+ {
+ bool Success = false;
+ if( BitDepth == 32 )
+ { Success = Write32bitRow( Buffer, BufferSize, j ); }
+ if( BitDepth == 24 )
+ { Success = Write24bitRow( Buffer, BufferSize, j ); }
+ if( BitDepth == 8 )
+ { Success = Write8bitRow( Buffer, BufferSize, j ); }
+ if( BitDepth == 4 )
+ { Success = Write4bitRow( Buffer, BufferSize, j ); }
+ if( BitDepth == 1 )
+ { Success = Write1bitRow( Buffer, BufferSize, j ); }
+ if( Success )
+ {
+ int BytesWritten = (int) fwrite( (char*) Buffer, 1, BufferSize, fp );
+ if( BytesWritten != BufferSize )
+ { Success = false; }
+ }
+ if( !Success )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: Could not write proper amount of data." << endl;
+ }
+ j = -1;
+ }
+ j--;
+ }
+
+ delete [] Buffer;
+ }
+
+ if( BitDepth == 16 )
+ {
+ // write the bit masks
+
+ ebmpWORD BlueMask = 31; // bits 12-16
+ ebmpWORD GreenMask = 2016; // bits 6-11
+ ebmpWORD RedMask = 63488; // bits 1-5
+ ebmpWORD ZeroWORD;
+
+ if( IsBigEndian() )
+ { RedMask = FlipWORD( RedMask ); }
+ fwrite( (char*) &RedMask , 2 , 1 , fp );
+ fwrite( (char*) &ZeroWORD , 2 , 1 , fp );
+
+ if( IsBigEndian() )
+ { GreenMask = FlipWORD( GreenMask ); }
+ fwrite( (char*) &GreenMask , 2 , 1 , fp );
+ fwrite( (char*) &ZeroWORD , 2 , 1 , fp );
+
+ if( IsBigEndian() )
+ { BlueMask = FlipWORD( BlueMask ); }
+ fwrite( (char*) &BlueMask , 2 , 1 , fp );
+ fwrite( (char*) &ZeroWORD , 2 , 1 , fp );
+
+ int DataBytes = Width*2;
+ int PaddingBytes = ( 4 - DataBytes % 4 ) % 4;
+
+ // write the actual pixels
+
+ for( j=Height-1 ; j >= 0 ; j-- )
+ {
+ // write all row pixel data
+ i=0;
+ int WriteNumber = 0;
+ while( WriteNumber < DataBytes )
+ {
+ ebmpWORD TempWORD;
+
+ ebmpWORD RedWORD = (ebmpWORD) ((Pixels[i][j]).Red / 8);
+ ebmpWORD GreenWORD = (ebmpWORD) ((Pixels[i][j]).Green / 4);
+ ebmpWORD BlueWORD = (ebmpWORD) ((Pixels[i][j]).Blue / 8);
+
+ TempWORD = (RedWORD<<11) + (GreenWORD<<5) + BlueWORD;
+ if( IsBigEndian() )
+ { TempWORD = FlipWORD( TempWORD ); }
+
+ fwrite( (char*) &TempWORD , 2, 1, fp);
+ WriteNumber += 2;
+ i++;
+ }
+ // write any necessary row padding
+ WriteNumber = 0;
+ while( WriteNumber < PaddingBytes )
+ {
+ ebmpBYTE TempBYTE;
+ fwrite( (char*) &TempBYTE , 1, 1, fp);
+ WriteNumber++;
+ }
+ }
+
+ }
+
+ fclose(fp);
+ return true;
+}
+
+bool BMP::ReadFromFile( const char* FileName )
+{
+ using namespace std;
+ if( !EasyBMPcheckDataSize() )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: Data types are wrong size!" << endl
+ << " You may need to mess with EasyBMP_DataTypes.h" << endl
+ << " to fix these errors, and then recompile." << endl
+ << " All 32-bit and 64-bit machines should be" << endl
+ << " supported, however." << endl << endl;
+ }
+ return false;
+ }
+
+ FILE* fp = fopen( FileName, "rb" );
+ if( fp == NULL )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: Cannot open file "
+ << FileName << " for input." << endl;
+ }
+ SetBitDepth(1);
+ SetSize(1,1);
+ return false;
+ }
+
+ // read the file header
+
+ BMFH bmfh;
+ bool NotCorrupted = true;
+
+ NotCorrupted &= SafeFread( (char*) &(bmfh.bfType) , sizeof(ebmpWORD), 1, fp);
+
+ bool IsBitmap = false;
+
+ if( IsBigEndian() && bmfh.bfType == 16973 )
+ { IsBitmap = true; }
+ if( !IsBigEndian() && bmfh.bfType == 19778 )
+ { IsBitmap = true; }
+
+ if( !IsBitmap )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: " << FileName
+ << " is not a Windows BMP file!" << endl;
+ }
+ fclose( fp );
+ return false;
+ }
+
+ NotCorrupted &= SafeFread( (char*) &(bmfh.bfSize) , sizeof(ebmpDWORD) , 1, fp);
+ NotCorrupted &= SafeFread( (char*) &(bmfh.bfReserved1) , sizeof(ebmpWORD) , 1, fp);
+ NotCorrupted &= SafeFread( (char*) &(bmfh.bfReserved2) , sizeof(ebmpWORD) , 1, fp);
+ NotCorrupted &= SafeFread( (char*) &(bmfh.bfOffBits) , sizeof(ebmpDWORD) , 1 , fp);
+
+ if( IsBigEndian() )
+ { bmfh.SwitchEndianess(); }
+
+ // read the info header
+
+ BMIH bmih;
+
+ NotCorrupted &= SafeFread( (char*) &(bmih.biSize) , sizeof(ebmpDWORD) , 1 , fp);
+ NotCorrupted &= SafeFread( (char*) &(bmih.biWidth) , sizeof(ebmpDWORD) , 1 , fp);
+ NotCorrupted &= SafeFread( (char*) &(bmih.biHeight) , sizeof(ebmpDWORD) , 1 , fp);
+ NotCorrupted &= SafeFread( (char*) &(bmih.biPlanes) , sizeof(ebmpWORD) , 1, fp);
+ NotCorrupted &= SafeFread( (char*) &(bmih.biBitCount) , sizeof(ebmpWORD) , 1, fp);
+
+ NotCorrupted &= SafeFread( (char*) &(bmih.biCompression) , sizeof(ebmpDWORD) , 1 , fp);
+ NotCorrupted &= SafeFread( (char*) &(bmih.biSizeImage) , sizeof(ebmpDWORD) , 1 , fp);
+ NotCorrupted &= SafeFread( (char*) &(bmih.biXPelsPerMeter) , sizeof(ebmpDWORD) , 1 , fp);
+ NotCorrupted &= SafeFread( (char*) &(bmih.biYPelsPerMeter) , sizeof(ebmpDWORD) , 1 , fp);
+ NotCorrupted &= SafeFread( (char*) &(bmih.biClrUsed) , sizeof(ebmpDWORD) , 1 , fp);
+ NotCorrupted &= SafeFread( (char*) &(bmih.biClrImportant) , sizeof(ebmpDWORD) , 1 , fp);
+
+ if( IsBigEndian() )
+ { bmih.SwitchEndianess(); }
+
+ // a safety catch: if any of the header information didn't read properly, abort
+ // future idea: check to see if at least most is self-consistent
+
+ if( !NotCorrupted )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: " << FileName
+ << " is obviously corrupted." << endl;
+ }
+ SetSize(1,1);
+ SetBitDepth(1);
+ fclose(fp);
+ return false;
+ }
+
+ XPelsPerMeter = bmih.biXPelsPerMeter;
+ YPelsPerMeter = bmih.biYPelsPerMeter;
+
+ // if bmih.biCompression 1 or 2, then the file is RLE compressed
+
+ if( bmih.biCompression == 1 || bmih.biCompression == 2 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: " << FileName << " is (RLE) compressed." << endl
+ << " EasyBMP does not support compression." << endl;
+ }
+ SetSize(1,1);
+ SetBitDepth(1);
+ fclose(fp);
+ return false;
+ }
+
+ // if bmih.biCompression > 3, then something strange is going on
+ // it's probably an OS2 bitmap file.
+
+ if( bmih.biCompression > 3 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: " << FileName << " is in an unsupported format."
+ << endl
+ << " (bmih.biCompression = "
+ << bmih.biCompression << ")" << endl
+ << " The file is probably an old OS2 bitmap or corrupted."
+ << endl;
+ }
+ SetSize(1,1);
+ SetBitDepth(1);
+ fclose(fp);
+ return false;
+ }
+
+ if( bmih.biCompression == 3 && bmih.biBitCount != 16 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: " << FileName
+ << " uses bit fields and is not a" << endl
+ << " 16-bit file. This is not supported." << endl;
+ }
+ SetSize(1,1);
+ SetBitDepth(1);
+ fclose(fp);
+ return false;
+ }
+
+ // set the bit depth
+
+ int TempBitDepth = (int) bmih.biBitCount;
+ if( TempBitDepth != 1 && TempBitDepth != 4
+ && TempBitDepth != 8 && TempBitDepth != 16
+ && TempBitDepth != 24 && TempBitDepth != 32 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: " << FileName << " has unrecognized bit depth." << endl;
+ }
+ SetSize(1,1);
+ SetBitDepth(1);
+ fclose(fp);
+ return false;
+ }
+ SetBitDepth( (int) bmih.biBitCount );
+
+ // set the size
+
+ if( (int) bmih.biWidth <= 0 || (int) bmih.biHeight <= 0 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: " << FileName
+ << " has a non-positive width or height." << endl;
+ }
+ SetSize(1,1);
+ SetBitDepth(1);
+ fclose(fp);
+ return false;
+ }
+ SetSize( (int) bmih.biWidth , (int) bmih.biHeight );
+
+ // some preliminaries
+
+ double dBytesPerPixel = ( (double) BitDepth ) / 8.0;
+ double dBytesPerRow = dBytesPerPixel * (Width+0.0);
+ dBytesPerRow = ceil(dBytesPerRow);
+
+ int BytePaddingPerRow = 4 - ( (int) (dBytesPerRow) )% 4;
+ if( BytePaddingPerRow == 4 )
+ { BytePaddingPerRow = 0; }
+
+ // if < 16 bits, read the palette
+
+ if( BitDepth < 16 )
+ {
+ // determine the number of colors specified in the
+ // color table
+
+ int NumberOfColorsToRead = ((int) bmfh.bfOffBits - 54 )/4;
+ if( NumberOfColorsToRead > IntPow(2,BitDepth) )
+ { NumberOfColorsToRead = IntPow(2,BitDepth); }
+
+ if( NumberOfColorsToRead < TellNumberOfColors() )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: file " << FileName << " has an underspecified" << endl
+ << " color table. The table will be padded with extra" << endl
+ << " white (255,255,255,0) entries." << endl;
+ }
+ }
+
+ int n;
+ for( n=0; n < NumberOfColorsToRead ; n++ )
+ {
+ SafeFread( (char*) &(Colors[n]) , 4 , 1 , fp);
+ }
+ for( n=NumberOfColorsToRead ; n < TellNumberOfColors() ; n++ )
+ {
+ RGBApixel WHITE;
+ WHITE.Red = 255;
+ WHITE.Green = 255;
+ WHITE.Blue = 255;
+ WHITE.Alpha = 0;
+ SetColor( n , WHITE );
+ }
+
+
+ }
+
+ // skip blank data if bfOffBits so indicates
+
+ int BytesToSkip = bmfh.bfOffBits - 54;;
+ if( BitDepth < 16 )
+ { BytesToSkip -= 4*IntPow(2,BitDepth); }
+ if( BitDepth == 16 && bmih.biCompression == 3 )
+ { BytesToSkip -= 3*4; }
+ if( BytesToSkip < 0 )
+ { BytesToSkip = 0; }
+ if( BytesToSkip > 0 && BitDepth != 16 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: Extra meta data detected in file " << FileName << endl
+ << " Data will be skipped." << endl;
+ }
+ ebmpBYTE* TempSkipBYTE;
+ TempSkipBYTE = new ebmpBYTE [BytesToSkip];
+ SafeFread( (char*) TempSkipBYTE , BytesToSkip , 1 , fp);
+ delete [] TempSkipBYTE;
+ }
+
+ // This code reads 1, 4, 8, 24, and 32-bpp files
+ // with a more-efficient buffered technique.
+
+ int i,j;
+ if( BitDepth != 16 )
+ {
+ int BufferSize = (int) ( (Width*BitDepth) / 8.0 );
+ while( 8*BufferSize < Width*BitDepth )
+ { BufferSize++; }
+ while( BufferSize % 4 )
+ { BufferSize++; }
+ ebmpBYTE* Buffer;
+ Buffer = new ebmpBYTE [BufferSize];
+ j= Height-1;
+ while( j > -1 )
+ {
+ int BytesRead = (int) fread( (char*) Buffer, 1, BufferSize, fp );
+ if( BytesRead < BufferSize )
+ {
+ j = -1;
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: Could not read proper amount of data." << endl;
+ }
+ }
+ else
+ {
+ bool Success = false;
+ if( BitDepth == 1 )
+ { Success = Read1bitRow( Buffer, BufferSize, j ); }
+ if( BitDepth == 4 )
+ { Success = Read4bitRow( Buffer, BufferSize, j ); }
+ if( BitDepth == 8 )
+ { Success = Read8bitRow( Buffer, BufferSize, j ); }
+ if( BitDepth == 24 )
+ { Success = Read24bitRow( Buffer, BufferSize, j ); }
+ if( BitDepth == 32 )
+ { Success = Read32bitRow( Buffer, BufferSize, j ); }
+ if( !Success )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: Could not read enough pixel data!" << endl;
+ }
+ j = -1;
+ }
+ }
+ j--;
+ }
+ delete [] Buffer;
+ }
+
+ if( BitDepth == 16 )
+ {
+ int DataBytes = Width*2;
+ int PaddingBytes = ( 4 - DataBytes % 4 ) % 4;
+
+ // set the default mask
+
+ ebmpWORD BlueMask = 31; // bits 12-16
+ ebmpWORD GreenMask = 992; // bits 7-11
+ ebmpWORD RedMask = 31744; // bits 2-6
+
+ // read the bit fields, if necessary, to
+ // override the default 5-5-5 mask
+
+ if( bmih.biCompression != 0 )
+ {
+ // read the three bit masks
+
+ ebmpWORD TempMaskWORD;
+ ebmpWORD ZeroWORD;
+
+ SafeFread( (char*) &RedMask , 2 , 1 , fp );
+ if( IsBigEndian() )
+ { RedMask = FlipWORD(RedMask); }
+ SafeFread( (char*) &TempMaskWORD , 2, 1, fp );
+
+ SafeFread( (char*) &GreenMask , 2 , 1 , fp );
+ if( IsBigEndian() )
+ { GreenMask = FlipWORD(GreenMask); }
+ SafeFread( (char*) &TempMaskWORD , 2, 1, fp );
+
+ SafeFread( (char*) &BlueMask , 2 , 1 , fp );
+ if( IsBigEndian() )
+ { BlueMask = FlipWORD(BlueMask); }
+ SafeFread( (char*) &TempMaskWORD , 2, 1, fp );
+ }
+
+ // read and skip any meta data
+
+ if( BytesToSkip > 0 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: Extra meta data detected in file "
+ << FileName << endl
+ << " Data will be skipped." << endl;
+ }
+ ebmpBYTE* TempSkipBYTE;
+ TempSkipBYTE = new ebmpBYTE [BytesToSkip];
+ SafeFread( (char*) TempSkipBYTE , BytesToSkip , 1 , fp);
+ delete [] TempSkipBYTE;
+ }
+
+ // determine the red, green and blue shifts
+
+ int GreenShift = 0;
+ ebmpWORD TempShiftWORD = GreenMask;
+ while( TempShiftWORD > 31 )
+ { TempShiftWORD = TempShiftWORD>>1; GreenShift++; }
+ int BlueShift = 0;
+ TempShiftWORD = BlueMask;
+ while( TempShiftWORD > 31 )
+ { TempShiftWORD = TempShiftWORD>>1; BlueShift++; }
+ int RedShift = 0;
+ TempShiftWORD = RedMask;
+ while( TempShiftWORD > 31 )
+ { TempShiftWORD = TempShiftWORD>>1; RedShift++; }
+
+ // read the actual pixels
+
+ for( j=Height-1 ; j >= 0 ; j-- )
+ {
+ i=0;
+ int ReadNumber = 0;
+ while( ReadNumber < DataBytes )
+ {
+ ebmpWORD TempWORD;
+ SafeFread( (char*) &TempWORD , 2 , 1 , fp );
+ if( IsBigEndian() )
+ { TempWORD = FlipWORD(TempWORD); }
+ ReadNumber += 2;
+
+ ebmpWORD Red = RedMask & TempWORD;
+ ebmpWORD Green = GreenMask & TempWORD;
+ ebmpWORD Blue = BlueMask & TempWORD;
+
+ ebmpBYTE BlueBYTE = (ebmpBYTE) 8*(Blue>>BlueShift);
+ ebmpBYTE GreenBYTE = (ebmpBYTE) 8*(Green>>GreenShift);
+ ebmpBYTE RedBYTE = (ebmpBYTE) 8*(Red>>RedShift);
+
+ (Pixels[i][j]).Red = RedBYTE;
+ (Pixels[i][j]).Green = GreenBYTE;
+ (Pixels[i][j]).Blue = BlueBYTE;
+
+ i++;
+ }
+ ReadNumber = 0;
+ while( ReadNumber < PaddingBytes )
+ {
+ ebmpBYTE TempBYTE;
+ SafeFread( (char*) &TempBYTE , 1, 1, fp);
+ ReadNumber++;
+ }
+ }
+
+ }
+
+ fclose(fp);
+ return true;
+}
+
+bool BMP::CreateStandardColorTable( void )
+{
+ using namespace std;
+ if( BitDepth != 1 && BitDepth != 4 && BitDepth != 8 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: Attempted to create color table at a bit" << endl
+ << " depth that does not require a color table." << endl
+ << " Ignoring request." << endl;
+ }
+ return false;
+ }
+
+ if( BitDepth == 1 )
+ {
+ int i;
+ for( i=0 ; i < 2 ; i++ )
+ {
+ Colors[i].Red = i*255;
+ Colors[i].Green = i*255;
+ Colors[i].Blue = i*255;
+ Colors[i].Alpha = 0;
+ }
+ return true;
+ }
+
+ if( BitDepth == 4 )
+ {
+ int i = 0;
+ int j,k,ell;
+
+ // simplify the code for the first 8 colors
+ for( ell=0 ; ell < 2 ; ell++ )
+ {
+ for( k=0 ; k < 2 ; k++ )
+ {
+ for( j=0 ; j < 2 ; j++ )
+ {
+ Colors[i].Red = j*128;
+ Colors[i].Green = k*128;
+ Colors[i].Blue = ell*128;
+ i++;
+ }
+ }
+ }
+
+ // simplify the code for the last 8 colors
+ for( ell=0 ; ell < 2 ; ell++ )
+ {
+ for( k=0 ; k < 2 ; k++ )
+ {
+ for( j=0 ; j < 2 ; j++ )
+ {
+ Colors[i].Red = j*255;
+ Colors[i].Green = k*255;
+ Colors[i].Blue = ell*255;
+ i++;
+ }
+ }
+ }
+
+ // overwrite the duplicate color
+ i=8;
+ Colors[i].Red = 192;
+ Colors[i].Green = 192;
+ Colors[i].Blue = 192;
+
+ for( i=0 ; i < 16 ; i++ )
+ { Colors[i].Alpha = 0; }
+ return true;
+ }
+
+ if( BitDepth == 8 )
+ {
+ int i=0;
+ int j,k,ell;
+
+ // do an easy loop, which works for all but colors
+ // 0 to 9 and 246 to 255
+ for( ell=0 ; ell < 4 ; ell++ )
+ {
+ for( k=0 ; k < 8 ; k++ )
+ {
+ for( j=0; j < 8 ; j++ )
+ {
+ Colors[i].Red = j*32;
+ Colors[i].Green = k*32;
+ Colors[i].Blue = ell*64;
+ Colors[i].Alpha = 0;
+ i++;
+ }
+ }
+ }
+
+ // now redo the first 8 colors
+ i=0;
+ for( ell=0 ; ell < 2 ; ell++ )
+ {
+ for( k=0 ; k < 2 ; k++ )
+ {
+ for( j=0; j < 2 ; j++ )
+ {
+ Colors[i].Red = j*128;
+ Colors[i].Green = k*128;
+ Colors[i].Blue = ell*128;
+ i++;
+ }
+ }
+ }
+
+ // overwrite colors 7, 8, 9
+ i=7;
+ Colors[i].Red = 192;
+ Colors[i].Green = 192;
+ Colors[i].Blue = 192;
+ i++; // 8
+ Colors[i].Red = 192;
+ Colors[i].Green = 220;
+ Colors[i].Blue = 192;
+ i++; // 9
+ Colors[i].Red = 166;
+ Colors[i].Green = 202;
+ Colors[i].Blue = 240;
+
+ // overwrite colors 246 to 255
+ i=246;
+ Colors[i].Red = 255;
+ Colors[i].Green = 251;
+ Colors[i].Blue = 240;
+ i++; // 247
+ Colors[i].Red = 160;
+ Colors[i].Green = 160;
+ Colors[i].Blue = 164;
+ i++; // 248
+ Colors[i].Red = 128;
+ Colors[i].Green = 128;
+ Colors[i].Blue = 128;
+ i++; // 249
+ Colors[i].Red = 255;
+ Colors[i].Green = 0;
+ Colors[i].Blue = 0;
+ i++; // 250
+ Colors[i].Red = 0;
+ Colors[i].Green = 255;
+ Colors[i].Blue = 0;
+ i++; // 251
+ Colors[i].Red = 255;
+ Colors[i].Green = 255;
+ Colors[i].Blue = 0;
+ i++; // 252
+ Colors[i].Red = 0;
+ Colors[i].Green = 0;
+ Colors[i].Blue = 255;
+ i++; // 253
+ Colors[i].Red = 255;
+ Colors[i].Green = 0;
+ Colors[i].Blue = 255;
+ i++; // 254
+ Colors[i].Red = 0;
+ Colors[i].Green = 255;
+ Colors[i].Blue = 255;
+ i++; // 255
+ Colors[i].Red = 255;
+ Colors[i].Green = 255;
+ Colors[i].Blue = 255;
+
+ return true;
+ }
+ return true;
+}
+
+bool SafeFread( char* buffer, int size, int number, FILE* fp )
+{
+ using namespace std;
+ int ItemsRead;
+ if( feof(fp) )
+ { return false; }
+ ItemsRead = (int) fread( buffer , size , number , fp );
+ if( ItemsRead < number )
+ { return false; }
+ return true;
+}
+
+void BMP::SetDPI( int HorizontalDPI, int VerticalDPI )
+{
+ XPelsPerMeter = (int) ( HorizontalDPI * 39.37007874015748 );
+ YPelsPerMeter = (int) ( VerticalDPI * 39.37007874015748 );
+}
+
+// int BMP::TellVerticalDPI( void ) const
+int BMP::TellVerticalDPI( void )
+{
+ if( !YPelsPerMeter )
+ { YPelsPerMeter = DefaultYPelsPerMeter; }
+ return (int) ( YPelsPerMeter / (double) 39.37007874015748 );
+}
+
+// int BMP::TellHorizontalDPI( void ) const
+int BMP::TellHorizontalDPI( void )
+{
+ if( !XPelsPerMeter )
+ { XPelsPerMeter = DefaultXPelsPerMeter; }
+ return (int) ( XPelsPerMeter / (double) 39.37007874015748 );
+}
+
+/* These functions are defined in EasyBMP_VariousBMPutilities.h */
+
+BMFH GetBMFH( const char* szFileNameIn )
+{
+ using namespace std;
+ BMFH bmfh;
+
+ FILE* fp;
+ fp = fopen( szFileNameIn,"rb");
+
+ if( !fp )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: Cannot initialize from file "
+ << szFileNameIn << "." << endl
+ << " File cannot be opened or does not exist."
+ << endl;
+ }
+ bmfh.bfType = 0;
+ return bmfh;
+ }
+
+ SafeFread( (char*) &(bmfh.bfType) , sizeof(ebmpWORD) , 1 , fp );
+ SafeFread( (char*) &(bmfh.bfSize) , sizeof(ebmpDWORD) , 1 , fp );
+ SafeFread( (char*) &(bmfh.bfReserved1) , sizeof(ebmpWORD) , 1 , fp );
+ SafeFread( (char*) &(bmfh.bfReserved2) , sizeof(ebmpWORD) , 1 , fp );
+ SafeFread( (char*) &(bmfh.bfOffBits) , sizeof(ebmpDWORD) , 1 , fp );
+
+ fclose( fp );
+
+ if( IsBigEndian() )
+ { bmfh.SwitchEndianess(); }
+
+ return bmfh;
+}
+
+BMIH GetBMIH( const char* szFileNameIn )
+{
+ using namespace std;
+ BMFH bmfh;
+ BMIH bmih;
+
+ FILE* fp;
+ fp = fopen( szFileNameIn,"rb");
+
+ if( !fp )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: Cannot initialize from file "
+ << szFileNameIn << "." << endl
+ << " File cannot be opened or does not exist."
+ << endl;
+ }
+ return bmih;
+ }
+
+ // read the bmfh, i.e., first 14 bytes (just to get it out of the way);
+
+ ebmpBYTE TempBYTE;
+ int i;
+ for( i = 14 ; i > 0 ; i-- )
+ { SafeFread( (char*) &TempBYTE , sizeof(ebmpBYTE) , 1, fp ); }
+
+ // read the bmih
+
+ SafeFread( (char*) &(bmih.biSize) , sizeof(ebmpDWORD) , 1 , fp );
+ SafeFread( (char*) &(bmih.biWidth) , sizeof(ebmpDWORD) , 1 , fp );
+ SafeFread( (char*) &(bmih.biHeight) , sizeof(ebmpDWORD) , 1 , fp );
+ SafeFread( (char*) &(bmih.biPlanes) , sizeof(ebmpWORD) , 1 , fp );
+
+ SafeFread( (char*) &(bmih.biBitCount) , sizeof(ebmpWORD) , 1 , fp );
+ SafeFread( (char*) &(bmih.biCompression) , sizeof(ebmpDWORD) , 1 , fp );
+ SafeFread( (char*) &(bmih.biSizeImage) , sizeof(ebmpDWORD) , 1 , fp );
+ SafeFread( (char*) &(bmih.biXPelsPerMeter) , sizeof(ebmpDWORD) , 1 , fp );
+
+ SafeFread( (char*) &(bmih.biYPelsPerMeter) , sizeof(ebmpDWORD) , 1 , fp );
+ SafeFread( (char*) &(bmih.biClrUsed) , sizeof(ebmpDWORD) , 1 , fp );
+ SafeFread( (char*) &(bmih.biClrImportant) , sizeof(ebmpDWORD) , 1 , fp );
+
+ fclose( fp );
+
+ if( IsBigEndian() )
+ { bmih.SwitchEndianess(); }
+
+ return bmih;
+}
+
+void DisplayBitmapInfo( const char* szFileNameIn )
+{
+ using namespace std;
+ FILE* fp;
+ fp = fopen( szFileNameIn,"rb");
+
+ if( !fp )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: Cannot initialize from file "
+ << szFileNameIn << "." << endl
+ << " File cannot be opened or does not exist."
+ << endl;
+ }
+ return;
+ }
+ fclose( fp );
+
+ // don't duplicate work! Just use the functions from above!
+
+ BMFH bmfh = GetBMFH(szFileNameIn);
+ BMIH bmih = GetBMIH(szFileNameIn);
+
+ cout << "File information for file " << szFileNameIn
+ << ":" << endl << endl;
+
+ cout << "BITMAPFILEHEADER:" << endl
+ << "bfType: " << bmfh.bfType << endl
+ << "bfSize: " << bmfh.bfSize << endl
+ << "bfReserved1: " << bmfh.bfReserved1 << endl
+ << "bfReserved2: " << bmfh.bfReserved2 << endl
+ << "bfOffBits: " << bmfh.bfOffBits << endl << endl;
+
+ cout << "BITMAPINFOHEADER:" << endl
+ << "biSize: " << bmih.biSize << endl
+ << "biWidth: " << bmih.biWidth << endl
+ << "biHeight: " << bmih.biHeight << endl
+ << "biPlanes: " << bmih.biPlanes << endl
+ << "biBitCount: " << bmih.biBitCount << endl
+ << "biCompression: " << bmih.biCompression << endl
+ << "biSizeImage: " << bmih.biSizeImage << endl
+ << "biXPelsPerMeter: " << bmih.biXPelsPerMeter << endl
+ << "biYPelsPerMeter: " << bmih.biYPelsPerMeter << endl
+ << "biClrUsed: " << bmih.biClrUsed << endl
+ << "biClrImportant: " << bmih.biClrImportant << endl << endl;
+ return;
+}
+
+int GetBitmapColorDepth( const char* szFileNameIn )
+{
+ BMIH bmih = GetBMIH( szFileNameIn );
+ return (int) bmih.biBitCount;
+}
+
+void PixelToPixelCopy( BMP& From, int FromX, int FromY,
+ BMP& To, int ToX, int ToY)
+{
+ *To(ToX,ToY) = *From(FromX,FromY);
+ return;
+}
+
+void PixelToPixelCopyTransparent( BMP& From, int FromX, int FromY,
+ BMP& To, int ToX, int ToY,
+ RGBApixel& Transparent )
+{
+ if( From(FromX,FromY)->Red != Transparent.Red ||
+ From(FromX,FromY)->Green != Transparent.Green ||
+ From(FromX,FromY)->Blue != Transparent.Blue )
+ { *To(ToX,ToY) = *From(FromX,FromY); }
+ return;
+}
+
+void RangedPixelToPixelCopy( BMP& From, int FromL , int FromR, int FromB, int FromT,
+ BMP& To, int ToX, int ToY )
+{
+ // make sure the conventions are followed
+ if( FromB < FromT )
+ { int Temp = FromT; FromT = FromB; FromB = Temp; }
+
+ // make sure that the copied regions exist in both bitmaps
+ if( FromR >= From.TellWidth() )
+ { FromR = From.TellWidth()-1; }
+ if( FromL < 0 ){ FromL = 0; }
+
+ if( FromB >= From.TellHeight() )
+ { FromB = From.TellHeight()-1; }
+ if( FromT < 0 ){ FromT = 0; }
+
+ if( ToX+(FromR-FromL) >= To.TellWidth() )
+ { FromR = To.TellWidth()-1+FromL-ToX; }
+ if( ToY+(FromB-FromT) >= To.TellHeight() )
+ { FromB = To.TellHeight()-1+FromT-ToY; }
+
+ int i,j;
+ for( j=FromT ; j <= FromB ; j++ )
+ {
+ for( i=FromL ; i <= FromR ; i++ )
+ {
+ PixelToPixelCopy( From, i,j,
+ To, ToX+(i-FromL), ToY+(j-FromT) );
+ }
+ }
+
+ return;
+}
+
+void RangedPixelToPixelCopyTransparent(
+ BMP& From, int FromL , int FromR, int FromB, int FromT,
+ BMP& To, int ToX, int ToY ,
+ RGBApixel& Transparent )
+{
+ // make sure the conventions are followed
+ if( FromB < FromT )
+ { int Temp = FromT; FromT = FromB; FromB = Temp; }
+
+ // make sure that the copied regions exist in both bitmaps
+ if( FromR >= From.TellWidth() )
+ { FromR = From.TellWidth()-1; }
+ if( FromL < 0 ){ FromL = 0; }
+
+ if( FromB >= From.TellHeight() )
+ { FromB = From.TellHeight()-1; }
+ if( FromT < 0 ){ FromT = 0; }
+
+ if( ToX+(FromR-FromL) >= To.TellWidth() )
+ { FromR = To.TellWidth()-1+FromL-ToX; }
+ if( ToY+(FromB-FromT) >= To.TellHeight() )
+ { FromB = To.TellHeight()-1+FromT-ToY; }
+
+ int i,j;
+ for( j=FromT ; j <= FromB ; j++ )
+ {
+ for( i=FromL ; i <= FromR ; i++ )
+ {
+ PixelToPixelCopyTransparent( From, i,j,
+ To, ToX+(i-FromL), ToY+(j-FromT) ,
+ Transparent);
+ }
+ }
+
+ return;
+}
+
+bool CreateGrayscaleColorTable( BMP& InputImage )
+{
+ using namespace std;
+ int BitDepth = InputImage.TellBitDepth();
+ if( BitDepth != 1 && BitDepth != 4 && BitDepth != 8 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Warning: Attempted to create color table at a bit" << endl
+ << " depth that does not require a color table." << endl
+ << " Ignoring request." << endl;
+ }
+ return false;
+ }
+ int i;
+ int NumberOfColors = InputImage.TellNumberOfColors();
+
+ ebmpBYTE StepSize;
+ if( BitDepth != 1 )
+ { StepSize = 255/(NumberOfColors-1); }
+ else
+ { StepSize = 255; }
+
+ for( i=0 ; i < NumberOfColors ; i++ )
+ {
+ ebmpBYTE TempBYTE = i*StepSize;
+ RGBApixel TempColor;
+ TempColor.Red = TempBYTE;
+ TempColor.Green = TempBYTE;
+ TempColor.Blue = TempBYTE;
+ TempColor.Alpha = 0;
+ InputImage.SetColor( i , TempColor );
+ }
+ return true;
+}
+
+bool BMP::Read32bitRow( ebmpBYTE* Buffer, int BufferSize, int Row )
+{
+ int i;
+ if( Width*4 > BufferSize )
+ { return false; }
+ for( i=0 ; i < Width ; i++ )
+ { memcpy( (char*) &(Pixels[i][Row]), (char*) Buffer+4*i, 4 ); }
+ return true;
+}
+
+bool BMP::Read24bitRow( ebmpBYTE* Buffer, int BufferSize, int Row )
+{
+ int i;
+ if( Width*3 > BufferSize )
+ { return false; }
+ for( i=0 ; i < Width ; i++ )
+ { memcpy( (char*) &(Pixels[i][Row]), Buffer+3*i, 3 ); }
+ return true;
+}
+
+bool BMP::Read8bitRow( ebmpBYTE* Buffer, int BufferSize, int Row )
+{
+ int i;
+ if( Width > BufferSize )
+ { return false; }
+ for( i=0 ; i < Width ; i++ )
+ {
+ int Index = Buffer[i];
+ *( this->operator()(i,Row) )= GetColor(Index);
+ }
+ return true;
+}
+
+bool BMP::Read4bitRow( ebmpBYTE* Buffer, int BufferSize, int Row )
+{
+ int Shifts[2] = {4 ,0 };
+ int Masks[2] = {240,15};
+
+ int i=0;
+ int j;
+ int k=0;
+ if( Width > 2*BufferSize )
+ { return false; }
+ while( i < Width )
+ {
+ j=0;
+ while( j < 2 && i < Width )
+ {
+ int Index = (int) ( (Buffer[k]&Masks[j]) >> Shifts[j]);
+ *( this->operator()(i,Row) )= GetColor(Index);
+ i++; j++;
+ }
+ k++;
+ }
+ return true;
+}
+bool BMP::Read1bitRow( ebmpBYTE* Buffer, int BufferSize, int Row )
+{
+ int Shifts[8] = {7 ,6 ,5 ,4 ,3,2,1,0};
+ int Masks[8] = {128,64,32,16,8,4,2,1};
+
+ int i=0;
+ int j;
+ int k=0;
+
+ if( Width > 8*BufferSize )
+ { return false; }
+ while( i < Width )
+ {
+ j=0;
+ while( j < 8 && i < Width )
+ {
+ int Index = (int) ( (Buffer[k]&Masks[j]) >> Shifts[j]);
+ *( this->operator()(i,Row) )= GetColor(Index);
+ i++; j++;
+ }
+ k++;
+ }
+ return true;
+}
+
+bool BMP::Write32bitRow( ebmpBYTE* Buffer, int BufferSize, int Row )
+{
+ int i;
+ if( Width*4 > BufferSize )
+ { return false; }
+ for( i=0 ; i < Width ; i++ )
+ { memcpy( (char*) Buffer+4*i, (char*) &(Pixels[i][Row]), 4 ); }
+ return true;
+}
+
+bool BMP::Write24bitRow( ebmpBYTE* Buffer, int BufferSize, int Row )
+{
+ int i;
+ if( Width*3 > BufferSize )
+ { return false; }
+ for( i=0 ; i < Width ; i++ )
+ { memcpy( (char*) Buffer+3*i, (char*) &(Pixels[i][Row]), 3 ); }
+ return true;
+}
+
+bool BMP::Write8bitRow( ebmpBYTE* Buffer, int BufferSize, int Row )
+{
+ int i;
+ if( Width > BufferSize )
+ { return false; }
+ for( i=0 ; i < Width ; i++ )
+ { Buffer[i] = FindClosestColor( Pixels[i][Row] ); }
+ return true;
+}
+
+bool BMP::Write4bitRow( ebmpBYTE* Buffer, int BufferSize, int Row )
+{
+ int PositionWeights[2] = {16,1};
+
+ int i=0;
+ int j;
+ int k=0;
+ if( Width > 2*BufferSize )
+ { return false; }
+ while( i < Width )
+ {
+ j=0;
+ int Index = 0;
+ while( j < 2 && i < Width )
+ {
+ Index += ( PositionWeights[j]* (int) FindClosestColor( Pixels[i][Row] ) );
+ i++; j++;
+ }
+ Buffer[k] = (ebmpBYTE) Index;
+ k++;
+ }
+ return true;
+}
+
+bool BMP::Write1bitRow( ebmpBYTE* Buffer, int BufferSize, int Row )
+{
+ int PositionWeights[8] = {128,64,32,16,8,4,2,1};
+
+ int i=0;
+ int j;
+ int k=0;
+ if( Width > 8*BufferSize )
+ { return false; }
+ while( i < Width )
+ {
+ j=0;
+ int Index = 0;
+ while( j < 8 && i < Width )
+ {
+ Index += ( PositionWeights[j]* (int) FindClosestColor( Pixels[i][Row] ) );
+ i++; j++;
+ }
+ Buffer[k] = (ebmpBYTE) Index;
+ k++;
+ }
+ return true;
+}
+
+ebmpBYTE BMP::FindClosestColor( RGBApixel& input )
+{
+ using namespace std;
+
+ int i=0;
+ int NumberOfColors = TellNumberOfColors();
+ ebmpBYTE BestI = 0;
+ int BestMatch = 999999;
+
+ while( i < NumberOfColors )
+ {
+ RGBApixel Attempt = GetColor( i );
+ int TempMatch = IntSquare( (int) Attempt.Red - (int) input.Red )
+ + IntSquare( (int) Attempt.Green - (int) input.Green )
+ + IntSquare( (int) Attempt.Blue - (int) input.Blue );
+ if( TempMatch < BestMatch )
+ { BestI = (ebmpBYTE) i; BestMatch = TempMatch; }
+ if( BestMatch < 1 )
+ { i = NumberOfColors; }
+ i++;
+ }
+ return BestI;
+}
+
+bool EasyBMPcheckDataSize( void )
+{
+ using namespace std;
+ bool ReturnValue = true;
+ if( sizeof( ebmpBYTE ) != 1 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: ebmpBYTE has the wrong size ("
+ << sizeof( ebmpBYTE ) << " bytes)," << endl
+ << " Compared to the expected 1 byte value" << endl;
+ }
+ ReturnValue = false;
+ }
+ if( sizeof( ebmpWORD ) != 2 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: ebmpWORD has the wrong size ("
+ << sizeof( ebmpWORD ) << " bytes)," << endl
+ << " Compared to the expected 2 byte value" << endl;
+ }
+ ReturnValue = false;
+ }
+ if( sizeof( ebmpDWORD ) != 4 )
+ {
+ if( EasyBMPwarnings )
+ {
+ cout << "EasyBMP Error: ebmpDWORD has the wrong size ("
+ << sizeof( ebmpDWORD ) << " bytes)," << endl
+ << " Compared to the expected 4 byte value" << endl;
+ }
+ ReturnValue = false;
+ }
+ return ReturnValue;
+}
+
+bool Rescale( BMP& InputImage , char mode, int NewDimension )
+{
+ using namespace std;
+ int CapMode = toupper( mode );
+
+ BMP OldImage( InputImage );
+
+ if( CapMode != 'P' &&
+ CapMode != 'W' &&
+ CapMode != 'H' &&
+ CapMode != 'F' )
+ {
+ if( EasyBMPwarnings )
+ {
+ char ErrorMessage [1024];
+ sprintf( ErrorMessage, "EasyBMP Error: Unknown rescale mode %c requested\n" , mode );
+ cout << ErrorMessage;
+ }
+ return false;
+ }
+
+ int NewWidth =0;
+ int NewHeight =0;
+
+ int OldWidth = OldImage.TellWidth();
+ int OldHeight= OldImage.TellHeight();
+
+ if( CapMode == 'P' )
+ {
+ NewWidth = (int) floor( OldWidth * NewDimension / 100.0 );
+ NewHeight = (int) floor( OldHeight * NewDimension / 100.0 );
+ }
+ if( CapMode == 'F' )
+ {
+ if( OldWidth > OldHeight )
+ { CapMode = 'W'; }
+ else
+ { CapMode = 'H'; }
+ }
+
+ if( CapMode == 'W' )
+ {
+ double percent = (double) NewDimension / (double) OldWidth;
+ NewWidth = NewDimension;
+ NewHeight = (int) floor( OldHeight * percent );
+ }
+ if( CapMode == 'H' )
+ {
+ double percent = (double) NewDimension / (double) OldHeight;
+ NewHeight = NewDimension;
+ NewWidth = (int) floor( OldWidth * percent );
+ }
+
+ if( NewWidth < 1 )
+ { NewWidth = 1; }
+ if( NewHeight < 1 )
+ { NewHeight = 1; }
+
+ InputImage.SetSize( NewWidth, NewHeight );
+ InputImage.SetBitDepth( 24 );
+
+ int I,J;
+ double ThetaI,ThetaJ;
+
+ for( int j=0; j < NewHeight-1 ; j++ )
+ {
+ ThetaJ = (double)(j*(OldHeight-1.0))
+ /(double)(NewHeight-1.0);
+ J = (int) floor( ThetaJ );
+ ThetaJ -= J;
+
+ for( int i=0; i < NewWidth-1 ; i++ )
+ {
+ ThetaI = (double)(i*(OldWidth-1.0))
+ /(double)(NewWidth-1.0);
+ I = (int) floor( ThetaI );
+ ThetaI -= I;
+
+ InputImage(i,j)->Red = (ebmpBYTE)
+ ( (1.0-ThetaI-ThetaJ+ThetaI*ThetaJ)*(OldImage(I,J)->Red)
+ +(ThetaI-ThetaI*ThetaJ)*(OldImage(I+1,J)->Red)
+ +(ThetaJ-ThetaI*ThetaJ)*(OldImage(I,J+1)->Red)
+ +(ThetaI*ThetaJ)*(OldImage(I+1,J+1)->Red) );
+ InputImage(i,j)->Green = (ebmpBYTE)
+ ( (1.0-ThetaI-ThetaJ+ThetaI*ThetaJ)*OldImage(I,J)->Green
+ +(ThetaI-ThetaI*ThetaJ)*OldImage(I+1,J)->Green
+ +(ThetaJ-ThetaI*ThetaJ)*OldImage(I,J+1)->Green
+ +(ThetaI*ThetaJ)*OldImage(I+1,J+1)->Green );
+ InputImage(i,j)->Blue = (ebmpBYTE)
+ ( (1.0-ThetaI-ThetaJ+ThetaI*ThetaJ)*OldImage(I,J)->Blue
+ +(ThetaI-ThetaI*ThetaJ)*OldImage(I+1,J)->Blue
+ +(ThetaJ-ThetaI*ThetaJ)*OldImage(I,J+1)->Blue
+ +(ThetaI*ThetaJ)*OldImage(I+1,J+1)->Blue );
+ }
+ InputImage(NewWidth-1,j)->Red = (ebmpBYTE)
+ ( (1.0-ThetaJ)*(OldImage(OldWidth-1,J)->Red)
+ + ThetaJ*(OldImage(OldWidth-1,J+1)->Red) );
+ InputImage(NewWidth-1,j)->Green = (ebmpBYTE)
+ ( (1.0-ThetaJ)*(OldImage(OldWidth-1,J)->Green)
+ + ThetaJ*(OldImage(OldWidth-1,J+1)->Green) );
+ InputImage(NewWidth-1,j)->Blue = (ebmpBYTE)
+ ( (1.0-ThetaJ)*(OldImage(OldWidth-1,J)->Blue)
+ + ThetaJ*(OldImage(OldWidth-1,J+1)->Blue) );
+ }
+
+ for( int i=0 ; i < NewWidth-1 ; i++ )
+ {
+ ThetaI = (double)(i*(OldWidth-1.0))
+ /(double)(NewWidth-1.0);
+ I = (int) floor( ThetaI );
+ ThetaI -= I;
+ InputImage(i,NewHeight-1)->Red = (ebmpBYTE)
+ ( (1.0-ThetaI)*(OldImage(I,OldHeight-1)->Red)
+ + ThetaI*(OldImage(I,OldHeight-1)->Red) );
+ InputImage(i,NewHeight-1)->Green = (ebmpBYTE)
+ ( (1.0-ThetaI)*(OldImage(I,OldHeight-1)->Green)
+ + ThetaI*(OldImage(I,OldHeight-1)->Green) );
+ InputImage(i,NewHeight-1)->Blue = (ebmpBYTE)
+ ( (1.0-ThetaI)*(OldImage(I,OldHeight-1)->Blue)
+ + ThetaI*(OldImage(I,OldHeight-1)->Blue) );
+ }
+
+ *InputImage(NewWidth-1,NewHeight-1) = *OldImage(OldWidth-1,OldHeight-1);
+ return true;
+}
diff --git a/src/EasyBMP.h b/src/EasyBMP.h
new file mode 100644
index 0000000..ead98c1
--- /dev/null
+++ b/src/EasyBMP.h
@@ -0,0 +1,86 @@
+/*************************************************
+* *
+* EasyBMP Cross-Platform Windows Bitmap Library *
+* *
+* Author: Paul Macklin *
+* email: macklin01@users.sourceforge.net *
+* support: http://easybmp.sourceforge.net *
+* *
+* file: EasyBMP.h *
+* date added: 01-31-2005 *
+* date modified: 12-01-2006 *
+* version: 1.06 *
+* *
+* License: BSD (revised/modified) *
+* Copyright: 2005-6 by the EasyBMP Project *
+* *
+* description: Main include file *
+* *
+*************************************************/
+
+#ifdef _MSC_VER
+// MS Visual Studio gives warnings when using
+// fopen. But fopen_s is not going to work well
+// with most compilers, and fopen_s uses different
+// syntax than fopen. (i.e., a macro won't work)
+// So, we'lll use this:
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+#include
+#include
+#include
+#include
+
+#ifndef EasyBMP
+#define EasyBMP
+
+#ifdef __BCPLUSPLUS__
+// The Borland compiler must use this because something
+// is wrong with their cstdio file.
+#include
+#else
+#include
+#endif
+
+#ifdef __GNUC__
+// If g++ specific code is ever required, this is
+// where it goes.
+#endif
+
+#ifdef __INTEL_COMPILER
+// If Intel specific code is ever required, this is
+// where it goes.
+#endif
+
+#ifndef _DefaultXPelsPerMeter_
+#define _DefaultXPelsPerMeter_
+#define DefaultXPelsPerMeter 3780
+// set to a default of 96 dpi
+#endif
+
+#ifndef _DefaultYPelsPerMeter_
+#define _DefaultYPelsPerMeter_
+#define DefaultYPelsPerMeter 3780
+// set to a default of 96 dpi
+#endif
+
+#include "EasyBMP_DataStructures.h"
+#include "EasyBMP_BMP.h"
+#include "EasyBMP_VariousBMPutilities.h"
+
+#ifndef _EasyBMP_Version_
+#define _EasyBMP_Version_ 1.06
+#define _EasyBMP_Version_Integer_ 106
+#define _EasyBMP_Version_String_ "1.06"
+#endif
+
+#ifndef _EasyBMPwarnings_
+#define _EasyBMPwarnings_
+#endif
+
+void SetEasyBMPwarningsOff( void );
+void SetEasyBMPwarningsOn( void );
+bool GetEasyBMPwarningState( void );
+
+#endif
diff --git a/src/EasyBMP_BMP.h b/src/EasyBMP_BMP.h
new file mode 100644
index 0000000..819a976
--- /dev/null
+++ b/src/EasyBMP_BMP.h
@@ -0,0 +1,86 @@
+/*************************************************
+* *
+* EasyBMP Cross-Platform Windows Bitmap Library *
+* *
+* Author: Paul Macklin *
+* email: macklin01@users.sourceforge.net *
+* support: http://easybmp.sourceforge.net *
+* *
+* file: EasyBMP_VariousBMPutilities.h *
+* date added: 05-02-2005 *
+* date modified: 12-01-2006 *
+* version: 1.06 *
+* *
+* License: BSD (revised/modified) *
+* Copyright: 2005-6 by the EasyBMP Project *
+* *
+* description: Defines BMP class *
+* *
+*************************************************/
+
+#ifndef _EasyBMP_BMP_h_
+#define _EasyBMP_BMP_h_
+
+bool SafeFread( char* buffer, int size, int number, FILE* fp );
+bool EasyBMPcheckDataSize( void );
+
+class BMP
+{private:
+
+ int BitDepth;
+ int Width;
+ int Height;
+ RGBApixel** Pixels;
+ RGBApixel* Colors;
+ int XPelsPerMeter;
+ int YPelsPerMeter;
+
+ ebmpBYTE* MetaData1;
+ int SizeOfMetaData1;
+ ebmpBYTE* MetaData2;
+ int SizeOfMetaData2;
+
+ bool Read32bitRow( ebmpBYTE* Buffer, int BufferSize, int Row );
+ bool Read24bitRow( ebmpBYTE* Buffer, int BufferSize, int Row );
+ bool Read8bitRow( ebmpBYTE* Buffer, int BufferSize, int Row );
+ bool Read4bitRow( ebmpBYTE* Buffer, int BufferSize, int Row );
+ bool Read1bitRow( ebmpBYTE* Buffer, int BufferSize, int Row );
+
+ bool Write32bitRow( ebmpBYTE* Buffer, int BufferSize, int Row );
+ bool Write24bitRow( ebmpBYTE* Buffer, int BufferSize, int Row );
+ bool Write8bitRow( ebmpBYTE* Buffer, int BufferSize, int Row );
+ bool Write4bitRow( ebmpBYTE* Buffer, int BufferSize, int Row );
+ bool Write1bitRow( ebmpBYTE* Buffer, int BufferSize, int Row );
+
+ ebmpBYTE FindClosestColor( RGBApixel& input );
+
+ public:
+
+ int TellBitDepth( void );
+ int TellWidth( void );
+ int TellHeight( void );
+ int TellNumberOfColors( void );
+ void SetDPI( int HorizontalDPI, int VerticalDPI );
+ int TellVerticalDPI( void );
+ int TellHorizontalDPI( void );
+
+ BMP();
+ BMP( BMP& Input );
+ ~BMP();
+ RGBApixel* operator()(int i,int j);
+
+ RGBApixel GetPixel( int i, int j ) const;
+ bool SetPixel( int i, int j, RGBApixel NewPixel );
+
+ bool CreateStandardColorTable( void );
+
+ bool SetSize( int NewWidth, int NewHeight );
+ bool SetBitDepth( int NewDepth );
+ bool WriteToFile( const char* FileName );
+ bool ReadFromFile( const char* FileName );
+
+ RGBApixel GetColor( int ColorNumber );
+ bool SetColor( int ColorNumber, RGBApixel NewColor );
+};
+
+#endif
diff --git a/src/EasyBMP_ChangeLog.txt b/src/EasyBMP_ChangeLog.txt
new file mode 100644
index 0000000..868174d
--- /dev/null
+++ b/src/EasyBMP_ChangeLog.txt
@@ -0,0 +1,821 @@
+EasyBMP Cross-Platform Windows Bitmap Library: Change Log
+
+Library Author(s): Paul Macklin
+ Library License: BSD (revised). See the BSD_(revised)_license.txt
+ file for further information.
+ Copyright: 2005-6 by the EasyBMP Project
+ Email: macklin01@users.sourceforge.net
+ Support: http://easybmp.sourceforge.net
+
+All changes by Paul Macklin unless otherwise noted.
+
+*--------------------------------------------------------------------*
+
+Version: 0.50
+ Date: 1-31-2005
+
+ None! (first release)
+
+*--------------------------------------------------------------------*
+
+Version: 0.51
+ Date: 2-14-2005
+
+ Added full 32-bit BMP file support
+
+ Took out annoying "colors: " message from BMP8 initialization
+ from scratch
+
+ Added more license and copyright info to each file
+
+ Added change log to library
+
+ To do next:
+ Should update the error messages for the initializations
+ Should simplify the reading and writing code
+
+*--------------------------------------------------------------------*
+
+Version: 0.52
+ Date: 2-19-2005
+
+ Fixed a minor bug in the MakeGreyscalePalette function where the
+ 0 color turned out to be (255,255,255), rather than (0,0,0)
+
+ Updated standard colors for 4-bit, 8-bit, and 24-bit
+
+*--------------------------------------------------------------------*
+
+Version: 0.53
+ Date: 2-27-2005
+
+ Fixed unsigned / signed problem that VS.net shows
+
+
+ Tried fix of line 186 in EasyBMP_BMP4.h file. If it works,
+ I'll apply it consistently. I think that VS.net wants us
+ to clear char* blah, then char = new blah [size], just
+ like the old days for g++.
+
+ Removed EasyBMP_StandardColors.h from standard package
+
+*--------------------------------------------------------------------*
+
+Version: 0.54
+ Date: 2-27-2005
+
+ The fix of line 186 in EasyBMP_BMP4.h file appears to have
+ worked. I applied it through the remainder of the code.
+ Hopefully, this should ensure Visual Studio.Net compati-
+ bility.
+
+ Fixed some typos in the comment lines
+
+*--------------------------------------------------------------------*
+
+Version: 0.55
+ Date: 5-2-2005
+
+ Introduced RGBApixel struct.
+
+ Introduced BMFH, BMIH, and BMP classes.
+
+ Deprecated all old code to *_legacy.h.
+
+ Rewrote EasyBMP_VariousBMPutilities.h to use the new
+ BMP class.
+
+*--------------------------------------------------------------------*
+
+Version: 0.56
+ Date: 5-4-2005
+
+ Made Width, Height, and BitDepth private members and added
+ functions for accessing them.
+
+ Made a new function, SetBitDepth, as the only means to
+ change the bit depth. It will create/resize a palette as
+ necessary. This simplifies the WriteToFile code, as well as
+ any palette altering algorithms. (All algorithms can now
+ assume that a properly-sized palette exists.) This will
+ help improve code stability greatly.
+
+ Made a new function, SetSize, as the only way to change the
+ width and height of the image.
+
+ Eliminated useless HasPalette and NumberOfColors members,
+ and added TellNumberOfColors() function.
+
+ Updated EasyBMP_VariousBMPutilities.h to respect privacy
+ of data members.
+
+*--------------------------------------------------------------------*
+
+Version: 0.57
+ Date: 5-8-2005
+
+ Removed fclose(fp) lines from EasyBMP_BMP.h and
+ EasyBMP_VariousBMPutilities.h whenever ( !fp ) occurs,
+ to avoid a crash when trying to close a non-existant file.
+
+
+ Added a line to set bmfh.bfType = 0; to getBMFH() routine
+ in the case where ( !fp ) occurs, so that a nonexistant file
+ doesn't falsely show up as a bitmap file.
+
+ Made error messages in BMP::ReadFromFile(char*) more meaningful,
+ since Argh! doesn't help much. :-)
+
+ Made ReadFromFile operations safer: can deal more effectively
+ with corrupted and/or truncated files by adding the new
+ SafeFread() wrapper function.
+
+ Moved all change-log entries to the change log to make the source
+ file tidier.
+
+ Removed all references to Palettes; renamed them to ColorTables.
+
+*--------------------------------------------------------------------*
+
+Version: 0.58
+ Date: 5-13-2005
+
+ Rewrote ReadFromFile() to fix program crashes on reading 4-bit
+ files. (*grumble* I can't believe there was such a bug in such
+ a late version! */grumble*)
+
+ Added support to ReadFromFile() for reading 1-bit files.
+
+ Rewrote ReadFromFile() to avoid trying to read bitmap files of
+ depths other than 1, 4, 8, 24, and 32 bits.
+
+ Tested reading 4-bit files of width 0,1,2, and 3 (modulo 4),
+ and 1-bit files of width 0,1,2,3,4,5,6, and 7 (modulo 8)
+
+*--------------------------------------------------------------------*
+
+Version: 0.59
+ Date: 5-15-2005
+
+ Made ReadFromFile() more robust. Evidently, reading to the
+ same temp variable all the time made it unstable when reading
+ many files. I would never have guessed. I instead declare BMIH
+ and BMFH objects and read directly to their members. This appears
+ to be more stable when dealing with many ReadFromFile() calls.
+
+ On a related note, made sure to not call SetSize( Width,Height),
+ which is a bit recursive, as well as SetBitDepth( BitDepth ).
+ This appears to help stability, since these two functions were
+ create precisely for the purpose of setting those variables
+ values safely.
+
+ Made use of the boolean return value in SafeFread() to detect
+ when files are obviously corrupted. Used this to have an early
+ catch in ReadFromFile() and set it to a 1x1 1-bit image and
+ exit.
+
+ Made ReadFromFile() stricter, in that it only reads recognized
+ bit depths (1,4,8,24,32). Any other bit depth will prompt the
+ routine to terminate and set it to a 1x1 1-bit file.
+
+ Added write support for 1-bit files.
+
+ Rewrote WriteToFile() for 4,8-bit files to match methods used
+ for reading them.
+
+ Revised CreateStandardColorTable() and
+ CreateGreyscaleColorTable() to add support for 1-bit files.
+
+ Rewrote WriteToFile() to be stricter in only writing known bit
+ depths (1,4,8,24,32) and ignoring all others.
+
+*--------------------------------------------------------------------*
+
+Version: 0.60
+ Date: 5-21-2005
+
+ Deprecated *_legacy.h files.
+
+ Tested library extensivey in linux with good results.
+
+ Made CreateGreyscaleColorTable() stricter, in that it exits
+ if supplied a bit depth other than 1, 4, or 8.
+
+ Made cosmetic changes in EasyBMP_DataStructures.h to
+ improve readability.
+
+ Made SetBitDepth() stricter, in that it will never allow a bitmap
+ to be set to an unsupported bit depth. Only bit depths of 1, 4,
+ 8, 24, or 32 are accepted.
+
+ Made SetSize() stricter, in that it will not allow negative
+ widths or heights.
+
+ Made cosmetic changes in EasyBMP_BMP.h to improve readability.
+
+ Added a check in ReadFromFile() to see if the requested width or
+ height is negative, a good sign of file corruption. In such a
+ case, the file is set to a blank 1x1 1-bit file.
+
+ Added code to ReadFromFile() to set size to 1x1 and bit depth to
+ 1-bit if the file was not found.
+
+*--------------------------------------------------------------------*
+
+Version: 0.61
+ Date: 5-22-2005
+
+ Fixed awIndex typo in WriteToFile().
+
+ Replaced double BestDistance comparisons in WriteToFile()
+ with int BestDistances (so as to do integer operations,
+ rather than double operations). This gave a roughly 100%
+ speedup in 8-bit, 4-bit, and 1-bit write operations on
+ unoptimized (no compiler flags) code and a 30% speedup
+ on optimized code.
+
+ Removed checks like if( BestDistance < 1 ){ k=256; } .. from
+ WriteToFile(), as they give more overhead than savings in my
+ testing. For 8-bit files, there was a slight gain by putting
+ it back in with another method:
+ while( k < 256 && BestDistance > 0 ).
+
+ Redefined StepSize in CreateGreyscaleColorTable() to give a
+ better range of greys in 4-bit mode. As it was, white was not
+ in the color table. (Colors were spaced by 256/16 = 16). Now,
+ colors are spaced by (255-1)/(16-1) = 17, which gives the full
+ range.
+
+*--------------------------------------------------------------------*
+
+Version: 0.62
+ Date: 5-25-2005
+
+ Added endianess check function IsBigEndian() to
+ EasyBMP_DataStructures.h file.
+
+ Added functions to swap bytes in WORD and DWORD multibyte
+ variables to EasyBMP_DataStructures.h file for future big-endian
+ support.
+
+ Added functions to switch endianess to BMFH and BMIH objects
+ to EasyBMP_DataStructures.h file.
+
+ Added endianess checks to ReadFromFile() and WriteToFile()
+ functions in EasyBMP_BMP.h file, along with endianess conversions
+ where necessary.
+
+ Added endianess checks and conversions to GetBMFH() and GetBMIH()
+ functions in EasyBMP_VariousBMPutilities.h file.
+
+ Rewrote GetBitmapInfo() function to use GetBMFH() and GetBMIH()
+ functions instead. (In EasyBMP_VariousBMPutilities.h.) This
+ cuts down on the redundancy in the code.
+
+ Renamed GetBitmapInfo() to DisplayBitmapInfo() in the
+ EasyBMP_VariousBMPutilities.h file.
+
+ With these changes, big-endian architectures should be supported,
+ including IBM PowerPC, Sun Sparc, Motorola 86k, etc., and
+ including Mac OSX.
+
+*--------------------------------------------------------------------*
+
+Version: 0.63
+ Date: 7-20-2005
+
+ Added IntPow(int,int) function to help compiling with std
+ namespace. Besides, integer operations are faster and more
+ accurate.
+
+ Moved Square(double), IntSquare(int), and IntPow(int,int) to
+ EasyBMP_DataStructures.h
+
+ Simplified and cleaned up code in
+ Create4bitColorTable( RGBApixel**).
+
+ Changed safety check in BMP.ReadFromFile(char*) to set size to
+ 1 x 1 if width or height is non-positive, rather than simply
+ negative.
+
+ Added bounds checking to BMP.operator()(int,int) to automatically
+ truncate requested pixel if out of bounds. Also added a warning
+ to cue the user in. :-)
+
+ Made error messages more consistent in format.
+
+ Simplified and cleaned up code in
+ Create4bitColorTable( RGBApixel**).
+
+ Added #include to EasyBMP.h, since EasyBMP uses
+ cout, etc.
+
+ Simplified and cleaned up code in
+ Create1bitColorTable( RGBApixel**).
+
+ Changed BMP.SetSize(int,int) to disallow non-positive widths and
+ heights, rather than simply negative widths and heights. Such
+ function calls are now ignored.
+
+*--------------------------------------------------------------------*
+
+Version: 0.64
+ Date: 8-2-2005
+
+ Changed "include " to "include " for
+ ANSI-C++ compliance, as well as for better compatibility with the
+ std namespace and VC++. (Thanks, Tommy Li!)
+
+ Added some #ifndef pragmas to each header so that it should be
+ fine to incluce EasyBMP.h in multiple files in larger projects.
+
+ Added "using namespace std" inside any function that used C++
+ math or I/O operations. I avoided putting "using namespace std"
+ anywhere with global scope for maximum compatibility with C++
+ software in the wild.
+
+ Added includes for and to EasyBMP.h
+
+ Removed unused temporary variables (TempWORD and TempDWORD) from
+ EasyBMP_BMP.h for cleaner compiling. If I see any more such
+ unused variables, I'll remove them, too.
+
+*--------------------------------------------------------------------*
+
+Version: 0.65
+ Date: 8-13-2005
+
+ Moved implementations of BMP::BMP(), BMP::~BMP(), and
+ BMP::operator()(int,int) outside of the class. This should help
+ for eventually moving everything into a separate cpp file.
+
+ Made RGBApixel** Pixels a private data member of the class
+ BMP.
+
+ Added function void BMP::SetColor(int,RGBApixel) to BMP class
+ to allow safe method of changing a color in the color table.
+
+ Added function RGBApixel BMP::GetColor(int) to BMP class
+ to allow safe method of retrieving a color in the color
+ table.
+
+ Cleaned up error messages in EasyBMP_BMP.h
+
+ Cleaned up error messages in EasyBMP_VariousBMPutilities.h
+
+*--------------------------------------------------------------------*
+
+Version: 0.66
+ Date: 8-18-2005
+
+ EasyBMP_StandardColorTables.h was removed from the library.
+
+ CreateStandardColorTable(RGBApixel**,int) was changed to
+ CreateStandardColorTable() and made a member function of BMP.
+ All other CreateStandardColorTable functions are now unnecessary
+ and have been removed.
+
+ CreateGreyscaleColorTable(RGBApixel**,int) was changed to
+ CreateStandardColorTable( BMP& ) and moved to
+ EasyBMP_VariousBMPutilities.h.
+
+ RGBApixel* Colors was made a private data member of the BMP
+ class.
+
+ CreateGreyscaleColorTable( BMP& ) was renamed to
+ CreateGrayscaleColorTable( BMP& ).
+
+*--------------------------------------------------------------------*
+
+Version: 0.67
+ Date: 9-14-2005
+
+ Made the EasyBMP custom math functions in
+ EasyBMP_DataStructures.h inline. (Square,IntSquare,IntPow).
+ This should make those function calls faster while improving
+ compatibility with compiling DLL's.
+
+ Separated the code from SafeFread() in EasyBMP_BMP.h to
+ improve compatibility with compiling DLL's.
+
+ Removed #define _WINGDI_H from EasyBMP_DataStructures.h to
+ improve compatibility with win32 applications. Instead,
+ there's an extra #ifndef _SELF_DEFINED_BMP_DATA_TYPES
+ conditional added.
+
+ _SELF_DEFINED_BMP_DATA_TYPES renamed to _SELF_DEFINED_WINGDI
+ in EasyBMP_DataStructures.h.
+
+ All bit-flipping functions (IsBigEndian, FlipWORD,
+ FlipDWORD) in EasyBMP_DataStructures.h were made inline
+ to improve execution speed and improve compatibility with
+ compiling DLL's.
+
+ All code was separated from function declarations in
+ EasyBMP_VariousBMPutilities.h to improve compatibility
+ with compiling DLL's.
+
+ Updated and cleaned up layout of EasyBMP_ChangeLog.txt.
+
+ Updated contact and support information in library files.
+
+ Corrected the LGPL license version.
+
+*--------------------------------------------------------------------*
+
+Version: 0.68
+ Date: 10-9-2005
+
+ Changed references to FILE to std::FILE in the SafeFread function
+ in EasyBMP_BMP.h to improve compatibility with Borland's compiler.
+
+ Removed a few assignments in EasyBMP_BMP.h that weren't used to
+ improve efficiency and reduce Borland warnings.
+
+ Changed calls like NotCorrupted = SafeFread() to
+ NotCorrupted &= SafeFread() in BMP::ReadFromFile() in EasyBMP_BMP.h
+ to improve robustness. Now, if the NotCorrupted bit is ever set
+ to false, it stays false, meaning that the function won't "forget"
+ that it encountered file corruption.
+
+*--------------------------------------------------------------------*
+
+Version: 0.69
+ Date: 10-19-2005
+
+ Changed BMP::WriteToFile( char* ) to BMP::WriteToFile(const char*)
+ in EasyBMP_BMP.h to respond to a feature request.
+
+ Changed BMP::ReadFromFile( char* ) to BMP::ReadToFile(const char*)
+ in EasyBMP_BMP.h to respond to a feature request.
+
+ Made BMP::ReadFromFile() and BMP::WriteToFile() in EasyBMP_BMP.h
+ return true/false to indicate success/failure in the operations.
+ These functions previously returned void.
+
+ Made BMP::SetSize() and BMP::SetBitDepth() in EasyBMP_BMP.h
+ return true/false to indicate success/failure in the operations.
+ These functions previously returned void.
+
+ Made BMP::SetColor() and BMP::CreateStandardColorTable() in
+ EasyBMP_BMP.h return true/false to indicate success/failure in the
+ operations. These functions previously returned void.
+
+ Made CreateGrayscaleColorTable() in EasyBMP_VariousBMPutilities.h
+ return true/false to indicate success/failure in the operations.
+ This function previously returned void.
+
+ Changed the char* argument GetBMFH( char* ), GetBMIH( char* ),
+ DisplayBitmapInfo( char* ), and GetBitmapColorDepth( char* ) in
+ EasyBMP_VariousBMPutilities.h to const char* for cleaner, safer
+ programming.
+
+*--------------------------------------------------------------------*
+
+Version: 0.70
+ Date: 10-19-2005
+
+ Found and fixed error in BMP::ReadFromFile() in the check for only
+ reading support bit depths.
+
+ Changed license from LGPL to BSD (revised/modified) to simplify
+ licensing issues and resolve any lingering licensing questions.
+
+ Fixed compiler error when using MSVC++.
+
+ Improved fix to allow compiling with Borland without breaking
+ Borland support.
+
+ Added a few lines to EasyBMP.h to make it easier to tailor code
+ to specific compilers. (For future use as needed.)
+
+ Added a few lines to EasyBMP_BMP.h (in BMP::ReadFromFile(),
+ BMP::WriteToFile(), and BMP::SetBitDepth()) to eventually add
+ support for 16-bit files.
+
+*--------------------------------------------------------------------*
+
+Version: 0.71
+ Date: 11-01-2005
+
+ Cleaned up comments in BMP::ReadFromFile() in EasyBMP_BMP.h
+
+ Added endian-safe read support for 16-bit files that are in the
+ standard 5-5-5 format (not specified in bit fields)
+
+ Added endian-safe read support for 16-bit files that use bit
+ fields, including 5-6-5 files.
+
+ Added endian-safe write support for 16-bit files. Uses the 5-6-5
+ encoding scheme to maximize the utility of the bits used.
+
+ Added a check for compression in BMP::ReadFromFile(). Because
+ file compression is beyond the scope of EasyBMP, such files are
+ not supported, and EasyBMP now properly detects these situations
+ and exits with an error.
+
+ Added a check for files that attempt to use bit fields but are not
+ 16-bit files to BMP::ReadFromFile(). Such files are not supported.
+
+ Added a check to BMP::ReadFromFile() for files that use unknown
+ values of bmih.biCompression, such as old OS2 bitmaps. Such files
+ are not supported.
+
+ Removed "switching endianness" messages from EasyBMP_BMP.h
+
+ Added support for indexed (1, 4, and 8-bit) files that don't
+ specify all the colors.
+
+ Added support for reading files that include extra meta data before
+ the pixels. This data is skipped.
+
+ Added enclosing #ifndef EasyBMP ... lines to EasyBMP.h as a
+ further safeguard when EasyBMP is included in multiple cpp
+ files.
+
+*--------------------------------------------------------------------*
+
+Version: 1.00
+ Date: 02-06-2006
+
+ First Production/Stable release.
+
+ Corrected typographical errors in the comment sections of all
+ files.
+
+ Updated copyright on all files.
+
+ Removed extraneous comment in BMIH::BMIH() function in
+ EasyBMP_DataStructures.h file.
+
+ Replaced instances of \n with the more modern endl in
+ EasyBMP_DataStructures.h, EasyBMP_BMP.h, and
+ EasyBMP_VariousBMPutilities.h.
+
+ Added placeholder MetaData1 and MetaData2 data members to the
+ BMP class for potential future use.
+
+ Removed extraneous comments from EasyBMP_BMP.h.
+
+ Removed warning messages for switching endianness from
+ EasyBMP_VariousBMPutilities.h.
+
+ Updated copyright in EasyBMP_ChangeLog.txt file.
+
+ Fixed formatting issues in EasyBMP_ChangeLog.txt file.
+
+ Added DefaultXpelsPerMeter and DefaultYpelsPerMeter in
+ EasyBMP.h. These will default to 96 dpi.
+
+ Changed BMP::WriteToFile() to use DefaultXpelsPerMeter and
+ DefaultYpelsPerMeter when writing the BMIH structure.
+
+ Added XpelsPerMeter and YpelsPerMeter data members to BMP
+ class so that horizontal and vertical resolution are handled
+ properly. Currently, upon reading a file, the stated resolutions
+ are preserved, and upon writing, if no resolutions are given,
+ the defaults (of 96 DPI) are used.
+
+ Added function void BMP::SetDPI(int,int) to set the horizontal
+ and vertical resolutions.
+
+ Removed some unnecessary code from GetBitmapColorDepth() in
+ EasyBMP_VariousBMPutilities.h.
+
+ Fixed a bug in RangedPixelToPixelCopyTransparent() and
+ RangedPixelToPixelCopy() in EasyBMP_VariousBMPutilities.h which
+ caused copies to be truncated by an extra row or column in
+ certain circumstances.
+
+ Fixed a bug in RangedPixelToPixelCopyTransparent() and
+ RangedPixelToPixelCopy() in EasyBMP_VariousBMPutilities.h which
+ checked the wrong variable (FromT instead of FromB) to see if
+ it was out of range.
+
+ Added extra checks to RangedPixelToPixelCopyTransparent() and
+ RangedPixelToPixelCopy() in EasyBMP_VariousBMPutilities.h to
+ prevent attempted access of out-of-range pixels.
+
+*--------------------------------------------------------------------*
+
+Version: 1.01
+ Date: 03-31-2006
+
+ Made only the short functions Square, IntSquare, IsBigEndian,
+ FlipWORD, and FlipDWORD inline functions in
+ EasyBMP_DataStructures.h.
+
+ Moved all code (other than inline functions) to EasyBMP.cpp.
+
+ Changed DefaultXPelsPerMeter and DefaultYPelsPerMeter to #define
+ lines in EasyBMP.h to make the library compatible with
+ with the header-code split.
+
+ Removed memory hole in ~BMP() where "delete Colors;" was used
+ instead of "delete [] Colors;". Likewise with MetaData1 and
+ MetaData2.
+
+ Fixed memory leak in BMP::SetBitDepth() by changing to
+ delete [] Colors;
+
+ Removed potential memory leak in BMP::WriteToFile() in 24- and
+ 32-bit writing where szTemp wasn't delete at the end of a row.
+
+ Fixed bug where XPelsPerMeter and YPelsPerMeter weren't
+ properly initialized in the BMP::BMP() constructor, leading
+ to strange horizontal and vertical resolutions.
+
+ Fixed memory leak in BMP::ReadFromFile() where TempSkipBYTE
+ wasn't deleted.
+
+ Fixed memory leak in BMP::ReadFromFile() where szTemp wasn't
+ deleted.
+
+ Added BMP::TellVerticalDPI() and BMP::TellHorizontalDPI()
+ functions to give this information. If those values have
+ not yet been set, then they are first set to the EasyBMP
+ defaults of 96 dpi.
+
+ Set uninitialized RGBApixel values to white (255,255,255,0)
+ in a few functions for the BMP class.
+
+ Added a sample cpp application and makefile.
+
+*--------------------------------------------------------------------*
+
+Version: 1.02
+ Date: 05-29-2006
+
+ Inserted a line into EasyBMP.h to suppress the Visual Studio
+ warnings. We'll keep using the C++ standard fopen for now
+ until fopen_s becomes a real standard.
+
+ Moved the code sample and makefile to a subdirectory, so that
+ unzipping EasyBMP#_##.zip into a project directory doesn't
+ overwrite any crucial makefiles.
+
+ Improved SafeFread() to check if the proper amount of data
+ could be read.
+
+ Dramatically cleaned up ReadFromFile() code for 1 and 4
+ bpp files.
+
+ Fixed a typo (draw.o) in the sample makefile.
+
+ Modified ReadFromFile() to use buffering when reading the pixel
+ data. This should substantially improve disk access performance.
+ Only 16 bpp files are read in the old, slower way.
+
+ Changed DWORD from unsigned long to unsigned int. This should
+ fix the issue where 64-bit machines see DWORD as an 8-byte
+ data type, rather than 4 bytes. (Thank you to Bas Wegh!)
+
+ Renamed BYTE, WORD, and DWORD data types to ebmpBYTE, ebmpWORD,
+ and ebmpDWORD to eliminate the possibility of conflict with
+ windows applications, particularly with 64-bit windows, which
+ likely uses 8 byte DWORDS.
+
+ Modified WriteToFile() to use buffering when reading the pixel
+ data. This should substantially improve disk access performance.
+ Only 16 bpp files are read in the old, slower way.
+
+ Added new function, EasyBMPcheckDataSize(), to check that
+ the ebmpBYTE, ebmpWORD, and ebmpDWORD types have the correct
+ type.
+
+ Added some new macros of the EasyBMP version number for easier
+ version checking. New versions include _EasyBMP_Version_
+ (a double), _EasyBMP_Version_String_ (a char* version), and
+ _EasyBMP_Version_Integer_ (an integer version, e.g., 102).
+
+*--------------------------------------------------------------------*
+
+Version: 1.03
+ Date: 06-20-2006
+
+ Inserted a line into EasyBMP.h to suppress the Visual Studio
+
+ Added a check to BMP.SetColor() to ensure that the color table
+ is defined before attempting to set a color entry.
+
+ Added a check to BMP.GetColor() to ensure that the color table
+ is defined before attempting to retrieve a color entry.
+
+ Simplified the conditional in BMP.WriteToFile() from
+ if( BitDepth == 1 || BitDepth == 4 || ... ) to the simpler
+ if( BitDepth != 16 ).
+
+ Removed the old, unused code for writing 1- and 4-bit files
+ from BMP.WriteToFile().
+
+ Removed the line Colors = new RGBApixel [NumberOfColors]; in
+ BMP.ReadFromFile(). This operation is already covered by the
+ earlier SetBitDepth() call, and may contribute to a memory
+ leak. Furthermore, for files that had fewer than expected
+ number of colors (e.g., an 8-bit file with 236 colors), it
+ lead to memory access errors in BMP.GetColor() and BMP.SetColor().
+ (In fact, this is the main motivation for release 1.03.)
+
+ Added a warning when BMP.ReadFromFile() encounters an under-
+ specified color table, and code to pad the table with white
+ entries.
+
+ Added screen output on EasyBMP version and project website to
+ the code sample.
+
+*--------------------------------------------------------------------*
+
+Version: 1.04
+ Date: 07-22-2006
+
+ Removed the assignment to the integer i in IntPow() to eliminate a
+ Borland compiler warning.
+
+ Removed the assignment to the integer i in the Read##bitRow()
+ functions to eliminate Borland compiler warnings.
+
+ Removed the assignment to ZeroWORD in line 478 of EasyBMP.cpp in
+ BMP::WriteToFile() to eliminate Borland compiler warnings.
+
+ Removed the assignment to ZeroWORD in line 825 of EasyBMP.cpp in
+ BMP::ReadFromFile() to eliminate Borland compiler warnings.
+
+ The Borland warnings about conditions always being false are
+ incorrect. (Lines 1587, 1594, and 1601.) Likewise, the Borland
+ warnings about unreachable code (lines 1589, 1596, and 1603) are
+ incorrect. This code serves as a protection on unexpected hardware
+ where the data types may not be of the correct size, and helps to
+ future-proof EasyBMP. The first time this type of error was
+ encountered was on 64-bit CPUs, where the size of the DWORD was
+ larger than assumed when writing EasyBMP. Therefore, we will not
+ "correct" these "errors" detected by Borland. If they bother you,
+ compile with the -w-8008 and -w-8066 options.
+
+ Borland issues warnings about argc and argv being unused in the
+ sample project. These are silly warnings and will be ignored. If
+ this warning bothers you, compile with the -w-8057 option.
+
+ Modified the sample makefile so that EasyBMP.o depends upon
+ EasyBMP.cpp and EasyBMP*.h in the current working directory, rather
+ than the parent directory.
+
+ Added a global EasyBMPwarnings boolean variable, and functions
+ SetEasyBMPwarningsOn() and SetEasyBMPwarningsOff() to enable and
+ disable EasyBMP warnings and errors. Note that this will not
+ disable error checking or any other EasyBMP behavior, other than
+ cout output of the warning and error messages.
+
+ Added the function GetEasyBMPwarningState() to query the EasyBMP
+ warning state. (Either warnings are enabled or disabled.)
+
+ Removed old commented code (Write1bitRow()) from EasyBMP.cpp.
+
+ Replaced the 24-bit EasyBMPbackground.bmp image in the code sample
+ with a dithered 8-bit version to reduce the download size of the
+ core library.
+
+*--------------------------------------------------------------------*
+
+Version: 1.05
+ Date: 11-01-2006
+
+ Renamed BytesRead to ItemsRead in the SafeFread() function in
+ EasyBMP.cpp for greater clarity.
+
+ Added a copy constructor to the BMP class. However, note that
+ passing by value is not recommended practice. (Passing by refer-
+ ence is much faster, and consumes less memory.)
+
+ Added a new function:
+ bool Rescale( BMP& InputImage, char mode, int NewDimension );
+ to resize an image. The mode variables are as follows:
+ 'P': resizes the image to a new percentage of the old size,
+ e.g., 42%, 13%, etc.
+ example: Rescale( SomeImage, 'p', 42 );
+ 'W': resizes the image such that the new width is as specified.
+ example: Rescale( SomeImage, 'W', 100 );
+ 'H': resizes the image such that the new height is as specified.
+ example: Rescale( SomeImage, 'H', 100 );
+ 'F': resizes the image to fit in a square of specified size.
+ example: Rescale( SomeImage, 'F', 100 ); // fits in 100x100
+ // box
+ All rescaling is done with bilinear interpolation.
+
+*--------------------------------------------------------------------*
+
+Version: 1.06
+ Date: 12-01-2006
+
+ Added includes for and to EasyBMP.h. These are
+ used and should have been included all along. This should help
+ with Intel icc compiling.
+
+ Fixed the && bug in the copy constructor. (Thank you to user
+ fcnature!)
+
+ Added image scaling to the supplied code sample.
+
+ Added GetPixle() and SetPixel() functions for future use. These
+ will be added to enable more careful use of the const keyword.
+
+*--------------------------------------------------------------------*
\ No newline at end of file
diff --git a/src/EasyBMP_DataStructures.h b/src/EasyBMP_DataStructures.h
new file mode 100644
index 0000000..82b6179
--- /dev/null
+++ b/src/EasyBMP_DataStructures.h
@@ -0,0 +1,104 @@
+/*************************************************
+* *
+* EasyBMP Cross-Platform Windows Bitmap Library *
+* *
+* Author: Paul Macklin *
+* email: macklin01@users.sourceforge.net *
+* support: http://easybmp.sourceforge.net *
+* *
+* file: EasyBMP_DataStructures.h *
+* date added: 05-02-2005 *
+* date modified: 12-01-2006 *
+* version: 1.06 *
+* *
+* License: BSD (revised/modified) *
+* Copyright: 2005-6 by the EasyBMP Project *
+* *
+* description: Defines basic data structures for *
+* the BMP class *
+* *
+*************************************************/
+
+#ifndef _EasyBMP_Custom_Math_Functions_
+#define _EasyBMP_Custom_Math_Functions_
+inline double Square( double number )
+{ return number*number; }
+
+inline int IntSquare( int number )
+{ return number*number; }
+#endif
+
+int IntPow( int base, int exponent );
+
+#ifndef _EasyBMP_Defined_WINGDI
+#define _EasyBMP_Defined_WINGDI
+ typedef unsigned char ebmpBYTE;
+ typedef unsigned short ebmpWORD;
+ typedef unsigned int ebmpDWORD;
+#endif
+
+#ifndef _EasyBMP_DataStructures_h_
+#define _EasyBMP_DataStructures_h_
+
+inline bool IsBigEndian()
+{
+ short word = 0x0001;
+ if((*(char *)& word) != 0x01 )
+ { return true; }
+ return false;
+}
+
+inline ebmpWORD FlipWORD( ebmpWORD in )
+{ return ( (in >> 8) | (in << 8) ); }
+
+inline ebmpDWORD FlipDWORD( ebmpDWORD in )
+{
+ return ( ((in&0xFF000000)>>24) | ((in&0x000000FF)<<24) |
+ ((in&0x00FF0000)>>8 ) | ((in&0x0000FF00)<<8 ) );
+}
+
+// it's easier to use a struct than a class
+// because we can read/write all four of the bytes
+// at once (as we can count on them being continuous
+// in memory
+
+typedef struct RGBApixel {
+ ebmpBYTE Blue;
+ ebmpBYTE Green;
+ ebmpBYTE Red;
+ ebmpBYTE Alpha;
+} RGBApixel;
+
+class BMFH{
+public:
+ ebmpWORD bfType;
+ ebmpDWORD bfSize;
+ ebmpWORD bfReserved1;
+ ebmpWORD bfReserved2;
+ ebmpDWORD bfOffBits;
+
+ BMFH();
+ void display( void );
+ void SwitchEndianess( void );
+};
+
+class BMIH{
+public:
+ ebmpDWORD biSize;
+ ebmpDWORD biWidth;
+ ebmpDWORD biHeight;
+ ebmpWORD biPlanes;
+ ebmpWORD biBitCount;
+ ebmpDWORD biCompression;
+ ebmpDWORD biSizeImage;
+ ebmpDWORD biXPelsPerMeter;
+ ebmpDWORD biYPelsPerMeter;
+ ebmpDWORD biClrUsed;
+ ebmpDWORD biClrImportant;
+
+ BMIH();
+ void display( void );
+ void SwitchEndianess( void );
+};
+
+#endif
diff --git a/src/EasyBMP_VariousBMPutilities.h b/src/EasyBMP_VariousBMPutilities.h
new file mode 100644
index 0000000..349dda6
--- /dev/null
+++ b/src/EasyBMP_VariousBMPutilities.h
@@ -0,0 +1,43 @@
+/*************************************************
+* *
+* EasyBMP Cross-Platform Windows Bitmap Library *
+* *
+* Author: Paul Macklin *
+* email: macklin01@users.sourceforge.net *
+* support: http://easybmp.sourceforge.net *
+* *
+* file: EasyBMP_VariousBMPutilities.h *
+* date added: 05-02-2005 *
+* date modified: 12-01-2006 *
+* version: 1.06 *
+* *
+* License: BSD (revised/modified) *
+* Copyright: 2005-6 by the EasyBMP Project *
+* *
+* description: Various utilities. *
+* *
+*************************************************/
+
+#ifndef _EasyBMP_VariousBMPutilities_h_
+#define _EasyBMP_VariousBMPutilities_h_
+
+BMFH GetBMFH( const char* szFileNameIn );
+BMIH GetBMIH( const char* szFileNameIn );
+void DisplayBitmapInfo( const char* szFileNameIn );
+int GetBitmapColorDepth( const char* szFileNameIn );
+void PixelToPixelCopy( BMP& From, int FromX, int FromY,
+ BMP& To, int ToX, int ToY);
+void PixelToPixelCopyTransparent( BMP& From, int FromX, int FromY,
+ BMP& To, int ToX, int ToY,
+ RGBApixel& Transparent );
+void RangedPixelToPixelCopy( BMP& From, int FromL , int FromR, int FromB, int FromT,
+ BMP& To, int ToX, int ToY );
+void RangedPixelToPixelCopyTransparent(
+ BMP& From, int FromL , int FromR, int FromB, int FromT,
+ BMP& To, int ToX, int ToY ,
+ RGBApixel& Transparent );
+bool CreateGrayscaleColorTable( BMP& InputImage );
+
+bool Rescale( BMP& InputImage , char mode, int NewDimension );
+
+#endif
diff --git a/src/gourd.obj b/src/gourd.obj
new file mode 100644
index 0000000..8f87773
--- /dev/null
+++ b/src/gourd.obj
@@ -0,0 +1,979 @@
+v -0.23876920554499864 1.3103797270601687 0.13001260700009193
+v -0.27582915374543276 1.2582563331865875 0.12364597630502337
+v -0.2674888336016338 1.3474373225751202 0.15912747459742976
+v -0.3128662756980407 1.222713216834852 0.14623565543301947
+v -0.3018967864385568 1.3832552573955716 0.1992584345763206
+v -0.3291084911674431 1.4015778151496097 0.23515159787549716
+v -0.3393653203892503 1.1606446817887044 0.25033862660881895
+v -0.32933702685159627 1.3872894114706185 0.30297184764306634
+v -0.34413945029647036 1.1847846590886826 0.3161902839586921
+v -0.32731404147036136 1.3472171185436952 0.33599708012099205
+v -0.31993727304296354 1.2010232341929186 0.3533614819463716
+v -0.30726711945847285 1.2956437760677335 0.3643485926629952
+v -0.2877856463729185 1.2493470906219926 0.38230872912669633
+v -0.21034318989786122 1.3531672444828033 0.1537169917653439
+v -0.21145627080982005 1.3818523867813413 0.35175494063536605
+v -0.2338628137428242 1.3442372246769223 0.37948021085512573
+v -0.25614030179208813 1.2952633550210815 0.3911502328871025
+v -0.596105380500693 -0.6768462432797441 -0.9120215121805894
+v -0.10001338605742703 -0.9910441617396678 -0.7028175040329147
+v -0.16086384627984987 -1.127277664194341 -0.7434844726798386
+v -0.008083895898474806 -1.0921252683249256 -0.5243409146431066
+v -0.07976516143635025 -1.276866970105867 -0.5252506365091272
+v -0.020060506382965703 -1.2334385749192633 -0.301325040448603
+v -0.07990779791476262 -1.3509036976740292 -0.341070036161337
+v -0.10169053410627815 -1.2068870189299477 -0.04876722079973187
+v -0.1519817903091755 -1.365510665871866 -0.15692439889429793
+v -0.2601279041091756 -1.1885795093023326 0.10988970110975217
+v -0.31729579292888604 -1.321268264156361 0.059441628673455316
+v -0.848568870055825 -0.9383248633714683 0.23982837834317694
+v -0.2841115740583825 -1.2078773490579697 -0.8036506322954367
+v -0.22231836409372388 -1.3705711792653117 -0.6258835168322516
+v -0.19808583052036852 -1.4522159317791117 -0.3886956275749503
+v -0.31271194883273773 -1.4812229673897357 -0.1662599441498861
+v -0.4468655428183257 -1.4081208865117936 0.030309816870830293
+v -0.3988207279452833 -0.9783603900495396 -0.8833077012801736
+v -0.4261847167822431 -1.2538563022802836 -0.832657802483938
+v -0.38091428944031497 -1.4323612424714172 -0.6713096485927353
+v -0.34392672880812863 -1.5296402016703727 -0.4359666117195356
+v -0.47121275738702567 -1.5427481346322585 -0.212699971365956
+v -0.5840335467653923 -1.4499471972736035 -0.01688965681846319
+v -0.5965324664537639 -1.2310376567603918 0.15439728723762638
+v -0.603970626930515 -0.9730496272867387 -0.9442929048887062
+v -0.6584407430024051 -1.2331761333320834 -0.8746205623410716
+v -0.709409821847784 -1.4659429722203778 -0.7154020228441985
+v -0.6644813362834862 -1.5771682475681057 -0.51042113309235
+v -0.7894059105187994 -1.5638233094298595 -0.3088200440614581
+v -0.8162833445262949 -1.4310813233699453 -0.05752847701987319
+v -0.8117676576018125 -1.234439602574674 0.13414076435148883
+v -0.25834762010828993 -0.6951673252373165 -0.7923673206368221
+v -0.06248973045542924 -0.7665910821077954 -0.6540399700991502
+v 0.07611239708492351 -0.9156476836861951 -0.20536770047473785
+v -0.031081271477573048 -0.8994758181564453 0.04312489218518984
+v -0.2509457867081838 -0.9602191023294494 0.1949888000417654
+v -0.5314775775236663 -0.9170871483914047 0.27604867586122167
+v -0.698201286366758 -0.8975001213210745 -0.9599982435061234
+v -0.8293665978692493 -1.11509528462743 -0.9146490325020323
+v -0.9619048200796854 -1.343162090335404 -0.7880316555337348
+v -1.0472124286277014 -1.4730438773829664 -0.5605464015223269
+v -1.060765551847539 -1.4641134058825243 -0.2855663528073091
+v -1.0004246660561544 -1.3283874042894974 -0.03361413042981279
+v -0.9104906458141931 -1.1662066485845088 0.1470252534214227
+v -0.9586855869711515 -0.6710831333901544 -0.9367557030770179
+v -1.2445793305522892 -0.817542042890274 -0.8973407152418248
+v -1.2659871743768685 -0.6801247466768301 -0.8490486738261083
+v -1.4417357951365137 -0.892844113645334 -0.7517043712681761
+v -1.476802737695221 -0.7360019859679737 -0.6685856347091148
+v -1.5639841715332439 -0.9191614582919794 -0.5287575689432107
+v -1.5681656901876435 -0.7927271011174322 -0.4991311239237613
+v -1.5326259636093063 -1.0039824068887115 -0.28969248502613
+v -1.5489494701267934 -0.8242411750516833 -0.3018251138498018
+v -1.407890071989428 -1.018040171212245 -0.06605615148067337
+v -1.4223317944946532 -0.8723090313725681 -0.05316658252587531
+v -1.1652203387672957 -0.9337169196632413 0.1334184078263284
+v -1.1255438855619244 -0.45287889159761474 -0.7915489789158711
+v -1.3279205175383988 -0.42378587112767446 -0.6057450114372587
+v -1.453237253290355 -0.5055549645946847 -0.40734951169873873
+v -1.4148957872068073 -0.5304237767693063 -0.16308494761654216
+v -1.289436358384456 -0.6584542134820716 0.049305709577394455
+v -0.8874951265560681 -0.8248028576559522 -0.9565338521560323
+v -1.1657720297488638 -0.9232322177159897 -0.9113461515493453
+v -1.3737606650637482 -1.05988953884744 -0.7658589961519274
+v -1.5010039128600727 -1.0931510893936602 -0.5582767873636508
+v -1.4601034487302784 -1.1654443984569987 -0.3270400944072667
+v -1.3300721765655639 -1.126145329626444 -0.07288783559541256
+v -1.094027683771837 -1.084366608811451 0.10682087754556222
+v -1.0875937948798378 -1.0722876078076398 -0.8950930575225976
+v -1.2487802398372811 -1.199621201720314 -0.770810356893762
+v -1.3871797127872325 -1.2453352818416719 -0.5725538075637561
+v -1.3336683013633743 -1.303381182432141 -0.33953009810380114
+v -1.2386603306792545 -1.2586899629846382 -0.12341526133552151
+v -0.847389582770811 -0.478492980249323 -0.871016832402294
+v -1.0629050406633582 -0.33601400374427853 -0.7258100434517166
+v -1.2190735055805353 -0.29624060404360103 -0.5635619964306117
+v -1.3517105212108151 -0.3476974272688013 -0.3492936473235696
+v -1.3091051787212946 -0.40781276676789235 -0.10339425594585269
+v -1.2168089660357586 -0.5274920225978963 0.06741335477163105
+v -1.0511503152740245 -0.7416804143259951 0.2049141271815988
+v -0.6820493320101108 -0.4073454070130155 -0.8362462682349809
+v -0.8480346738093036 -0.22394454471293013 -0.6859356370420204
+v -0.9382037144425833 -0.08920601913082365 -0.4560668167387506
+v -1.0896315173661946 -0.13537742027486113 -0.24763788309746104
+v -1.0177578267683933 -0.19112387317463178 7.070529650376467E-4
+v -1.0348062333853838 -0.41038161623017794 0.1399093358829532
+v -0.9396488481908281 -0.6321302849485207 0.24387425328076773
+v -0.09560436290090499 1.339214093370152 0.1477579579447047
+v -0.15273510877349308 1.2957419873888067 0.10995645328754174
+v -0.062050527956707575 1.3692309912304754 0.1955267069140381
+v -1.521773942288455E-4 1.3554620235219368 0.3227203242573578
+v -0.10349110756088271 1.3137976974225336 0.4178816230110331
+v -0.15085642703030017 1.2694959538207045 0.43225990586812474
+v -0.21433174824491863 1.2202115319934645 0.42359844208844455
+v -0.21917009134413754 1.249857125588988 0.0995416059368744
+v -0.28246419070242684 1.2050401515702542 0.11644643644430475
+v -0.3129756717999029 1.163166153030332 0.14503962345021287
+v -0.32664932338661334 1.1471685974256742 0.3296679490818033
+v -0.2751151389208091 1.178548147296377 0.38859847543695397
+v -0.07117824697642426 1.2833923335104869 0.10155506218543657
+v 0.01952628579214415 1.2268383174511577 0.08762970595474523
+v -0.0533728492267706 1.1780899339795514 0.041486476961526436
+v -0.12159853328026078 1.2160393526967515 0.06191305596390384
+v -0.03216112253813483 1.3372853305457484 0.16511543805230214
+v 0.0731556655610805 1.26540329490592 0.1618196085705
+v -0.018012120440415495 1.3646669050570877 0.22983374254345476
+v 0.10367094281488036 1.2843407275170273 0.25238198525389427
+v 0.13140177353855467 1.2478160316648583 0.32763802931035096
+v -0.056021811076326464 1.3299507664867958 0.39305267822379214
+v 0.07522175402077194 1.2507143399891454 0.3956619662984644
+v -0.08281234911568472 1.2703421796138938 0.4402240123229857
+v 0.01795293748424096 1.1977292385399962 0.4495759996401428
+v -0.140084567072329 1.1981313068931814 0.4549247925876616
+v -0.055730483438343095 1.134204503245634 0.4743453892047482
+v -0.195843423418774 1.1250804448063756 0.4395501060994016
+v -0.13648241697035543 1.0762988502857962 0.4642071929538253
+v -0.1320833582585817 1.118879626710536 0.03027101424435127
+v -0.17789451123739403 1.1419876741742214 0.052250123394135074
+v -0.20244412759751665 1.062628011979282 0.0508408807532532
+v -0.23210941728461448 1.0796495973528117 0.07190570714367979
+v -0.26030340316362355 1.0179148935053772 0.10527188614157675
+v -0.29525684897940946 0.9675080117623716 0.1792173306975986
+v -0.28826541284389207 0.9677050604055095 0.2798794723956473
+v -0.2632513574265279 0.9931303693008816 0.3514136070432927
+v -0.28646037093541493 1.0185581755171358 0.3282172719023405
+v -0.2086964110925687 1.0259454248881235 0.4189416705014296
+v -0.2467883757867712 1.0595447508107605 0.3933816015630798
+v 0.17872313693801953 1.025246834722123 0.04349401870518004
+v 0.06748632295477272 1.0328368970330073 -0.0012005056093327012
+v 0.2561423061057405 1.0136281055295011 0.10835507124081907
+v 0.300950261734067 0.9431608110206416 0.28643187767591677
+v 0.18936841832020435 0.9319869673270735 0.44817741477373196
+v 0.09325438236168647 0.9204810011470623 0.4786885904815903
+v -0.026875929876898914 0.9171992918687374 0.4788032161574475
+v -0.050991484084989845 1.030898509265369 -0.008079474184983611
+v -0.16209114356370188 1.0159498925407309 0.024676756222088137
+v -0.229159459612385 0.9354422138631637 0.36859933084343927
+v -0.1391731970008425 0.9234519262530181 0.44119603386135564
+v 0.17861510065239114 0.9029942588889944 -0.005193118717157615
+v 0.20885071989207965 0.5755957905566027 -0.07667087792795438
+v 0.07966628487324764 0.8444141445957631 -0.05571698567292751
+v 0.10836530729913466 0.5997704001367645 -0.10999773301638337
+v 0.267798986856911 0.9395661466021183 0.07867890346497927
+v 0.2937291293341934 0.962459454773473 0.17552656684668122
+v 0.3397881281649465 0.4568368997780585 0.1767550046536417
+v 0.25272039926472245 0.9123418286838364 0.3839045766826548
+v 0.1960131812497361 0.8515960540706153 0.4438518114132365
+v 0.08617665401052353 0.7897714182096348 0.4648540365288201
+v 0.11695626676834338 0.46301165363215435 0.39082411170929
+v -0.018812474436488397 0.7237549378258146 0.44527487016595946
+v 0.009515024453930019 0.47867577559453145 0.3928715296525722
+v -0.012905137512460198 0.6217365064396034 -0.10774026933953917
+v -0.020542415672755155 0.7766143499424125 -0.07025333721081264
+v -0.11420333688264363 0.6301372081172665 -0.072320114787061
+v -0.12027343756275882 0.7162053532704167 -0.04479408000218762
+v -0.19469603733957327 0.6638012353563264 0.0019509816624666348
+v -0.24865269735816442 0.5979937949414752 0.09451062907589113
+v -0.23773508294912143 0.6112776440191625 0.21892825264540403
+v -0.18634370550533172 0.5413926271476547 0.2949493622643064
+v -0.1895051304036615 0.6312093666452024 0.3081881168248471
+v -0.10427297470446559 0.5097569398714669 0.35705778790619097
+v -0.11098916529176285 0.6655311694160618 0.39159830628358067
+v 0.1876342069811111 0.5033061437989215 -0.10483268880194742
+v 0.09809358624263935 0.17576055344835947 -0.22660111284413842
+v 9.980600042878598E-4 0.2776940657404102 -0.23833721224985494
+v 0.06202604473373216 0.5143367290533036 -0.14430238389579206
+v 0.2601771625596767 0.5132495618693441 -0.0419826119632792
+v 0.2267034323045877 -0.07934967297543495 0.02556359016082569
+v 0.18248639872254088 0.4180673661872462 0.35325990274594876
+v 0.09338059505857496 0.38783248945634874 0.3746744992397327
+v -0.005211606777756715 0.04917999260227923 0.2990491470058861
+v -0.03849106672839849 0.39120902770935095 0.367016939925659
+v -0.10848056289935136 0.1435512953626317 0.31865722665290575
+v -0.0932417226328324 0.3598705333665368 -0.2074025730478351
+v -0.06719701000163651 0.5066450508624447 -0.1397429150410627
+v -0.1804473794799147 0.41746664230742225 -0.1415871127280521
+v -0.16404691441086264 0.5008696549815044 -0.09943713866384862
+v -0.24991610243976733 0.46142536820852903 -0.04084433768174924
+v -0.28761411639861034 0.44737779602280475 0.051054453447751835
+v -0.28675863948263974 0.416295470137208 0.14635962931629456
+v -0.254500590852495 0.32669003381612766 0.23531552878884276
+v -0.231372001824006 0.41834268077179726 0.24280756749780402
+v -0.19207899925896893 0.23874733244600602 0.29550374929060313
+v -0.15628752178315608 0.3974920744082751 0.31353339526127444
+v -0.018720751877417497 0.062427271517513046 -0.3423575873860938
+v -0.05158961781091372 -0.2563933968214236 -0.49800580550559054
+v -0.20088495830404476 -0.13126411196599852 -0.5453441726394352
+v -0.18340769457458989 0.09825169285259472 -0.3943097123183823
+v 0.12115365957039037 0.014420223788874923 -0.24037782041932212
+v 0.056559451013174264 -0.36062459822625886 -0.40692266576968744
+v 0.12212578753997294 -0.6050598321387264 -0.12437295900412774
+v 0.025258295975196174 -0.10322945063945176 0.24768994532951785
+v -0.06640266552744624 -0.5010310085837314 0.19723160290838115
+v -0.145384934862913 -0.09303562620026448 0.3026990669448157
+v -0.2080530513736607 -0.4402766255051616 0.27854398626511434
+v -0.3201688747286834 -0.069472750700044 0.3021999728028007
+v -0.3764229875624985 -0.3372841738879878 0.3196175137825808
+v -0.37103840912195013 -0.018343714126245417 -0.5181695682676257
+v -0.3624876398424141 0.11792333476126983 -0.3885156944272048
+v -0.5369907859125455 0.05987335312325521 -0.420070558870981
+v -0.49722492713673616 0.13410703737954682 -0.3286188877172944
+v -0.6294317441594179 0.11556113739693963 -0.26391312063853545
+v -0.74173498336992 0.08053780182128528 -0.12522747001774567
+v -0.6901485280221654 0.042138462724677694 0.04298647182897286
+v -0.6583061345706847 -0.08271666421665431 0.17909368084528765
+v -0.5930778951386746 0.01940614282887867 0.15083850228675535
+v -0.5336280893809849 -0.20845754472929892 0.2850729045500069
+v -0.4863419744110133 -0.033084460741767234 0.24177778209818324
+v -0.16421418750489497 -0.3009066302678531 -0.613469962903272
+v -0.19121648139938338 -0.49736348828867183 -0.7024015487555098
+v -0.3804429066794447 -0.3517580490090136 -0.7461890303461363
+v -0.36911610223035285 -0.19924428750907905 -0.6606716953472738
+v 0.00764144937164241 -0.41591976904898176 -0.48949143091766145
+v -0.00703132676232705 -0.639152352439578 -0.5705632382430396
+v 0.11082364953963271 -0.46984782407830805 -0.3169906454178008
+v 0.07681783005303255 -0.7589168860036708 -0.4146953894835867
+v 0.023932473668473467 -0.5670301759646578 0.09632170271937375
+v -0.139698107729481 -0.5845442431079642 0.224328828951515
+v -0.12909344686888494 -0.82452130403786 0.17197986976368612
+v -0.35629678802794823 -0.5164555824199508 0.3146739763415395
+v -0.3207143923909673 -0.7555247084101276 0.27546974969494803
+v -0.5751666842740498 -0.42980212239695187 0.3247894461401142
+v -0.5608819388605969 -0.6300128226097699 0.3256888806317336
+v -0.6119993988065029 -0.2039436789589 -0.7058985888062624
+v -0.5690995198999165 -0.12062867425850417 -0.6367858256444157
+v -0.7745480379862542 -0.08299685419757988 -0.5533065828441973
+v -0.9059965161698623 -0.27579432003345206 0.1565710587409764
+v -0.7733491979650087 -0.48524750438686576 0.2900036375382926
+v -0.7448096323038795 -0.3254807309936029 0.26563969024312495
+v -0.1292811121767781 0.24541226127424362 -0.27813642684707096
+v -0.012722182411993922 0.17872354694047157 -0.2856442543998048
+v -0.2428141364892664 0.29395739556129535 -0.22349063319337525
+v -0.3411247577494312 0.31901208295467953 -0.12724776419557868
+v -0.3992091957752286 0.31073037338569687 -0.0036776738917693227
+v -0.39029961638808786 0.25895363915674446 0.12264318016053902
+v -0.3311242920511251 0.18560722865550605 0.22621753264795585
+v -0.24091339429176825 0.1083564943253534 0.2905482642422535
+v -0.12951005521262673 0.03536832888417705 0.30925230551932015
+v 0.09116388438362256 0.10905454185092361 -0.24903014897171805
+v 0.16893286792711723 0.09534659783694158 -0.17487528542655814
+v 0.08621995597156243 -0.006153152546389401 0.24651124997927
+v -0.013839682800429801 -0.01976756022956282 0.2857709647911246
+v -0.14224466965791016 1.3831523327333446 0.30144101500423315
+v -0.13605604833821014 1.393857595270661 0.2766140427570333
+v -0.13002715466520928 1.3934280277792825 0.2520685743777088
+v -0.12423922657418207 1.388769918728889 0.23066988277566788
+v -0.19518443866089988 1.3928509577654855 0.20378772481501994
+v -0.24148774025737788 1.3945399882729024 0.23016096348757714
+v -0.25791021093344335 1.4037411161856639 0.24787129664381718
+v -0.2620654518979459 1.3957442061286076 0.284527879789462
+v -0.20139872286954744 1.389485467634939 0.32349211851139514
+v -0.1488091510125688 1.3781207203872883 0.3200274224926117
+v -0.13158193764344558 1.4250679750579258 0.2807314628260412
+v -0.11595643515633988 1.4245682404098425 0.22163997660384924
+v -0.20627424326148192 1.4124911965266467 0.18741680061016427
+v -0.26445442393150115 1.400769211913228 0.22122294388061534
+v -0.2872685557740087 1.406883382542881 0.2444293361608223
+v -0.2899360821624794 1.3935839799698049 0.29084828102857163
+v -0.21178559249014803 1.3994915112001476 0.34039022323541024
+v -0.1429001429580068 1.3993976870289333 0.3353182110462305
+v -0.2857648326576529 1.5187468359348737 0.3082338172397895
+v -0.27727616014547757 1.530338168645061 0.2625549569640586
+v -0.3334604957630521 1.4880341091190048 0.23308840213734724
+v -0.36604087340725666 1.453055527215242 0.25713264595649266
+v -0.3828999421792846 1.4454714177478138 0.2753297576919234
+v -0.37751818239371726 1.4313472154601539 0.31006947817311087
+v -0.32631523474701046 1.4631317857783432 0.35061576401157374
+v -0.2807143588260308 1.4921408310497963 0.34796225284311
+v -0.359718447897886 1.5667423492396997 0.3249332982344497
+v -0.35604269069748223 1.5843518466712045 0.27844553809784006
+v -0.3980451782163092 1.5262919573931168 0.24430381106553892
+v -0.4181656377402749 1.4792909565111614 0.2664080870596363
+v -0.43194785784379036 1.4648905070555227 0.2846242013341748
+v -0.42130540631457 1.4501970581589543 0.31964088446057193
+v -0.3805277869148768 1.4954324349453687 0.3644531272029499
+v -0.34517821394105 1.5392865146237846 0.36417365388479916
+v -0.525253166509216 1.5797756350730938 0.3618339573500447
+v -0.5427781715907363 1.600035553232815 0.32113583567835097
+v -0.5227646170883478 1.5418236240694803 0.27390553690397157
+v -0.4933105257778895 1.4972331194307962 0.2843137977922944
+v -0.48710328833367594 1.4754098821989285 0.2977991260001166
+v -0.46547571828721857 1.4702527709605107 0.3292892793473014
+v -0.474604834039762 1.518936744884534 0.3841417968234773
+v -0.4907531253963674 1.570392934863122 0.3952265040148293
+v -0.6190130970388793 1.5696558595459142 0.38003232814495125
+v -0.6355019539055907 1.585899126949611 0.3462181836390502
+v -0.6139504237029327 1.5398059391590697 0.3053658122107581
+v -0.5784210799208646 1.4868135510777596 0.32414429004118506
+v -0.5598034658588011 1.483728452273698 0.350505735413888
+v -0.5714200313571158 1.5226275895992984 0.3975745784787094
+v -0.5892615137516267 1.5640904735931778 0.40790221218885614
+v -0.7207897200255293 1.5567789987446936 0.40116346301661054
+v -0.7290467383099924 1.5726640148199242 0.3702920060376821
+v -0.7270750137803762 1.525483825821082 0.33867446181335653
+v -0.71560668386606 1.4727027815509461 0.3595899705139178
+v -0.7013827394050692 1.4661328607881354 0.38307846161479897
+v -0.6976434083183529 1.504754391368148 0.4208247199303316
+v -0.6983812574358621 1.5446905536547915 0.42637673695906997
+v -0.9070526524958897 1.4960808856355494 0.4172580276830761
+v -0.8863039803791803 1.474513559264521 0.3901551190206042
+v -0.8554404727488869 1.4489886081267185 0.39960983011290785
+v -0.8436098200111913 1.4494922096871927 0.415802278250204
+v -0.875124048994981 1.4891447909953186 0.4545401079578815
+v -0.9884730850864034 1.4369108601544263 0.4354713488045925
+v -1.0097509656761623 1.402303016901423 0.41539549299271056
+v -1.0261663143967716 1.3653907886614334 0.43778258638601936
+v -1.0193881127383304 1.3571557442500386 0.4576102108491951
+v -0.9801045292318034 1.4108781558731749 0.4839256718868889
+v -1.0646015617123321 1.3754696203441494 0.4676547749135673
+f 1 2 3
+f 4 5 3
+f 4 3 2
+f 9 10 7
+f 10 8 7
+f 11 12 9
+f 12 10 9
+f 12 11 13
+f 1 3 14
+f 10 16 15
+f 10 15 8
+f 12 17 16
+f 12 16 10
+f 17 12 13
+f 21 22 20
+f 21 20 19
+f 23 24 22
+f 23 22 21
+f 25 26 23
+f 26 24 23
+f 27 28 25
+f 28 26 25
+f 22 31 20
+f 31 30 20
+f 24 32 22
+f 32 31 22
+f 26 33 32
+f 26 32 24
+f 28 34 33
+f 28 33 26
+f 31 37 30
+f 37 36 30
+f 32 38 31
+f 38 37 31
+f 33 39 38
+f 33 38 32
+f 34 40 39
+f 34 39 33
+f 18 35 42
+f 36 43 35
+f 43 42 35
+f 37 44 36
+f 44 43 36
+f 38 45 37
+f 45 44 37
+f 39 46 45
+f 39 45 38
+f 40 47 46
+f 40 46 39
+f 41 48 47
+f 41 47 40
+f 48 41 29
+f 51 23 21
+f 52 25 51
+f 25 23 51
+f 53 27 52
+f 27 25 52
+f 18 42 55
+f 43 56 42
+f 56 55 42
+f 44 57 43
+f 57 56 43
+f 45 58 44
+f 58 57 44
+f 46 59 58
+f 46 58 45
+f 47 60 59
+f 47 59 46
+f 48 61 60
+f 48 60 47
+f 61 48 29
+f 63 64 62
+f 65 66 64
+f 65 64 63
+f 67 68 66
+f 67 66 65
+f 69 70 67
+f 70 68 67
+f 71 72 69
+f 72 70 69
+f 73 72 71
+f 64 74 62
+f 66 75 64
+f 75 74 64
+f 68 76 66
+f 76 75 66
+f 70 77 76
+f 70 76 68
+f 72 78 77
+f 72 77 70
+f 73 78 72
+f 81 65 63
+f 81 63 80
+f 82 67 65
+f 82 65 81
+f 83 69 82
+f 69 67 82
+f 84 71 83
+f 71 69 83
+f 86 80 79
+f 87 81 80
+f 87 80 86
+f 88 82 81
+f 88 81 87
+f 89 83 88
+f 83 82 88
+f 90 84 89
+f 84 83 89
+f 85 84 90
+f 57 87 86
+f 57 86 56
+f 58 88 87
+f 58 87 57
+f 59 89 58
+f 89 88 58
+f 60 90 59
+f 90 89 59
+f 75 93 74
+f 93 92 74
+f 76 94 75
+f 94 93 75
+f 77 95 94
+f 77 94 76
+f 78 96 95
+f 78 95 77
+f 18 91 98
+f 92 99 91
+f 99 98 91
+f 93 100 92
+f 100 99 92
+f 94 101 93
+f 101 100 93
+f 95 102 101
+f 95 101 94
+f 96 103 102
+f 96 102 95
+f 97 104 103
+f 97 103 96
+f 104 97 29
+f 14 105 106
+f 14 106 1
+f 16 109 15
+f 17 110 16
+f 110 109 16
+f 13 111 17
+f 111 110 17
+f 112 2 1
+f 112 1 106
+f 113 4 2
+f 113 2 112
+f 114 4 113
+f 116 11 115
+f 11 9 115
+f 111 13 116
+f 13 11 116
+f 117 118 119
+f 117 119 120
+f 121 122 118
+f 121 118 117
+f 123 124 122
+f 123 122 121
+f 108 125 124
+f 108 124 123
+f 126 127 108
+f 127 125 108
+f 128 129 126
+f 129 127 126
+f 130 131 128
+f 131 129 128
+f 132 133 130
+f 133 131 130
+f 134 135 120
+f 134 120 119
+f 136 137 135
+f 136 135 134
+f 143 144 141
+f 144 142 141
+f 133 132 143
+f 132 144 143
+f 118 145 146
+f 118 146 119
+f 122 147 145
+f 122 145 118
+f 124 147 122
+f 129 149 127
+f 131 150 129
+f 150 149 129
+f 133 151 131
+f 151 150 131
+f 152 134 119
+f 152 119 146
+f 153 136 134
+f 153 134 152
+f 155 143 154
+f 143 141 154
+f 151 133 155
+f 133 143 155
+f 156 157 158
+f 157 159 158
+f 148 162 161
+f 163 162 148
+f 167 168 166
+f 167 166 165
+f 169 170 159
+f 170 158 159
+f 171 172 169
+f 172 170 169
+f 173 172 171
+f 176 177 175
+f 178 179 177
+f 178 177 176
+f 168 167 179
+f 168 179 178
+f 180 181 182
+f 180 182 183
+f 184 181 180
+f 187 188 186
+f 189 190 187
+f 190 188 187
+f 191 192 183
+f 191 183 182
+f 193 194 192
+f 193 192 191
+f 200 201 198
+f 201 199 198
+f 190 189 200
+f 189 201 200
+f 202 203 204
+f 202 204 205
+f 206 207 203
+f 206 203 202
+f 211 212 209
+f 212 210 209
+f 213 214 211
+f 214 212 211
+f 215 216 205
+f 215 205 204
+f 217 218 216
+f 217 216 215
+f 224 225 222
+f 225 223 222
+f 214 213 224
+f 213 225 224
+f 226 227 228
+f 226 228 229
+f 230 231 227
+f 230 227 226
+f 232 233 231
+f 232 231 230
+f 208 51 233
+f 208 233 232
+f 235 236 234
+f 237 238 235
+f 238 236 235
+f 239 240 237
+f 240 238 237
+f 241 242 229
+f 241 229 228
+f 240 239 245
+f 239 246 245
+f 242 215 229
+f 215 204 229
+f 243 217 242
+f 217 215 242
+f 246 224 222
+f 246 222 244
+f 239 214 224
+f 239 224 246
+f 203 226 204
+f 226 229 204
+f 207 230 203
+f 230 226 203
+f 232 230 207
+f 210 235 234
+f 212 237 235
+f 212 235 210
+f 214 239 237
+f 214 237 212
+f 216 247 205
+f 247 248 205
+f 218 249 216
+f 249 247 216
+f 219 250 218
+f 250 249 218
+f 220 251 219
+f 251 250 219
+f 221 252 251
+f 221 251 220
+f 223 253 252
+f 223 252 221
+f 225 254 253
+f 225 253 223
+f 213 255 254
+f 213 254 225
+f 256 202 248
+f 202 205 248
+f 257 206 256
+f 206 202 256
+f 259 211 209
+f 259 209 258
+f 255 213 211
+f 255 211 259
+f 247 191 182
+f 247 182 248
+f 249 193 191
+f 249 191 247
+f 250 193 249
+f 253 198 252
+f 254 200 253
+f 200 198 253
+f 255 190 254
+f 190 200 254
+f 181 256 248
+f 181 248 182
+f 190 255 188
+f 255 259 188
+f 192 169 183
+f 169 159 183
+f 194 171 192
+f 171 169 192
+f 196 174 195
+f 197 174 196
+f 201 178 176
+f 201 176 199
+f 189 168 178
+f 189 178 201
+f 157 180 159
+f 180 183 159
+f 184 180 157
+f 166 187 186
+f 168 189 187
+f 168 187 166
+f 170 152 158
+f 152 146 158
+f 172 153 170
+f 153 152 170
+f 174 139 173
+f 175 139 174
+f 179 155 154
+f 179 154 177
+f 167 151 155
+f 167 155 179
+f 145 156 146
+f 156 158 146
+f 147 160 145
+f 160 156 145
+f 161 160 147
+f 149 164 163
+f 150 165 164
+f 150 164 149
+f 151 167 165
+f 151 165 150
+f 135 112 120
+f 112 106 120
+f 137 113 135
+f 113 112 135
+f 138 114 137
+f 114 113 137
+f 144 116 115
+f 144 115 142
+f 132 111 116
+f 132 116 144
+f 105 117 106
+f 117 120 106
+f 107 121 105
+f 121 117 105
+f 123 121 107
+f 109 128 126
+f 110 130 128
+f 110 128 109
+f 111 132 130
+f 111 130 110
+f 29 240 245
+f 29 245 104
+f 241 98 99
+f 228 18 98
+f 228 98 241
+f 236 53 52
+f 238 54 53
+f 238 53 236
+f 240 29 54
+f 240 54 238
+f 50 231 233
+f 49 227 231
+f 49 231 50
+f 18 228 227
+f 18 227 49
+f 8 6 7
+f 7 6 5
+f 114 7 4
+f 7 114 138
+f 139 7 138
+f 140 7 139
+f 7 5 4
+f 18 49 35
+f 20 30 35
+f 30 36 35
+f 19 20 35
+f 50 19 35
+f 50 35 49
+f 41 34 28
+f 41 40 34
+f 41 54 29
+f 41 27 53
+f 41 28 27
+f 54 41 53
+f 18 79 62
+f 80 63 62
+f 80 62 79
+f 73 71 84
+f 73 85 29
+f 85 73 84
+f 18 55 79
+f 56 86 79
+f 56 79 55
+f 85 90 60
+f 85 61 29
+f 61 85 60
+f 18 62 91
+f 74 91 62
+f 74 92 91
+f 73 97 78
+f 97 73 29
+f 97 96 78
+f 115 9 7
+f 142 115 7
+f 142 7 140
+f 138 137 136
+f 141 142 140
+f 173 171 194
+f 174 173 195
+f 195 173 194
+f 197 175 174
+f 199 176 175
+f 199 175 197
+f 195 194 193
+f 250 195 193
+f 251 196 195
+f 251 195 250
+f 197 196 251
+f 198 199 197
+f 198 197 252
+f 252 197 251
+f 219 218 217
+f 219 217 243
+f 222 223 221
+f 244 222 221
+f 243 242 241
+f 241 99 243
+f 243 99 100
+f 245 246 244
+f 104 245 244
+f 104 244 103
+f 185 208 232
+f 234 208 185
+f 184 257 181
+f 257 256 181
+f 188 258 186
+f 188 259 258
+f 160 184 156
+f 184 157 156
+f 165 186 164
+f 165 166 186
+f 124 161 147
+f 125 161 124
+f 125 148 161
+f 127 163 125
+f 149 163 127
+f 163 148 125
+f 109 126 15
+f 234 52 208
+f 236 52 234
+f 52 51 208
+f 233 21 19
+f 51 21 233
+f 233 19 50
+f 138 136 153
+f 138 153 172
+f 139 138 173
+f 173 138 172
+f 175 140 139
+f 154 141 140
+f 177 154 140
+f 177 140 175
+f 100 219 243
+f 101 220 100
+f 220 219 100
+f 102 220 101
+f 103 244 102
+f 244 221 102
+f 102 221 220
+f 269 260 277
+f 270 277 260
+f 260 261 270
+f 261 262 270
+f 271 270 262
+f 262 263 271
+f 263 264 271
+f 272 271 264
+f 264 265 272
+f 273 272 265
+f 265 266 273
+f 274 273 266
+f 266 267 274
+f 275 274 267
+f 276 275 267
+f 267 268 276
+f 268 269 276
+f 277 276 269
+f 277 270 285
+f 278 285 270
+f 270 271 279
+f 279 278 270
+f 271 272 279
+f 280 279 272
+f 272 273 280
+f 281 280 273
+f 273 274 281
+f 282 281 274
+f 274 275 282
+f 283 282 275
+f 275 276 284
+f 284 283 275
+f 276 277 285
+f 285 284 276
+f 285 278 293
+f 286 293 278
+f 278 279 287
+f 287 286 278
+f 279 280 287
+f 288 287 280
+f 280 281 288
+f 289 288 281
+f 281 282 289
+f 290 289 282
+f 282 283 291
+f 291 290 282
+f 283 284 292
+f 292 291 283
+f 284 285 293
+f 293 292 284
+f 293 286 301
+f 294 301 286
+f 286 287 295
+f 295 294 286
+f 287 288 296
+f 296 295 287
+f 288 289 297
+f 297 296 288
+f 289 290 297
+f 298 297 290
+f 290 291 299
+f 299 298 290
+f 291 292 299
+f 300 299 292
+f 292 293 300
+f 301 300 293
+f 301 294 308
+f 302 308 294
+f 294 295 302
+f 303 302 295
+f 295 296 304
+f 304 303 295
+f 297 298 305
+f 298 299 306
+f 306 305 298
+f 299 300 306
+f 307 306 300
+f 300 301 307
+f 308 307 301
+f 308 302 315
+f 309 315 302
+f 302 303 309
+f 310 309 303
+f 303 304 311
+f 311 310 303
+f 305 306 313
+f 313 312 305
+f 306 307 313
+f 314 313 307
+f 307 308 314
+f 315 314 308
+f 315 309 320
+f 309 310 316
+f 310 311 317
+f 317 316 310
+f 312 313 319
+f 319 318 312
+f 313 314 319
+f 316 317 321
+f 322 321 317
+f 318 319 324
+f 324 323 318
+f 321 322 326
+f 323 324 326
+f 108 261 260
+f 260 126 108
+f 123 262 261
+f 261 108 123
+f 123 107 263
+f 262 123 263
+f 5 6 266
+f 265 5 266
+f 6 8 267
+f 266 6 267
+f 15 268 267
+f 267 8 15
+f 268 15 269
+f 126 260 269
+f 15 126 269
+f 185 206 257
+f 185 207 206
+f 185 232 207
+f 162 257 184
+f 162 184 160
+f 162 185 257
+f 161 162 160
+f 186 258 162
+f 164 186 162
+f 164 162 163
+f 258 185 162
+f 258 209 185
+f 210 234 185
+f 209 210 185
+f 5 264 3
+f 264 5 265
+f 264 14 3
+f 264 105 14
+f 264 107 105
+f 263 107 264
+f 296 297 305
+f 305 304 296
+f 304 305 312
+f 312 311 304
+f 316 320 309
+f 320 316 321
+f 311 312 317
+f 318 317 312
+f 320 319 314
+f 314 315 320
+f 321 325 320
+f 325 321 326
+f 323 322 317
+f 322 323 326
+f 317 318 323
+f 319 320 325
+f 325 324 319
+f 324 325 326
+#sl -0.2994557099206982 1.3807141495295285 0.1964113386009258 -0.302547238464886 1.373735680583609 0.19611437077175256 1
+#sl -0.302547238464886 1.373735680583609 0.19611437077175256 -0.3179173731405764 1.2880726694675424 0.22109901809873245 393
+#sl -0.3179173731405764 1.2880726694675424 0.22109901809873245 -0.33269387363748953 1.3173571057934743 0.24046038340901854 388
+#sl -0.33269387363748953 1.3173571057934743 0.24046038340901854 -0.33188433558688585 1.3297490374664154 0.28937428962385114 387
+#se 259 260 260 261 261 262 262 263 263 264 264 265 265 266 266 267 267 268 268 259
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 a09ec95..b132869 100755
--- a/src/interactions.h
+++ b/src/interactions.h
@@ -8,6 +8,16 @@
#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);
@@ -17,6 +27,73 @@ __host__ __device__ glm::vec3 calculateReflectionDirection(glm::vec3 normal, glm
__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) {
+
+ float n12 = incidentIOR / transmittedIOR;
+
+ float temp = 1.0f - n12 * n12 * (1.0f - pow(glm::dot(normal, incident), 2));
+
+ if(temp >= 0.0f){
+ return glm::normalize((-n12 * glm::dot(normal, incident) - sqrt(temp)) * normal + n12 * incident);
+ }
+ else
+ {
+ return calculateReflectionDirection(normal, incident);
+ }
+
+}
+
+//TODO (OPTIONAL): IMPLEMENT THIS FUNCTION
+__host__ __device__ glm::vec3 calculateReflectionDirection(glm::vec3 normal, glm::vec3 incident) {
+ //nothing fancy here
+ return glm::normalize(incident - 2.0f * normal * (glm::dot(incident, normal)));
+}
+
+//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;
+
+ if(transmittedIOR == 0.0f)
+ return fresnel;
+
+ float n1n2 = incidentIOR / transmittedIOR;
+
+ float cosI = - glm::dot(incident, normal);
+ float sinT2 = (n1n2 * n1n2) * (1 - pow(cosI,2));
+
+ if(1 - sinT2 < 0.f)
+ return fresnel;
+
+ float cosT = sqrt(1.0f - sinT2);
+
+ float r1 = pow(((incidentIOR * cosI - transmittedIOR * cosT) / (incidentIOR * cosI + transmittedIOR * cosT)), 2);
+ //float r2 = pow((transmittedIOR * cosI - incidentIOR * cosT) / (transmittedIOR * cosI + incidentIOR * cosT), 2);
+ float r2 = pow(((incidentIOR * cosT - transmittedIOR * cosI) / (incidentIOR * cosT + transmittedIOR * cosI)), 2);
+ fresnel.reflectionCoefficient = (r1 + r2) / 2.0f;
+ fresnel.transmissionCoefficient = 1.0f - fresnel.reflectionCoefficient;
+
+ //printf(" %f ", fresnel.transmissionCoefficient);
+ //printf(" %f ", cosI);
+
+
+ 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) {
@@ -49,7 +126,21 @@ __host__ __device__ glm::vec3 calculateRandomDirectionInHemisphere(glm::vec3 nor
//Now that you know how cosine weighted direction generation works, try implementing non-cosine (uniform) weighted random direction generation.
//This should be much easier than if you had to implement calculateRandomDirectionInHemisphere.
__host__ __device__ glm::vec3 getRandomDirectionInSphere(float xi1, float xi2) {
- return glm::vec3(0,0,0);
+
+ float theta = 2 * TWO_PI * xi1;
+ float phi = acos(2 * xi2 - 1);
+ float u = cos(phi);
+
+ return glm::vec3(sqrt(1 - u*u) * cos(theta), sqrt(1 - u*u) * sin(theta), u);
}
+//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..2dc768b 100755
--- a/src/intersections.h
+++ b/src/intersections.h
@@ -17,11 +17,21 @@ __host__ __device__ glm::vec3 getPointOnRay(ray r, float t);
__host__ __device__ glm::vec3 multiplyMV(cudaMat4 m, glm::vec4 v);
__host__ __device__ glm::vec3 getSignOfRay(ray r);
__host__ __device__ glm::vec3 getInverseDirectionOfRay(ray r);
+__host__ __device__ bool rayBoxIntersect(ray r, float t[2]);
__host__ __device__ float boxIntersectionTest(staticGeom sphere, ray r, glm::vec3& intersectionPoint, glm::vec3& normal);
-__host__ __device__ float boxIntersectionTest(glm::vec3 boxMin, glm::vec3 boxMax, staticGeom box, ray r, glm::vec3& intersectionPoint, glm::vec3& normal);
__host__ __device__ float sphereIntersectionTest(staticGeom sphere, ray r, glm::vec3& intersectionPoint, glm::vec3& normal);
+__host__ __device__ float triangleIntersectionTest(staticGeom triangle, ray r, glm::vec3& intersectionPoint, glm::vec3& normal);
__host__ __device__ glm::vec3 getRandomPointOnCube(staticGeom cube, float randomSeed);
+
+__host__ __device__ float returnTest(staticGeom& sphere, glm::vec3& intersectionPoint, glm::vec3& normal );
+
+
+__host__ __device__ float returnTest(staticGeom& sphere, glm::vec3& intersectionPoint, glm::vec3& normal )
+{
+ return 2.0f;
+}
+
//Handy dandy little hashing function that provides seeds for random number generation
__host__ __device__ unsigned int hash(unsigned int a){
a = (a+0x7ed55d16) + (a<<12);
@@ -69,98 +79,116 @@ __host__ __device__ glm::vec3 getSignOfRay(ray 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);
-}
-//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);
+__host__ __device__ bool rayBoxIntersect(ray r, float t[2])
+{
+ float t_min,t_max;
+
+ t[0] = FLT_MIN;//t_near
+
+ t[1] = FLT_MAX;//t_far
+
+ glm::vec3 min_box = glm::vec3(-.5,-.5,-.5);
+ glm::vec3 max_box = glm::vec3(.5,.5,.5);
+
+ bool intersectFlag = true;
+
+ for(int i = 0;i<3;i++){
+ if(r.direction[i] == 0){
+ if(r.origin[i] < min_box[i] || r.origin[i] >max_box[i]){
+ intersectFlag = false;
+ }
+ }
+ else{
+ t_min = (min_box[i] - r.origin[i]) / r.direction[i];
+ t_max = (max_box[i] - r.origin[i]) / r.direction[i];
+
+ if(t_min > t_max){
+ float temp = t_min;
+ t_min = t_max;
+ t_max = temp;
+ }
+ if(t_min > t[0])
+ t[0] = t_min;
+ if(t_max < t[1]){
+ t[1] = t_max;
+ }
+ if(t[0]>t[1]){
+ intersectFlag = false;
+ }
+ if(t[1]<0){
+ intersectFlag = false;
+ }
+ }
+ }
+ return intersectFlag;
+}
- 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;
+__host__ __device__ glm::vec3 getUnitBoxNommal(glm::vec3& p)
+{
+ glm::vec3 normal;
+ float eps = 0.001f;
+ if(abs(p.x - 0.5) < eps)
+ normal = glm::vec3(1,0,0);
+ else if(abs(p.x + 0.5) < eps){
+ normal = glm::vec3(-1,0,0);
+ }
+ else if(abs(p.y - 0.5) < eps){
+ normal = glm::vec3(0,1,0);
+ }
+ else if(abs(p.y + 0.5) < eps){
+ normal = glm::vec3(0,-1,0);
+ }
+ else if(abs(p.z - 0.5) < eps){
+ normal = glm::vec3(0,0,1);
+ }
+ else if(abs(p.z + 0.5) < eps){
+ normal = glm::vec3(0,0,-1);
+ }
+ return normal;
+}
- r.origin = iP0;
- r.direction = glm::normalize(iV0);
+//TODO: IMPLEMENT THIS FUNCTION
+//Cube intersection test, return -1 if no intersection, otherwise, distance to intersection
+__host__ __device__ float boxIntersectionTest(staticGeom box, ray r, glm::vec3& intersectionPoint, glm::vec3& normal){
- float tmin, tmax, tymin, tymax, tzmin, tzmax;
+ glm::vec3 ro = multiplyMV(box.inverseTransform, glm::vec4(r.origin,1.0f));
+ glm::vec3 rd = glm::normalize(multiplyMV(box.inverseTransform, glm::vec4(r.direction,0.0f)));
- glm::vec3 rsign = getSignOfRay(r);
- glm::vec3 rInverseDirection = getInverseDirectionOfRay(r);
+ ray rt; rt.origin = ro; rt.direction = rd;
- 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;
- }
+ float t[2] = {FLT_MIN, FLT_MAX};
+ //float t[2] = {0};
+ bool isIntersect = rayBoxIntersect(rt, t);
- 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;
- }
+ float ti;
+ if(isIntersect)
+ {
+ if(t[0]<=0){
+ ti = t[1];
+ }
+ else
+ ti = t[0];
- 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;
- }
+ glm::vec3 realIntersectionPoint = multiplyMV(box.transform, glm::vec4(getPointOnRay(rt, ti), 1.0));
+ glm::vec3 realOrigin = multiplyMV(box.transform, glm::vec4(0,0,0,1));
- if ( (tmin > tzmax) || (tzmin > tmax) ){
- return -1;
- }
- if (tzmin > tmin){
- tmin = tzmin;
- }
- if (tzmax < tmax){
- tmax = tzmax;
- }
- if(tmin<0){
- return -1;
- }
+ glm::vec3 unitNormal = getUnitBoxNommal(getPointOnRay(rt, ti));
- 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 = realIntersectionPoint;
- intersectionPoint = multiplyMV(box.transform, glm::vec4(osintersect, 1.0));
+ glm::vec3 realNormal = multiplyMV(box.transform, glm::vec4(unitNormal, 1));
+
+ normal = glm::normalize(realNormal - realOrigin);
-
-
- normal = multiplyMV(box.transform, glm::vec4(currentNormal,0.0));
- return glm::length(intersectionPoint-ro.origin);
+ //normal = glm::normalize(realOrigin - realNormal);
+
+ return glm::length(r.origin - realIntersectionPoint);
+ }
+ else
+ return -1;
}
//LOOK: Here's an intersection test example from a sphere. Now you just need to figure out cube and, optionally, triangle.
@@ -172,8 +200,8 @@ __host__ __device__ float sphereIntersectionTest(staticGeom sphere, ray r, glm::
glm::vec3 ro = multiplyMV(sphere.inverseTransform, glm::vec4(r.origin,1.0f));
glm::vec3 rd = glm::normalize(multiplyMV(sphere.inverseTransform, glm::vec4(r.direction,0.0f)));
- ray rt; rt.origin = ro; rt.direction = rd;
-
+ ray rt; rt.origin = ro; rt.direction = rd;
+
float vDotDirection = glm::dot(rt.origin, rt.direction);
float radicand = vDotDirection * vDotDirection - (glm::dot(rt.origin, rt.origin) - pow(radius, 2));
if (radicand < 0){
@@ -192,7 +220,7 @@ __host__ __device__ float sphereIntersectionTest(staticGeom sphere, ray r, glm::
t = min(t1, t2);
} else {
t = max(t1, t2);
- }
+ }
glm::vec3 realIntersectionPoint = multiplyMV(sphere.transform, glm::vec4(getPointOnRay(rt, t), 1.0));
glm::vec3 realOrigin = multiplyMV(sphere.transform, glm::vec4(0,0,0,1));
@@ -203,6 +231,48 @@ __host__ __device__ float sphereIntersectionTest(staticGeom sphere, ray r, glm::
return glm::length(r.origin - realIntersectionPoint);
}
+__host__ __device__ float triangleIntersectionTest(staticGeom mesh, ray r, glm::vec3& intersectionPoint, glm::vec3& normal)
+{
+
+ //return -1.0f;
+
+ glm::vec3 ro = multiplyMV(mesh.inverseTransform, glm::vec4(r.origin,1.0f));
+ glm::vec3 rd = glm::normalize(multiplyMV(mesh.inverseTransform, glm::vec4(r.direction,0.0f)));
+
+ ray rt; rt.origin = ro; rt.direction = rd;
+
+ glm::vec3 p1 = mesh.tri.p1;
+ glm::vec3 p2 = mesh.tri.p2;
+ glm::vec3 p3 = mesh.tri.p3;
+ glm::vec3 trinormal = mesh.tri.normal;
+ float d = glm::dot(trinormal,p1);
+
+ if(glm::abs(glm::dot(trinormal,rt.direction)-0.0f)<0.001){
+ return -1.0f;//parallel to the plane
+ }
+
+ float t = (d - glm::dot(trinormal, rt.origin))/ glm::dot(trinormal,rt.direction);
+
+ if(t<0.0 )
+ return -1.0f;
+
+ glm::vec3 qPoint = rt.origin + t * rt.direction;
+
+ if(glm::dot(glm::cross((p2-p1),(qPoint-p1)),trinormal)>0 )
+ if(glm::dot(glm::cross((p3-p2),(qPoint-p2)),trinormal)>0)
+ if(glm::dot(glm::cross((p1-p3),(qPoint-p3)),trinormal)>0)
+ {
+ glm::vec3 realIntersectionPoint = multiplyMV(mesh.transform, glm::vec4(qPoint, 1.0));
+ intersectionPoint = realIntersectionPoint;
+ glm::mat4 tempMat4 = utilityCore::cudaMat4ToGlmMat4(mesh.inverseTransform);
+ cudaMat4 inverseTranspose = utilityCore::glmMat4ToCudaMat4(glm::transpose(tempMat4));
+ normal = glm::normalize(multiplyMV(mesh.transform, glm::vec4(trinormal,1)));
+ return t;
+ }
+
+ return -1.0f;
+}
+
//returns x,y,z half-dimensions of tightest bounding box
__host__ __device__ glm::vec3 getRadiuses(staticGeom geom){
glm::vec3 origin = multiplyMV(geom.transform, glm::vec4(0,0,0,1));
@@ -261,20 +331,31 @@ __host__ __device__ glm::vec3 getRandomPointOnCube(staticGeom cube, float random
}
+//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;
+
+ thrust::default_random_engine rng(hash(randomSeed));
+ thrust::uniform_real_distribution u01(0,180);
+ thrust::uniform_real_distribution u02(0,360);
+
+ float radius = .5f;
+
+ glm::vec3 point;
+
+ float theta, phi;
+ theta = (float)u01(rng);
+ phi = (float)u02(rng);
+
+ float degToRad = PI / 180.0f;
+
+ point.x = radius * sin(theta * degToRad) * cos(phi * degToRad);
+ point.y = radius * sin(theta * degToRad) * sin(phi * degToRad);
+ point.z = radius * cos(theta * degToRad);
+
+ 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..09675e5 100755
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -21,6 +21,8 @@ int main(int argc, char** argv){
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#endif
+
+ srand((unsigned)(time(0)));
// Set up pathtracer stuff
bool loadedScene = false;
finishedRender = false;
@@ -28,6 +30,11 @@ int main(int argc, char** argv){
targetFrame = 0;
singleFrameMode = false;
+ //Load Texture
+#ifdef TEXTUREMAP
+ readBMP("../../test.bmp");
+#endif
+
// Load scene file
for(int i=1; iresolution[0];
height = renderCam->resolution[1];
+ preColors = new glm::vec3[width * height];
+
if(targetFrame>=renderCam->frames){
cout << "Warning: Specified target frame is out of range, defaulting to frame 0." << endl;
targetFrame = 0;
@@ -90,6 +99,7 @@ int main(int argc, char** argv){
#else
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
+ glutMouseFunc(mouse);
glutMainLoop();
#endif
@@ -104,7 +114,6 @@ void runCuda(){
// Map OpenGL buffer object for writing from CUDA on a single GPU
// No data is moved (Win & Linux). When mapped to CUDA, OpenGL should not use this buffer
-
if(iterationsiterations){
uchar4 *dptr=NULL;
iterations++;
@@ -120,13 +129,30 @@ void runCuda(){
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() );
+
+ int *BMPRed = new int [BMPSize[0] * BMPSize[1]];
+ int *BMPGreen = new int [BMPSize[0] * BMPSize[1]];
+ int *BMPBlue = new int [BMPSize[0] * BMPSize[1]];
+
+ for(int i = 0; i < BMPSize[0]; i++)
+ {
+ for(int j = 0; j < BMPSize[1]; j++)
+ {
+ int index = i * BMPSize[1] + j;
+ BMPRed[index] = BMPInput(i,j)->Red;
+ BMPGreen[index] = BMPInput(i,j)->Green;
+ BMPBlue[index] = BMPInput(i,j)->Blue;
+ }
+ }
+// execute the kernel
+ cudaRaytraceCore(dptr, renderCam, targetFrame, iterations, materials, renderScene->materials.size(), geoms, renderScene->objects.size(), preColors, BMPRed, BMPGreen, BMPBlue, BMPSize);
// unmap buffer object
cudaGLUnmapBufferObject(pbo);
+
+ delete BMPRed;
+ delete BMPGreen;
+ delete BMPBlue;
}else{
if(!finishedRender){
@@ -136,14 +162,14 @@ void runCuda(){
for(int x=0; xresolution.x; x++){
for(int y=0; yresolution.y; y++){
int index = x + (y * renderCam->resolution.x);
- outputImage.writePixelRGB(renderCam->resolution.x-1-x,y,renderCam->image[index]);
+ outputImage.writePixelRGB(renderCam->resolution.x-1-x,y,renderCam->image[index]);//sijie
}
}
gammaSettings gamma;
gamma.applyGamma = true;
- gamma.gamma = 1.0;
- gamma.divisor = 1.0; //renderCam->iterations;
+ gamma.gamma = 1.0 / 2.0;
+ gamma.divisor = renderCam->iterations;
outputImage.setGammaSettings(gamma);
string filename = renderCam->imageName;
string s;
@@ -166,7 +192,7 @@ void runCuda(){
targetFrame++;
iterations = 0;
for(int i=0; iresolution.x*renderCam->resolution.y; i++){
- renderCam->image[i] = glm::vec3(0,0,0);
+ renderCam->image[i] = glm::vec3(0,0,0);
}
cudaDeviceReset();
finishedRender = false;
@@ -175,6 +201,15 @@ void runCuda(){
}
+void cameraReset()
+{
+ iterations = 0;
+ preColors = new glm::vec3[width * height];
+ for(int i = 0; i < width * height; i++)
+ renderCam->image[i] = glm::vec3(0,0,0);
+}
+
+
#ifdef __APPLE__
void display(){
@@ -223,9 +258,46 @@ void runCuda(){
std::cout << key << std::endl;
switch (key)
{
+ case(97):
+ renderCam->positions[0].x++;
+ cameraReset();
+ break;
+ case(100):
+ renderCam->positions[0].x--;
+ cameraReset();
+ break;
+ case(119):
+ renderCam->positions[0].z--;
+ cameraReset();
+ break;
+ case(115):
+ renderCam->positions[0].z++;
+ cameraReset();
+ break;
case(27):
exit(1);
break;
+
+ }
+ }
+
+ void mouse(int button, int state, int x, int y)
+ {
+ if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
+ {
+ ix = x;
+ iy = y;
+ }
+ else if(button == GLUT_LEFT_BUTTON && state == GLUT_UP)
+ {
+ float deltaX = x - ix;
+ float deltaY = y - iy;
+
+ deltaX /= renderCam->resolution[0];
+ deltaY /= renderCam->resolution[1];
+
+ cameraReset();
+ renderCam->views[0] = glm::normalize(glm::vec3(deltaX, deltaY, -1));
}
}
@@ -234,6 +306,7 @@ void runCuda(){
+
//-------------------------------
//----------SETUP STUFF----------
//-------------------------------
@@ -396,3 +469,42 @@ void shut_down(int return_code){
#endif
exit(return_code);
}
+
+
+void readBMP(char* filename)
+{
+ if(BMPInput.ReadFromFile("../../test.bmp"))
+ {
+ BMIH bmih = GetBMIH("../../test.bmp");
+ printf("Get Image Succeessful");
+ //printf("r%d g%d b%d ", BMPInput(3,3)->Red, BMPInput(3,3)->Green, BMPInput(3,3)->Blue);
+ //printf("%d, %d ", bmih.biWidth, bmih.biHeight);
+ BMPSize[0] = bmih.biWidth;
+ BMPSize[1] = bmih.biHeight;
+ }
+ else
+ {
+ BMPSize[0] = BMPSize[1] = 0;
+ }
+}
+
+glm::vec3 GetOGLPos(int x, int y)
+{
+ GLint viewport[4];
+ GLdouble modelview[16];
+ GLdouble projection[16];
+ GLfloat winX, winY, winZ;
+ GLdouble posX, posY, posZ;
+
+ glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
+ glGetDoublev( GL_PROJECTION_MATRIX, projection );
+ glGetIntegerv( GL_VIEWPORT, viewport );
+
+ winX = (float)x;
+ winY = (float)viewport[3] - (float)y;
+ glReadPixels( x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );
+
+ gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
+
+ return glm::vec3(posX, posY, posZ);
+}
\ No newline at end of file
diff --git a/src/main.h b/src/main.h
index 0bab7cb..e6cb405 100755
--- a/src/main.h
+++ b/src/main.h
@@ -29,6 +29,10 @@
#include "raytraceKernel.h"
#include "utilities.h"
#include "scene.h"
+#include "EasyBMP.h"
+
+#include
+#include
#if CUDA_VERSION >= 5000
#include
@@ -52,6 +56,8 @@ int targetFrame;
int iterations;
bool finishedRender;
bool singleFrameMode;
+glm::vec3 *preColors;
+
//-------------------------------
//------------GL STUFF-----------
@@ -86,6 +92,7 @@ void runCuda();
#else
void display();
void keyboard(unsigned char key, int x, int y);
+ void mouse(int button, int state, int x, int y);
#endif
//-------------------------------
@@ -113,4 +120,15 @@ void deletePBO(GLuint* pbo);
void deleteTexture(GLuint* tex);
void shut_down(int return_code);
+//FOR READING IMAGE DATA
+BMP BMPInput;
+int BMPSize[2];
+void readBMP(char* filename);
+
+//For mouse position in object space
+int ix, iy;
+glm::vec3 GetOGLPos(int x, int y);
+
+void cameraReset();
+
#endif
diff --git a/src/pyramid.obj b/src/pyramid.obj
new file mode 100644
index 0000000..f2c4ca1
--- /dev/null
+++ b/src/pyramid.obj
@@ -0,0 +1,16 @@
+# OBJ file created by ply_to_obj.c
+#
+g Object001
+
+v 0 0 0
+v 1 0 0
+v 1 1 0
+v 0 1 0
+v 0.5 0.5 1.6
+
+f 4 1 2
+f 3 4 2
+f 5 2 1
+f 4 5 1
+f 3 5 4
+f 5 3 2
diff --git a/src/raytraceKernel.cu b/src/raytraceKernel.cu
index 87a65a6..203e6f8 100755
--- a/src/raytraceKernel.cu
+++ b/src/raytraceKernel.cu
@@ -5,25 +5,61 @@
// Peter Kutz and Yining Karl Li's GPU Pathtracer: http://gpupathtracer.blogspot.com/
// Yining Karl Li's TAKUA Render, a massively parallel pathtracing renderer: http://www.yiningkarlli.com
+#include
+#include
+#include
+#include
+
#include
#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 "EasyBMP.h"
+
+
+#if CUDA_VERSION >= 5000
+ #include
+#else
+ #include
+#endif
void checkCUDAError(const char *msg) {
cudaError_t err = cudaGetLastError();
if( cudaSuccess != err) {
fprintf(stderr, "Cuda error: %s: %s.\n", msg, cudaGetErrorString( err) );
+ system("pause");
exit(EXIT_FAILURE);
}
}
+struct rayPixel
+{
+ ray r;
+ int index;
+ bool isDone;
+ bool isFirst;
+ int x;
+ int y;
+};
+
+struct is_done
+{
+ __host__ __device__
+ bool operator()(const rayPixel r)
+ {
+ return r.isDone;
+ }
+};
+
+
//LOOK: This function demonstrates how to use thrust for random number generation on the GPU!
//Function that generates static.
__host__ __device__ glm::vec3 generateRandomNumberFromThread(glm::vec2 resolution, float time, int x, int y){
@@ -35,42 +71,49 @@ __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);
+__host__ __device__ int generateRandomNumber(glm::vec2 resolution, float time, int x, int y)
+{
+ 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));
+ thrust::default_random_engine rng(hash(index*time));
+ thrust::uniform_real_distribution u01(0,1);
+
+ return (int)(u01(rng)) * 10;
+}
+
+__host__ __device__ int generateRandomNumber(float time)
+{
+ thrust::default_random_engine rng(hash(time));
+ thrust::uniform_real_distribution u01(0,1);
+
+ return (float)(u01(rng));
+}
+
+
+//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){
- glm::vec3 direction = glm::normalize(R);
- //major performance cliff at this point, TODO: find out why!
- ray r;
- r.origin = eye;
- r.direction = direction;
- return r;
+ //printf("%f ", x);
+
+ glm::vec3 A = glm::cross(view, up);
+ glm::vec3 B = glm::cross(A, view);
+ glm::vec3 M = eye + view;
+
+ float absC = glm::length(view);
+ float absA = glm::length(A);
+ float absB = glm::length(B);
+
+ glm::vec3 H = (A * absC * (float)tan(fov.x*(PI/180))) / absA;
+ glm::vec3 V = (B * absC * (float)tan(fov.y*(PI/180))) / absB;
+
+ glm::vec3 P = M + (2 * (x / (float)(resolution.x - 1)) - 1) * H + (1 - 2 * (y / (float)(resolution.y - 1))) * V;
+ glm::vec3 D = (P - eye) / glm::length(P - eye);
+
+ ray r;
+ r.origin = eye;
+ r.direction = D;
+ return r;
}
//Kernel that blacks out a given image buffer
@@ -83,8 +126,8 @@ __global__ void clearImage(glm::vec2 resolution, glm::vec3* image){
}
}
-//Kernel that writes the image to the OpenGL PBO directly.
-__global__ void sendImageToPBO(uchar4* PBOpos, glm::vec2 resolution, glm::vec3* image){
+//Kernel that writes the image to the OpenGL PBO directly.
+__global__ void sendImageToPBO(uchar4* PBOpos, glm::vec2 resolution, glm::vec3* image, float time){
int x = (blockIdx.x * blockDim.x) + threadIdx.x;
int y = (blockIdx.y * blockDim.y) + threadIdx.y;
@@ -92,11 +135,14 @@ __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;
+ color /= time;//sijie
+
if(color.x>255){
color.x = 255;
}
@@ -107,65 +153,682 @@ __global__ void sendImageToPBO(uchar4* PBOpos, glm::vec2 resolution, glm::vec3*
if(color.z>255){
color.z = 255;
- }
-
+ }
+
// 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;
}
}
-//TODO: IMPLEMENT THIS FUNCTION
-//Core raytracer kernel
-__global__ void raytraceRay(glm::vec2 resolution, float time, float bounce, cameraData cam, int rayDepth, glm::vec3* colors,
- staticGeom* geoms, int numberOfGeoms, material* materials, int numberOfMaterials){
+__global__ void sendImageToPBOSC(uchar4* PBOpos, glm::vec3* image, float time, int poolSize, glm::vec3* preimage)
+{
int x = (blockIdx.x * blockDim.x) + threadIdx.x;
- int y = (blockIdx.y * blockDim.y) + threadIdx.y;
- int index = x + (y * resolution.x);
+ int y = (blockIdx.y * blockDim.y) + threadIdx.y;
+
+ if(x-EPSILON){
- MAX_DEPTH = depth;
- colors[index] = materials[geoms[i].materialid].color;
- }
- }
+ int index = x;
+ glm::vec3 color;
+
+ /*color.x = ((image[index].x + preimage[index].x) / time) * 255.0;
+ color.y = ((image[index].y + preimage[index].y) / time) * 255.0;
+ color.z = ((image[index].z + preimage[index].z) / time) * 255.0;*/
+
+ color.x = image[index].x*255.0;
+ color.y = image[index].y*255.0;
+ color.z = image[index].z*255.0;
+
+ color /= time;//sijie
+
+ if(color.x>255){
+ color.x = 255;
+ }
+
+ if(color.y>255){
+ color.y = 255;
+ }
+
+ if(color.z>255){
+ color.z = 255;
+ }
+
+ // Each thread writes one pixel location in the texture (textel)
+ PBOpos[index].w = 0;
+ PBOpos[index].x = color.x;
+ PBOpos[index].y = color.y;
+ PBOpos[index].z = color.z;
+ }
+}
+
+__global__ void addImageColor(glm::vec3* currImage, glm::vec3* preImage, glm::vec2 resolution)
+{
+ int x = (blockIdx.x * blockDim.x) + threadIdx.x;
+ int y = (blockIdx.y * blockDim.y) + threadIdx.y;
+ int index = x + (y * resolution.x);
+
+ if(x<=resolution.x && y<=resolution.y)
+ {
+ currImage[index] = (currImage[index] + preImage[index]);
+ }
+}
+
+__host__ __device__ bool ShadowRayUnblock(staticGeom* geoms, int numberofGeoms, glm::vec3 intersectionPoint, int lightIndex, int geomIndex, glm::vec3 normal, glm::vec3 lightPos)
+{
+ ray r;
+ r.direction = glm::normalize(lightPos - intersectionPoint);
+ r.origin = intersectionPoint + .1f * r.direction;
+
+ //surface parallel to the light
+ if(glm::dot(r.direction, normal) < 1e-5 && glm::dot(r.direction, normal) > -1e-5)
+ return false;
+ glm::vec3 tempInterPoint, tempNormal;
+ float t = FLT_MAX;
+ int intersectIndex = -1;
+ for(int i = 0; i < numberofGeoms; ++i)
+ {
+ float temp;
+ if(geoms[i].type == CUBE)
+ temp = boxIntersectionTest(geoms[i], r, tempInterPoint, tempNormal);
+ else
+ temp = sphereIntersectionTest(geoms[i], r, tempInterPoint, tempNormal);
+
+ if(temp < t && temp != -1.0f)
+ {
+ t = temp;
+ intersectIndex = i;
+ }
+ }
+
+ if(intersectIndex == lightIndex)
+ return true;
+ else
+ return false;
+}
+
+
+__host__ __device__ bool checkIntersect(staticGeom* geoms, int numberOfGeoms, ray r, glm::vec3& intersectionPoint, glm::vec3& normal, int& geomIndex)
+{
+ float t = FLT_MAX;
+ //int geomIndex = 0;
+ for(int i = numberOfGeoms - 1; i >= 0; --i)
+ {
+ float temp;
+ if(geoms[i].type == SPHERE)
+ temp = sphereIntersectionTest(geoms[i], r, intersectionPoint, normal);
+ else if(geoms[i].type == CUBE)
+ temp = boxIntersectionTest(geoms[i], r, intersectionPoint, normal);
+ else if(geoms[i].type == MESH){
+ //printf("hahah tri \n");
+ temp = triangleIntersectionTest(geoms[i], r, intersectionPoint, normal);
+ //printf("after haah tri \n");
+ }
+
+ if(temp != -1.0f && temp < t)
+ {
+ t = temp;
+ geomIndex = i;
+ }
+ }
+
+ if(t != FLT_MAX){
+ //get the intersection point and normal
+ if(geoms[geomIndex].type == SPHERE)
+ sphereIntersectionTest(geoms[geomIndex], r, intersectionPoint, normal);
+ else if(geoms[geomIndex].type == CUBE)
+ boxIntersectionTest(geoms[geomIndex], r, intersectionPoint, normal);
+ else if(geoms[geomIndex].type == MESH){
+ triangleIntersectionTest(geoms[geomIndex], r, intersectionPoint, normal);
+ //printf("have tri ");
+ }
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
- //colors[index] = generateRandomNumberFromThread(resolution, time, x, y);
- }
+__host__ __device__ glm::vec3 indirectLight(staticGeom* geoms, int numberOfGeoms, int* lightIndex, glm::vec3 intersectionPoint, glm::vec3 normal, int geomIndex, float time, glm::vec3 materialColor)
+{
+ glm::vec3 color;
+ int sampleNum = 3;
+ for(int i = 0; i < sampleNum; i++)
+ {
+ //for now is just one light
+ glm::vec3 pointOnCube = getRandomPointOnCube(geoms[lightIndex[0]], time * (i+1));
+ ray r;
+ r.direction = glm::normalize(intersectionPoint - pointOnCube);
+ r.origin = pointOnCube;
+ int newgeomIndex;
+ glm::vec3 newIntersection, newNormal;
+ checkIntersect(geoms, numberOfGeoms, r, newIntersection, newNormal, newgeomIndex);
+ if(newgeomIndex == geomIndex)
+ {
+ color += materialColor;
+ }
+ }
+ color /= sampleNum;
+ return color;
}
+__host__ __device__ bool singleScatter(staticGeom* geoms, int numberOfGeoms, glm::vec3& intersectionPoint, glm::vec3 inNormal, glm::vec3 diffuseDir,
+ glm::vec3 refractedDir, material material, float ran, int geomIndex, Fresnel fresnel, float& singleScatterCoeff)
+{
+ float so = -log(ran) / material.reducedScatterCoefficient;
+
+ //printf(" what is so %f ", so);
+
+ glm::vec3 pSamp = intersectionPoint + so * refractedDir;
+
+ ray r;
+ r.origin = pSamp;
+ r.direction = diffuseDir;
+
+ glm::vec3 newIntersectionPoint;
+ glm::vec3 newNormal;
+ int newGeomIndex;
+
+ if(checkIntersect(geoms, numberOfGeoms, r, newIntersectionPoint, newNormal, newGeomIndex))
+ {
+ if(newGeomIndex == geomIndex)
+ {
+ intersectionPoint = newIntersectionPoint;
+ float si = glm::length(intersectionPoint - pSamp);
+ float dotN = glm::dot(diffuseDir, inNormal);
+ float sp_i = abs(si * dotN)/ glm::sqrt(1 - pow((1.f/1.f/material.indexOfRefraction),2) * (1 - dotN * dotN));
+ singleScatterCoeff = exp(-sp_i * 0.7f) * exp(-so * material.reducedScatterCoefficient) * fresnel.transmissionCoefficient * material.hasScatter / 1.0f;
+ return true;
+ }
+ }
+ return false;
+}
+
+
+__host__ __device__ bool diffuseScatter(staticGeom* geoms, int numberOfGeoms, glm::vec3& intersectionPoint, glm::vec3 inNormal, material material,
+ glm::vec3 ran, int geomIndex, Fresnel fresnel, float &diffuseScatterCoeff)
+{
+ glm::vec3 dir = glm::normalize(calculateRandomDirectionInHemisphere(inNormal, ran.x, ran.y));
+ glm::vec3 pSample = intersectionPoint + 1/material.reducedScatterCoefficient * dir;
+ ray r;
+ r.origin = pSample;
+ r.direction = -inNormal;
+ glm::vec3 newIntersectionPoint;
+ glm::vec3 newNormal;
+ int newGeomIndex;
+ if(checkIntersect(geoms, numberOfGeoms, r, newIntersectionPoint, newNormal, newGeomIndex))
+ {
+ if(newGeomIndex == geomIndex)
+ {
+ float r = glm::distance(intersectionPoint, newIntersectionPoint);
+ float zr = 1.0f/material.reducedScatterCoefficient;
+ float zv = zr + 4 * (1.0f/(3.f * material.reducedScatterCoefficient) * (1.f + fresnel.reflectionCoefficient / 1.f - fresnel.reflectionCoefficient));
+ float dr = glm::sqrt(r*r + zr*zr);
+ float dv = glm::sqrt(r*r + zv*zv);
+ float tr = glm::sqrt(3 * material.absorptionCoefficient.x * material.reducedScatterCoefficient);
+ float tr_dr = tr * dr;
+ float tr_dv = tr * dv;
+
+ float rd = (tr_dr + 1.0) * glm::exp(-tr_dr)/* * zr *// (glm::pow(dr, 3.f))
+ + (tr_dv + 1.0) * glm::exp(-tr_dv) * zv / (glm::pow(dv,3.0f));
+
+ diffuseScatterCoeff = ((glm::dot(dir ,inNormal) * rd) / (material.reducedScatterCoefficient * material.reducedScatterCoefficient * glm::exp(-material.reducedScatterCoefficient * r))) / 3 * PI;
+ intersectionPoint = newIntersectionPoint;
+ return true;
+ }
+ }
+ return false;
+}
+
+
+__host__ __device__ glm::vec3 textureMap(int geomIndex, staticGeom* geoms, glm::vec3 normal, int* BMPRed, int* BMPGreen, int* BMPBlue, int BMPWidth, int BMPHeight)
+{
+#ifdef TEXTUREMAP
+ if(geomIndex == TEXTUREMAP)
+ {
+ glm::vec3 realNorthPole = multiplyMV(geoms[geomIndex].transform, glm::vec4(0, 0.5, 0, 1.0));
+ glm::vec3 realEquator = multiplyMV(geoms[geomIndex].transform, glm::vec4(0.5, 0, 0, 1.0));
+ glm::vec3 realOrigin = multiplyMV(geoms[geomIndex].transform, glm::vec4(0,0,0,1));
+
+ glm::vec3 vn = glm::normalize(realNorthPole - realOrigin);
+ glm::vec3 ve = glm::normalize(realEquator - realOrigin);
+
+ float phi = std::acos(-glm::dot(vn, normal));
+ float v = phi / PI;
+
+ float theta = (std::acos(glm::dot(ve, normal) / sin(phi))) / (2 * PI);
+ float u;
+ if(glm::dot(glm::cross(vn, ve), normal) > 0)
+ u = theta;
+ else
+ u = 1 - theta;
+
+ int bi = v * BMPWidth;
+ int bj = u * BMPHeight;
+ int bIndex = bi * BMPHeight + bj;
+
+ float red = BMPRed[bIndex] / 255.0f;
+ float green = BMPGreen[bIndex] / 255.0f;
+ float blue = BMPBlue[bIndex] / 255.0f;
+ return glm::vec3(red, green, blue);
+ }
+#else
+ return glm::vec3(0,0,0);
+#endif
+}
+
+__host__ __device__ void pathTraceRecursive(ray r, int rayDepth, staticGeom* geoms, int numberOfGeoms, material* materials, glm::vec3& color,
+ cameraData cam, float time, int x, int y, glm::vec3* lightPos, int lightIndex)
+{
+ if(rayDepth >= 3)
+ {
+ return;
+ }
+
+ glm::vec3 intersectionPoint, normal;
+ int geomIndex;
+ if(!checkIntersect(geoms, numberOfGeoms, r, intersectionPoint, normal, geomIndex))
+ {
+ color = glm::vec3(0,0,0);
+ return;
+ }
+
+ material currMaterial = materials[geoms[geomIndex].materialid];
+
+ glm::vec3 ran = generateRandomNumberFromThread(cam.resolution, time, x, y);
+ if(ran.z < 0.5f)
+ {
+ color = currMaterial.emittance * currMaterial.color;
+ return;
+ }
+ else{
+ ray newRay;
+ newRay.direction = calculateRandomDirectionInHemisphere(normal, ran.x, ran.y);
+ newRay.origin = intersectionPoint + 0.01f * newRay.direction;
+
+ float cosTheta = glm::dot(newRay.direction, normal);
+ float BDRF = 2.0f * 0.4f * cosTheta;
+ pathTraceRecursive(newRay, rayDepth + 1, geoms, numberOfGeoms, materials, color, cam, time, x, y, lightPos, lightIndex);
+ float diffuseTerm;
+ diffuseTerm = glm::dot(glm::normalize(lightPos[0] - intersectionPoint), normal);
+ diffuseTerm = max(diffuseTerm, 0.0f);
+
+ color = color * currMaterial.color/* * diffuseTerm*/;
+ }
+
+ return;
+}
+
+__host__ __device__ void pathTraceIterative(ray r, int rayDepth, staticGeom* geoms, int numberOfGeoms, material* materials, glm::vec3& color,
+ cameraData cam, float time, int x, int y, int* lightIndex, int lightNum, int* BMPRed, int* BMPGreen, int* BMPBlue, int BMPWidth, int BMPHeight)
+{
+ glm::vec3 acol = glm::vec3(1,1,1);
+ color = glm::vec3(1,1,1);
+
+ for(int i = 0; i < MAXDEPTH; i++)
+ {
+ glm::vec3 intersectionPoint, normal;
+ int geomIndex;
+ if(!checkIntersect(geoms, numberOfGeoms, r, intersectionPoint, normal, geomIndex))
+ {
+ color = glm::vec3(0,0,0);
+ return;
+ }
+
+ material currMaterial = materials[geoms[geomIndex].materialid];
+ glm::vec3 ran = generateRandomNumberFromThread(cam.resolution, time + (i+1), x, y);
+
+ for(int i = 0; i < lightNum; i++)
+ {
+ if(geomIndex == lightIndex[i])
+ {
+ color *= currMaterial.emittance * currMaterial.color;
+ return;
+ }
+ }
+
+ float cosTheta = glm::dot(r.direction, normal);
+
+ //For texture map
+#ifdef TEXTUREMAP
+ if(geomIndex == TEXTUREMAP)
+ currMaterial.color = textureMap(geomIndex, geoms, normal, BMPRed, BMPGreen, BMPBlue, BMPWidth, BMPHeight);
+#endif
+
+ if(currMaterial.hasReflective > 0.0f && ran.z < currMaterial.hasReflective)//Reflective
+ {
+ glm::vec3 reflectionDirection = calculateReflectionDirection(normal, r.direction);
+ r.origin = intersectionPoint + 0.01f * reflectionDirection;
+ r.direction = reflectionDirection;
+ Fresnel fresnel;
+ float inOrOut = glm::dot(r.direction, normal);
+ glm::vec3 reflectedColor, refractedColor;
+ if(inOrOut < 0)
+ fresnel = calculateFresnel(normal, r.direction, 1.0f, currMaterial.indexOfRefraction, reflectedColor, refractedColor);
+ else
+ fresnel = calculateFresnel(-normal, r.direction, currMaterial.indexOfRefraction, 1.0f, reflectedColor, refractedColor);
+
+ color *= fresnel.reflectionCoefficient;
+ color *= currMaterial.color;
+ continue;
+ }
+ else if(currMaterial.hasRefractive> 0.0f)//Refractive
+ {
+
+ Fresnel fresnel;
+ float inOrOut = glm::dot(r.direction, normal);
+ glm::vec3 reflectedColor, refractedColor;
+ if(inOrOut < 0)
+ fresnel = calculateFresnel(normal, r.direction, 1.0f, currMaterial.indexOfRefraction, reflectedColor, refractedColor);
+ else
+ fresnel = calculateFresnel(-normal, r.direction, currMaterial.indexOfRefraction, 1.0f, reflectedColor, refractedColor);
+
+ float refractive = currMaterial.indexOfRefraction;
+ glm::vec3 refractedDirection;
+
+ if(ran.z < .5f)
+ {
+ if(inOrOut < 0)
+ refractedDirection = calculateTransmissionDirection(normal, r.direction, 1.0, refractive);
+ else
+ refractedDirection = calculateTransmissionDirection(-normal, r.direction, refractive, 1.0);
+ r.origin = intersectionPoint + 0.01f * refractedDirection;
+ r.direction = refractedDirection;
+ color *= fresnel.transmissionCoefficient;
+ continue;
+ }
+ else
+ {
+ glm::vec3 reflectionDirection = calculateReflectionDirection(normal, r.direction);
+ r.origin = intersectionPoint + 0.01f * reflectionDirection;
+ r.direction = reflectionDirection;
+ color *= fresnel.reflectionCoefficient;
+ continue;
+ }
+ }
+ else if(currMaterial.hasScatter > 0.f && ran.z < currMaterial.hasScatter)//Subsurface Scattering
+ {
+ Fresnel fresnel;
+ float inOrOut = glm::dot(r.direction, normal);
+ glm::vec3 reflectedColor, refractedColor;
+ if(inOrOut < 0)
+ fresnel = calculateFresnel(normal, r.direction, 1.0f, currMaterial.indexOfRefraction, reflectedColor, refractedColor);
+ else
+ fresnel = calculateFresnel(-normal, r.direction, currMaterial.indexOfRefraction, 1.0f, reflectedColor, refractedColor);
+
+ glm::vec3 diffuseDirection;
+ float singleScatterCoeff;
+ float diffuseScatterCoeff;
+ if(/*singleScatter(geoms, numberOfGeoms, intersectionPoint, normal, diffuseDirection, refractedDirection, currMaterial, ran.x, geomIndex, fresnel, singleScatterCoeff)
+ && */diffuseScatter(geoms, numberOfGeoms, intersectionPoint, normal, currMaterial, ran, geomIndex, fresnel, diffuseScatterCoeff))
+ {
+ glm::vec3 lPos = getRandomPointOnCube(geoms[lightIndex[0]], ran.x);
+ diffuseDirection = glm::normalize(lPos - intersectionPoint);
+ r.direction = glm::normalize(calculateRandomDirectionInHemisphere(normal, ran.x, ran.y));//diffuseDirection;
+ r.origin = intersectionPoint + 0.001f * r.direction;
+ color *= (/*singleScatterCoeff +*/ diffuseScatterCoeff);
+ }
+ }
+ else//Diffuse
+ {
+ r.direction = glm::normalize(calculateRandomDirectionInHemisphere(normal, ran.x, ran.y));
+ r.origin = intersectionPoint + 0.001f * r.direction;
+ }
+
+ /*float diffuseTerm;
+ diffuseTerm = glm::dot(glm::normalize(lightPos[0] - intersectionPoint), normal);
+ diffuseTerm = max(diffuseTerm, 0.0f);*/
+ //glm::vec3 icolor = indirectLight(geoms, numberOfGeoms, lightIndex, intersectionPoint, normal, geomIndex, time, currMaterial.color);
+
+ color *= currMaterial.color;// + .5f * icolor;
+ }
+ color = glm::vec3(0,0,0);
+ return;
+}
+
+
+__global__ void pathtraceRay(glm::vec2 resolution, float time, cameraData cam, int rayDepth, glm::vec3* colors, staticGeom* geoms,
+ int numberOfGeoms, material* materials, int numberOfMaterials, int* lightIndex, int lightNum, int iteration, int* BMPRed, int* BMPGreen, int* BMPBlue, int BMPWidth, int BMPHeight)
+{
+ int x = (blockIdx.x * blockDim.x) + threadIdx.x;
+ int y = (blockIdx.y * blockDim.y) + threadIdx.y;
+ int index = x + (y * resolution.x);
+
+ if((x<=resolution.x && y<=resolution.y))
+ {
+ glm::vec3 ran = generateRandomNumberFromThread(cam.resolution, time, x, y);
+ //glm::vec3 camPosition = glm::vec3(cam.position.x + (float)(1 + ran.x)/1.0f, cam.position.y + (float)(1 + ran.y)/1.0f, cam.position.z + (float)(1 + ran.z)/1.0f);
+ glm::vec3 color;
+ ray r = raycastFromCameraKernel(resolution, time, (float)(x + (float)(1 + ran.x)/1.0f), (float)(y + (float)(1.0f + ran.y)/ 1.0f), cam.position, cam.view, cam.up, cam.fov);
+
+#ifdef DOF
+ float focalLength = DOF;
+ glm::vec3 aimedPosition = r.origin + focalLength * r.direction;
+ glm::vec3 rand = generateRandomNumberFromThread(cam.resolution, time * (2), x, y);
+ glm::vec3 camPosition = glm::vec3(cam.position.x + (float)rand.x, cam.position.y + (float)rand.y, cam.position.z + (float)rand.z);
+
+ ray jitterRay;
+ r.origin = camPosition;
+ r.direction = glm::normalize(aimedPosition - camPosition);
+#endif
+ pathTraceIterative(r, 0, geoms, numberOfGeoms, materials, color, cam, time, x, y, lightIndex, lightNum, BMPRed, BMPGreen, BMPBlue, BMPWidth, BMPHeight);
+ colors[index] += color;
+
+ }
+}
+
+
+__host__ __device__ int colorCheck(glm::vec3 color)
+{
+ if(epsilonCheck(color.x, 0.0f) && epsilonCheck(color.y, 0.0f) && epsilonCheck(color.z, 0.0f))
+ return 0;
+ else
+ return 1;
+}
+
+__host__ __device__ int pathTraceIterativeSC(ray& r, staticGeom* geoms, int numberOfGeoms, material* materials, glm::vec3& color,
+ cameraData cam, float time, int x, int y, int* lightIndex, int lightNum, int* BMPRed, int* BMPGreen, int* BMPBlue, int BMPWidth, int BMPHeight)
+{
+ color = glm::vec3(1,1,1);
+
+ glm::vec3 intersectionPoint, normal;
+ int geomIndex;
+ if(!checkIntersect(geoms, numberOfGeoms, r, intersectionPoint, normal, geomIndex))
+ {
+ return 0;
+ }
+
+ material currMaterial = materials[geoms[geomIndex].materialid];
+ glm::vec3 ran = generateRandomNumberFromThread(cam.resolution, time, x, y);
+
+ for(int i = 0; i < lightNum; i++)
+ {
+ if(geomIndex == lightIndex[i])
+ {
+ color *= currMaterial.emittance * currMaterial.color;
+ return 2;
+ }
+ }
+
+ float cosTheta = glm::dot(r.direction, normal);
+
+ //For texture map
+#ifdef TEXTUREMAP
+ if(geomIndex == TEXTUREMAP)
+ currMaterial.color = textureMap(geomIndex, geoms, normal, BMPRed, BMPGreen, BMPBlue, BMPWidth, BMPHeight);
+#endif
+
+ if(currMaterial.hasReflective > 0.0f && ran.z < currMaterial.hasReflective)//Reflective
+ {
+ glm::vec3 reflectionDirection = calculateReflectionDirection(normal, r.direction);
+ r.origin = intersectionPoint + 0.01f * reflectionDirection;
+ r.direction = reflectionDirection;
+
+ Fresnel fresnel;
+ float inOrOut = glm::dot(r.direction, normal);
+ glm::vec3 reflectedColor, refractedColor;
+ if(inOrOut < 0)
+ fresnel = calculateFresnel(normal, r.direction, 1.0f, currMaterial.indexOfRefraction, reflectedColor, refractedColor);
+ else
+ fresnel = calculateFresnel(-normal, r.direction, currMaterial.indexOfRefraction, 1.0f, reflectedColor, refractedColor);
+
+ color *= (currMaterial.color);
+ color *= fresnel.reflectionCoefficient;
+ return 1;
+ }
+ else if(currMaterial.hasRefractive> 0.0f)//Refractive
+ {
+
+ Fresnel fresnel;
+ float inOrOut = glm::dot(r.direction, normal);
+ glm::vec3 reflectedColor, refractedColor;
+ if(inOrOut < 0)
+ fresnel = calculateFresnel(normal, r.direction, 1.0f, currMaterial.indexOfRefraction, reflectedColor, refractedColor);
+ else
+ fresnel = calculateFresnel(-normal, r.direction, currMaterial.indexOfRefraction, 1.0f, reflectedColor, refractedColor);
+
+ float refractive = currMaterial.indexOfRefraction;
+ glm::vec3 refractedDirection;
+
+ if(ran.z < .5f)
+ {
+ if(inOrOut < 0)
+ refractedDirection = calculateTransmissionDirection(normal, r.direction, 1.0, refractive);
+ else
+ refractedDirection = calculateTransmissionDirection(-normal, r.direction, refractive, 1.0);
+ r.origin = intersectionPoint + 0.01f * refractedDirection;
+ r.direction = refractedDirection;
+ color *= fresnel.transmissionCoefficient;
+ return 1;
+ }
+ else
+ {
+ glm::vec3 reflectionDirection = calculateReflectionDirection(normal, r.direction);
+ r.origin = intersectionPoint + 0.01f * reflectionDirection;
+ r.direction = reflectionDirection;
+ color *= fresnel.reflectionCoefficient;
+ return 1;
+ }
+ }
+ else if(currMaterial.hasScatter > 0.f && ran.z < currMaterial.hasScatter)//Subsurface Scattering
+ {
+ Fresnel fresnel;
+ float inOrOut = glm::dot(r.direction, normal);
+ glm::vec3 reflectedColor, refractedColor;
+ if(inOrOut < 0)
+ fresnel = calculateFresnel(normal, r.direction, 1.0f, currMaterial.indexOfRefraction, reflectedColor, refractedColor);
+ else
+ fresnel = calculateFresnel(-normal, r.direction, currMaterial.indexOfRefraction, 1.0f, reflectedColor, refractedColor);
+
+ glm::vec3 diffuseDirection;
+ float singleScatterCoeff;
+ float diffuseScatterCoeff;
+ if(/*singleScatter(geoms, numberOfGeoms, intersectionPoint, normal, diffuseDirection, refractedDirection, currMaterial, ran.x, geomIndex, fresnel, singleScatterCoeff)
+ && */diffuseScatter(geoms, numberOfGeoms, intersectionPoint, normal, currMaterial, ran, geomIndex, fresnel, diffuseScatterCoeff))
+ {
+ glm::vec3 lPos = getRandomPointOnCube(geoms[lightIndex[0]], ran.x);
+ diffuseDirection = glm::normalize(lPos - intersectionPoint);
+ r.direction = glm::normalize(calculateRandomDirectionInHemisphere(normal, ran.x, ran.y));//diffuseDirection;
+ r.origin = intersectionPoint + 0.001f * r.direction;
+ color *= (/*singleScatterCoeff +*/ diffuseScatterCoeff);
+ return 1;
+ }
+ }
+ else//Diffuse
+ {
+ r.direction = glm::normalize(calculateRandomDirectionInHemisphere(normal, ran.x, ran.y));
+ r.origin = intersectionPoint + 0.001f * r.direction;
+ }
+ //glm::vec3 icolor = indirectLight(geoms, numberOfGeoms, lightIndex, intersectionPoint, normal, geomIndex, time, currMaterial.color);
+ color *= (currMaterial.color);
+ return 1;
+}
+
+
+__global__ void pathTraceSC(rayPixel* rayPool, int poolSize, cameraData cam, float time, int rayDepth, glm::vec3* colors, staticGeom* geoms,
+ int numberOfGeoms, material* materials, int numberOfMaterials, int* lightIndex, int lightNum, int iteration, int* BMPRed, int* BMPGreen, int* BMPBlue, int BMPWidth, int BMPHeight)
+{
+ int x = (blockIdx.x * blockDim.x) + threadIdx.x;
+ int y = (blockIdx.y * blockDim.y) + threadIdx.y;
+ int index = x + poolSize * y;
+ int t = threadIdx.x;
+ if(index < poolSize){
+ glm::vec3 color;
+ int isContinue = pathTraceIterativeSC(rayPool[index].r, geoms, numberOfGeoms, materials, color, cam, time, x, y, lightIndex, lightNum, BMPRed, BMPGreen, BMPBlue, BMPWidth, BMPHeight);
+
+ if(isContinue != 0)
+ colors[rayPool[index].index] *= color;
+ else
+ colors[rayPool[index].index] = glm::vec3(0,0,0);
+ if(isContinue == 0 || isContinue == 2)
+ rayPool[index].isDone = true;
+ }
+}
+
+__global__ void initializeRayPool(rayPixel* rayPool, glm::vec2 resolution, glm::vec3* colors, cameraData cam, float time)
+{
+ int x = (blockIdx.x * blockDim.x) + threadIdx.x;
+ int y = (blockIdx.y * blockDim.y) + threadIdx.y;
+ int index = x + (y * resolution.x);
+
+ if((x<=resolution.x && y<=resolution.y))
+ {
+ rayPool[index].index = index;
+ rayPool[index].isDone = false;
+ rayPool[index].isFirst = true;
+ rayPool[index].x = x;
+ rayPool[index].y = y;
+ colors[index] = glm::vec3(1,1,1);
+
+ glm::vec3 ran = generateRandomNumberFromThread(cam.resolution, time, x, y);
+ rayPool[index].r = raycastFromCameraKernel(cam.resolution, time, (float)(rayPool[index].x + (float)(1 + ran.x)/1.0f),
+ (float)(rayPool[index].y + (float)(1.0f + ran.y)/ 1.0f), cam.position, cam.view, cam.up, cam.fov);
+#ifdef DOF
+ //for DOP
+ float focalLength = DOF;
+ glm::vec3 rand = generateRandomNumberFromThread(cam.resolution, time * 2, x, y);
+ glm::vec3 aimedPosition = rayPool[index].r.origin + focalLength * rayPool[index].r.direction;
+ glm::vec3 camPosition = glm::vec3(cam.position.x + (float)rand.x, cam.position.y + (float)rand.y, cam.position.z + (float)rand.z);
+ //ray jitterRay;
+ rayPool[index].r.origin = camPosition;
+ rayPool[index].r.direction = glm::normalize(aimedPosition - camPosition);
+#endif
+ }
+}
+
+__global__ void addPreColors(glm::vec3* precolors, glm::vec3* colors, glm::vec2 resolution)
+{
+ int x = (blockIdx.x * blockDim.x) + threadIdx.x;
+ int y = (blockIdx.y * blockDim.y) + threadIdx.y;
+ int index = x + (y * resolution.x);
+
+ if((x<=resolution.x && y<=resolution.y))
+ {
+ precolors[index] = colors[index];
+ }
+}
+
//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, glm::vec3* preColors,
+ int *BMPRed, int *BMPGreen, int *BMPBlue, int BMPSize[2]){
- int traceDepth = 1; //determines how many bounces the raytracer traces
+ cudaEvent_t start, stop;
+ cudaEventCreate(&start);
+ cudaEventCreate(&stop);
+ cudaEventRecord( start, 0);
+
+ int traceDepth = 1; //determines how many bounces the raytracer traces
// set up crucial magic
- int tileSize = 8;
+ int tileSize;
+ tileSize = TITLESIZE;
dim3 threadsPerBlock(tileSize, tileSize);
dim3 fullBlocksPerGrid((int)ceil(float(renderCam->resolution.x)/float(tileSize)), (int)ceil(float(renderCam->resolution.y)/float(tileSize)));
@@ -173,7 +836,20 @@ void cudaRaytraceCore(uchar4* PBOpos, camera* renderCam, int frame, int iteratio
glm::vec3* cudaimage = NULL;
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);
+
+ glm::vec3* cudaPreImage = NULL;
+ cudaMalloc((void**)&cudaPreImage, (int)renderCam->resolution.x*(int)renderCam->resolution.y*sizeof(glm::vec3));
+ cudaMemcpy( cudaPreImage, preColors, (int)renderCam->resolution.x*(int)renderCam->resolution.y*sizeof(glm::vec3), cudaMemcpyHostToDevice);
+#ifdef MOTIONBLUR
+ float p1 = (((float)rand()/(float)RAND_MAX) + 1.0) / 2.0f;
+
+ geoms[6].translations[0].x = p1;
+ glm::mat4 transform = utilityCore::buildTransformationMatrix(geoms[6].translations[0], geoms[6].rotations[0], geoms[6].scales[0]);
+ geoms[6].transforms[0] = utilityCore::glmMat4ToCudaMat4(transform);
+ geoms[6].inverseTransforms[0] = utilityCore::glmMat4ToCudaMat4(glm::inverse(transform));
+#endif
+
//package geometry and materials and sent to GPU
staticGeom* geomList = new staticGeom[numberOfGeoms];
for(int i=0; iups[frame];
cam.fov = renderCam->fov;
- //kernel launches
- for(int bounce = 1; bounce <= 1; ++bounce)
+ std::vector vectorLightIndex;
+ for(int i = 0; i < numberOfGeoms; i++)
+ {
+ if(geomList[i].materialid == 7 || geoms[i].materialid == 8)
+ {
+ vectorLightIndex.push_back(i);
+ }
+ }
+
+ int lightNum = vectorLightIndex.size();
+ int *lightIndex = new int [vectorLightIndex.size()];
+ for(int i = 0; i < vectorLightIndex.size(); i++)
{
- raytraceRay<<>>(renderCam->resolution, (float)iterations, (float)bounce, cam, traceDepth, cudaimage, cudageoms, numberOfGeoms, cudamaterials, numberOfMaterials);
+ lightIndex[i] = vectorLightIndex[i];
}
- sendImageToPBO<<>>(PBOpos, renderCam->resolution, cudaimage);
- //retrieve image from GPU
- cudaMemcpy( renderCam->image, cudaimage, (int)renderCam->resolution.x*(int)renderCam->resolution.y*sizeof(glm::vec3), cudaMemcpyDeviceToHost);
+ int* cudaLightIndex = NULL;
+ cudaMalloc((void**)&cudaLightIndex, lightNum*sizeof(int));
+ cudaMemcpy(cudaLightIndex, lightIndex, lightNum*sizeof(int), cudaMemcpyHostToDevice);
+
+ //size_t size;
+ //cudaDeviceSetLimit(cudaLimitStackSize, 90000*sizeof(float));
+ //cudaDeviceSetLimit(cudaLimitMallocHeapSize, 10000*sizeof(rayPixel));
+ //cudaDeviceGetLimit(&size, cudaLimitStackSize);
+
+
+ //Copy the texture color
+ int* cudaBMPRed = NULL;
+ cudaMalloc((void**)&cudaBMPRed, BMPSize[0]*BMPSize[1]*sizeof(int));
+ cudaMemcpy(cudaBMPRed, BMPRed, BMPSize[0]*BMPSize[1]*sizeof(int), cudaMemcpyHostToDevice);
+
+ int* cudaBMPGreen = NULL;
+ cudaMalloc((void**)&cudaBMPGreen, BMPSize[0]*BMPSize[1]*sizeof(int));
+ cudaMemcpy(cudaBMPGreen, BMPGreen, BMPSize[0]*BMPSize[1]*sizeof(int), cudaMemcpyHostToDevice);
+
+ int* cudaBMPBlue = NULL;
+ cudaMalloc((void**)&cudaBMPBlue, BMPSize[0]*BMPSize[1]*sizeof(int));
+ cudaMemcpy(cudaBMPBlue, BMPBlue, BMPSize[0]*BMPSize[1]*sizeof(int), cudaMemcpyHostToDevice);
+//kernel launches
+#ifdef STREAMCOMPACTION
+ addPreColors<<>>(cudaPreImage, cudaimage, renderCam->resolution);
+
+ //initialize ray pool
+ rayPixel* cudaRayPool = NULL;
+ cudaMalloc((void**)&cudaRayPool, renderCam->resolution.x * renderCam->resolution.y *sizeof(rayPixel));
+ initializeRayPool<<>>(cudaRayPool, renderCam->resolution, cudaimage, cam, (float)iterations);
+ int count = 0;
+
+
+ int poolSize = renderCam->resolution.x * renderCam->resolution.y;
+ tileSize = TITLESIZESC;
+ threadsPerBlock = dim3(tileSize, 1);
+
+ while(poolSize > 0 && count < MAXDEPTH)
+ {
+ fullBlocksPerGrid = dim3((int)ceil(float(poolSize)/float(tileSize)), 1);
+
+ pathTraceSC<<>>(cudaRayPool, poolSize, cam, (float)(iterations*(count +1)), traceDepth, cudaimage, cudageoms,
+ numberOfGeoms, cudamaterial, numberOfMaterials, cudaLightIndex, lightNum, renderCam->iterations, cudaBMPRed, cudaBMPGreen, cudaBMPBlue, BMPSize[0], BMPSize[1]);
+
+ count++;
+ thrust::device_ptr iteratorStart(cudaRayPool);
+ thrust::device_ptr iteratorEnd = iteratorStart + poolSize;
+ iteratorEnd = thrust::remove_if(iteratorStart, iteratorEnd, is_done());
+ poolSize = (int)(iteratorEnd - iteratorStart);
+ }
+ threadsPerBlock = dim3(TITLESIZE, TITLESIZE);
+ fullBlocksPerGrid = dim3((int)ceil(float(renderCam->resolution.x)/float(8)), (int)ceil(float(renderCam->resolution.y)/float(8)));
+ addImageColor<<>>(cudaimage, cudaPreImage, renderCam->resolution);
+ //sendImageToPBOSC<<>>(PBOpos, cudaimage, (float)iterations, renderCam->resolution.x * renderCam->resolution.y, cudaPreImage);
+ sendImageToPBO<<>>(PBOpos, renderCam->resolution, cudaimage, (float)iterations);
+#else
+ pathtraceRay<<>>(renderCam->resolution, (float)iterations, cam, traceDepth, cudaimage, cudageoms,
+ numberOfGeoms, cudamaterial, numberOfMaterials, cudaLightIndex, lightNum, renderCam->iterations, cudaBMPRed, cudaBMPGreen, cudaBMPBlue, BMPSize[0], BMPSize[1]);
+ sendImageToPBO<<>>(PBOpos, renderCam->resolution, cudaimage, (float)iterations);
+#endif
+
+
+ cudaMemcpy( renderCam->image, cudaimage, (int)renderCam->resolution.x*(int)renderCam->resolution.y*sizeof(glm::vec3), cudaMemcpyDeviceToHost);
//free up stuff, or else we'll leak memory like a madman
cudaFree( cudaimage );
cudaFree( cudageoms );
- cudaFree( cudamaterials );
- delete [] geomList;
-
- // make certain the kernel has completed
+ cudaFree( cudamaterial);
+ cudaFree( cudaLightIndex );
+ cudaFree( cudaBMPRed );
+ cudaFree( cudaBMPGreen );
+ cudaFree( cudaBMPBlue );
+#ifdef STREAMCOMPACTION
+ cudaFree( cudaRayPool );
+#endif
+ cudaFree( cudaPreImage );
+ delete geomList;
+
+ // make certain the kernel has completed
cudaThreadSynchronize();
+ cudaEventRecord( stop, 0);
+ cudaEventSynchronize( stop );
+
+ float seconds = 0.0f;
+ cudaEventElapsedTime( &seconds, start, stop);
+
+ printf("time %f \n", seconds);
checkCUDAError("Kernel failed!");
}
diff --git a/src/raytraceKernel.h b/src/raytraceKernel.h
index 5fcf5a3..8641c20 100755
--- a/src/raytraceKernel.h
+++ b/src/raytraceKernel.h
@@ -14,12 +14,23 @@
#include
#include "sceneStructs.h"
+
+#define LIGHT_NUM 1
+#define ANTI_NUM 1
+//#define STREAMCOMPACTION 1
+#define TITLESIZESC 64//this title size is for stream compaction
+#define TITLESIZE 8
+//#define MOTIONBLUR 1
+//#define DOF 16
+#define MAXDEPTH 7
+//#define TEXTUREMAP 6 //Right now only support sphere, the number mean which object you want to texture it
+
#if CUDA_VERSION >= 5000
#include
#else
#include
#endif
-void cudaRaytraceCore(uchar4* pos, camera* renderCam, int frame, int iterations, material* materials, int numberOfMaterials, geom* geoms, int numberOfGeoms);
+void cudaRaytraceCore(uchar4* pos, camera* renderCam, int frame, int iterations, material* materials, int numberOfMaterials, geom* geoms, int numberOfGeoms, glm::vec3* preColors, int *BMPRed, int *BMPGreen, int *BMPBlue, int BMPSize[2]);
#endif
diff --git a/src/scene.cpp b/src/scene.cpp
index 415d627..93081e4 100755
--- a/src/scene.cpp
+++ b/src/scene.cpp
@@ -7,6 +7,7 @@
#include
#include "scene.h"
#include
+#include "tiny_obj_loader.h"
scene::scene(string filename){
cout << "Reading scene from " << filename << " ..." << endl;
@@ -36,13 +37,14 @@ scene::scene(string filename){
int scene::loadObject(string objectid){
int id = atoi(objectid.c_str());
- if(id!=objects.size()){
- cout << "ERROR: OBJECT ID does not match expected number of objects" << endl;
- return -1;
- }else{
+ //if(id!=objects.size()){
+ // cout << "ERROR: OBJECT ID does not match expected number of objects" << endl;
+ //return -1;
+ //}else{
cout << "Loading Object " << id << "..." << endl;
geom newObject;
string line;
+ std::vector triangles;
//load object type
utilityCore::safeGetline(fp_in,line);
@@ -64,6 +66,48 @@ int scene::loadObject(string objectid){
cout << "Creating new mesh..." << endl;
cout << "Reading mesh from " << line << "... " << endl;
newObject.type = MESH;
+
+ //for obj loader
+ std::vector shapes;
+
+ std::string err = tinyobj::LoadObj(shapes, objline.c_str());
+
+ if (!err.empty()) {
+ std::cerr << err << std::endl;
+ exit(1);
+ }
+
+ for(int i = 0; i < shapes[0].mesh.indices.size(); i+=3)
+ {
+ int i1 = shapes[0].mesh.indices[i];
+ int i2 = shapes[0].mesh.indices[i+1];
+ int i3 = shapes[0].mesh.indices[i+2];
+
+ glm::vec3 p1 = glm::vec3(shapes[0].mesh.positions[3 * i1 + 0],
+ shapes[0].mesh.positions[3 * i1 + 1],
+ shapes[0].mesh.positions[3 * i1 + 2]);
+
+ glm::vec3 p2 = glm::vec3(shapes[0].mesh.positions[3 * i2 + 0],
+ shapes[0].mesh.positions[3 * i2 + 1],
+ shapes[0].mesh.positions[3 * i2 + 2]);
+
+ glm::vec3 p3 = glm::vec3(shapes[0].mesh.positions[3 * i3 + 0],
+ shapes[0].mesh.positions[3 * i3 + 1],
+ shapes[0].mesh.positions[3 * i3 + 2]);
+
+ glm::vec3 normal = glm::normalize(glm::cross(
+ glm::vec3(p2) - glm::vec3(p1),
+ glm::vec3(p3) - glm::vec3(p1)));
+ //normals[ia] = normals[ib] = normals[ic] = normal;
+ triangle tri;
+ tri.normal = normal;
+ tri.p1 = p1;
+ tri.p2 = p2;
+ tri.p3 = p3;
+ triangles.push_back(tri);
+ }
+
+ //load_obj(objline.c_str(), vertices, normals, elements, triangles);
}else{
cout << "ERROR: " << line << " is not a valid object type!" << endl;
return -1;
@@ -126,12 +170,24 @@ int scene::loadObject(string objectid){
newObject.transforms[i] = utilityCore::glmMat4ToCudaMat4(transform);
newObject.inverseTransforms[i] = utilityCore::glmMat4ToCudaMat4(glm::inverse(transform));
}
-
+ triangle triTemp;
+ triTemp.normal = triTemp.p1 = triTemp.p2 = triTemp.p3 = glm::vec3(0,0,0);
+ newObject.tri = triTemp;
+ if(newObject.type != MESH)
objects.push_back(newObject);
+ else
+ {
+ for(int i = 0; i < triangles.size(); i++)
+ {
+ geom triObject = newObject;
+ triObject.tri = triangles[i];
+ objects.push_back(triObject);
+ }
+ }
cout << "Loaded " << frameCount << " frames for Object " << objectid << "!" << endl;
return 1;
- }
+ //}
}
int scene::loadCamera(){
@@ -217,6 +273,7 @@ int scene::loadCamera(){
cout << "Loaded " << frameCount << " frames for camera!" << endl;
return 1;
+
}
int scene::loadMaterial(string materialid){
diff --git a/src/sceneStructs.h b/src/sceneStructs.h
index b10f1cf..4996f3e 100755
--- a/src/sceneStructs.h
+++ b/src/sceneStructs.h
@@ -18,6 +18,13 @@ struct ray {
glm::vec3 direction;
};
+struct triangle{
+ glm::vec3 p1;
+ glm::vec3 p2;
+ glm::vec3 p3;
+ glm::vec3 normal;
+};
+
struct geom {
enum GEOMTYPE type;
int materialid;
@@ -27,6 +34,7 @@ struct geom {
glm::vec3* scales;
cudaMat4* transforms;
cudaMat4* inverseTransforms;
+ triangle tri;
};
struct staticGeom {
@@ -37,6 +45,7 @@ struct staticGeom {
glm::vec3 scale;
cudaMat4 transform;
cudaMat4 inverseTransform;
+ triangle tri;
};
struct cameraData {
diff --git a/src/tiny_obj_loader.cc b/src/tiny_obj_loader.cc
new file mode 100644
index 0000000..0ddca38
--- /dev/null
+++ b/src/tiny_obj_loader.cc
@@ -0,0 +1,663 @@
+//
+// Copyright 2012-2013, Syoyo Fujita.
+//
+// Licensed under 2-clause BSD liecense.
+//
+
+//
+// version 0.9.6: Support Ni(index of refraction) mtl parameter.
+// Parse transmittance material parameter correctly.
+// version 0.9.5: Parse multiple group name.
+// Add support of specifying the base path to load material file.
+// version 0.9.4: Initial suupport of group tag(g)
+// version 0.9.3: Fix parsing triple 'x/y/z'
+// version 0.9.2: Add more .mtl load support
+// version 0.9.1: Add initial .mtl load support
+// version 0.9.0: Initial
+//
+
+
+#include
+#include
+#include
+
+#include
+#include
+#include