Browse Source

Added more error checks (during the loading of different rendering stages) and error codes;
Minor fixes

Paul A 5 years ago
parent
commit
05ee8fe85e

+ 14 - 18
.gitignore

@@ -1,22 +1,18 @@
 
-VC/
-
-VC x64/
-
 \.vs/
 
-Builds/x32/
-
-Builds/x64/Debug/
-
-Builds/x64/Debug 64bit/lnk\{4EFA342B-62AB-4145-8CAE-43C91978D51E}\.tmp
-
-Builds/x64/Release 64bit/Praxis3D\.iobj
-
-Builds/x64/Release 64bit/Praxis3D\.ipdb
-
 *.dae
-
-Praxis3D/x64/
-
-Praxis3D/Data/Maps/default_lite backup\.pmap
+*.jpeg
+*.jpg
+*.tga
+*.png
+*.bmp
+*.mtl
+*.pk3
+*.farr
+*.fbx
+*.3ds
+*.nff
+*.tif
+VC x64/
+VC/

+ 1089 - 0
Praxis3D/Data/Maps/default_lite backup.pmap

@@ -0,0 +1,1089 @@
+{
+	"LoadInBackground": "0",
+	"Systems": 
+	{
+		"Graphics": 
+		{
+			"Scene": 
+			{
+				"ModelPoolSize": "30",
+				"PointLightPoolSize": "20",
+				"SpotLightPoolSize": "20"
+			},
+			"Objects": 
+			[
+				{
+					"Type": "Camera",
+					"Name": "Camera 1"
+				},
+				{
+					"Type": "DirectionalLight",
+					"Name": "DirectionalLight 1",
+					"Color": "1.0f, 1.0f, 1.0f",
+					"Direction": "0.006461f, -0.707092f, -0.707092f",
+					"Intensity": "0.5f"
+				},
+				{
+					"Type": "EnvironmentMapStatic",
+					"Position": "0.0f, 0.0f, 0.0f",
+					"Materials": 
+					[
+						{
+							"Filename": "posx.jpg"
+						},
+						{
+							"Filename": "negx.jpg"
+						},
+						{
+							"Filename": "posy.jpg"
+						},
+						{
+							"Filename": "negy.jpg"
+						},
+						{
+							"Filename": "posz.jpg"
+						},
+						{
+							"Filename": "negz.jpg"
+						}
+					]
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "Terrain2",
+					"Position": "-570.0f, 0.0f, 0.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "5.0f, 5.0f, 5.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "20.0f",
+					"Models": 
+					{
+						"Filename": "plane.obj"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "Metal_CleanPaintedWithChips_2k_alb.tga",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						[
+							{
+								"Filename": "Metal_CleanPaintedWithChips_2k_n.tga",
+								"Index": "0"
+							}
+						],
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "Metal_CleanPaintedWithChips_RMHAO3.tga",
+								"Index": "0"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "Plane 1",
+					"Position": "30.0f, 0.0f, 0.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "1.0f, 1.0f, 1.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.04f",
+					"Lighting": "1",
+					"TextureTilingFactor": "10.0f",
+					"Models": 
+					{
+						"Filename": "plane.obj"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "Ground_SmoothRocks_2k_alb.tga",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						[
+							{
+								"Filename": "Ground_SmoothRocks_2k_n.tga",
+								"Index": "0"
+							}
+						],
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "Ground_SmoothRocks_RMHAO.tga",
+								"Index": "0"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "Barrel 1",
+					"Position": "-75.0f, 0.0f, 0.0f",
+					"Rotation": "270.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "2.0f, 2.0f, 2.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "RadioactiveBarrel_01.fbx"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "SciFi_Barrels_Mat_SciFi_Barrels_02_BaseColor.png",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						[
+							{
+								"Filename": "SciFi_Barrels_Mat_SciFi_Barrels_02_Normal.png",
+								"Index": "0"
+							}
+						],
+						"Emissive": 
+						[
+							{
+								"Filename": "SciFi_Barrels_Mat_SciFi_Barrels_02_Emissive.png",
+								"Index": "0"
+							}
+						],
+						"RMHAO": 
+						[
+							{
+								"Filename": "SciFi_Barrels_Mat_SciFi_Barrels_02_RMHAO.png",
+								"Index": "0"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "Tree 1",
+					"Position": "-75.0f, -2.0f, 30.0f",
+					"Rotation": "270.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "10.0f, 10.0f, 10.0f",
+					"AlphaThreshold": "0.0001f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "CocosNucifera_025_100_3698_LOD0.3ds"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "CocosNucifera_BaseColor.png",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						[
+							{
+								"Filename": "CocosNucifera_Normal_OpenGL.png",
+								"Index": "0"
+							}
+						],
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "CocosNucifera_RMHAO.png",
+								"Index": "0"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "Table 1",
+					"Position": "-75.0f, 0.0f, 20.0f",
+					"Rotation": "270.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "0.05f, 0.05f, 0.05f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "Table.FBX"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "Table_BaseColor.tga",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						[
+							{
+								"Filename": "Table_Normal.tga",
+								"Index": "0"
+							}
+						],
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "Table_RMHAO.tga",
+								"Index": "0"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "Cube 1",
+					"Position": "15.0f, 5.0f, 0.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "4.0f, 4.0f, 4.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "cube.obj"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "Ground_SmoothRocks_2k_alb.tga",
+								"Index": "1"
+							}
+						],
+						"Normal": 
+						[
+							{
+								"Filename": "Ground_SmoothRocks_2k_n.tga",
+								"Index": "1"
+							}
+						],
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "Ground_SmoothRocks_RMHAO.tga",
+								"Index": "1"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "sphere 1",
+					"Position": "0.0f, 4.0f, 10.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "5.0f, 5.0f, 5.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "sphereNew4.3DS"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "test_albedo.png",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "test1_RM.png",
+								"Index": "0"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "sphere 2",
+					"Position": "0.0f, 4.0f, 5.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "5.0f, 5.0f, 5.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "sphereNew4.3DS"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "test_albedo.png",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "test2_RM.png",
+								"Index": "0"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "sphere 3",
+					"Position": "0.0f, 4.0f, 0.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "5.0f, 5.0f, 5.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "sphereNew4.3DS"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "test_albedo.png",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "test3_RM.png",
+								"Index": "0"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "sphere 4",
+					"Position": "0.0f, 4.0f, -5.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "5.0f, 5.0f, 5.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "sphereNew4.3DS"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "test_albedo.png",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "test4_RM.png",
+								"Index": "0"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "sphere 5",
+					"Position": "0.0f, 4.0f, -10.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "5.0f, 5.0f, 5.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "sphereNew4.3DS"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "test_albedo.png",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "test5_RM.png",
+								"Index": "0"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "sphere 6",
+					"Position": "0.0f, 4.0f, -15.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "5.0f, 5.0f, 5.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "sphereNew4.3DS"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "test_albedo.png",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "test6_RM.png",
+								"Index": "0"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "light 1",
+					"Position": "-19.2421f, 10.0f, 5.45328f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "0.5f, 0.5f, 0.5f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "sphereNew4.3DS"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "white.png",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						[
+							{
+								"Filename": "white.png",
+								"Index": "0"
+							}
+						],
+						"RMHAO": 
+						{
+						}
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "light 2",
+					"Position": "9.12898f, 7.98369f, 9.59357f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "1.0f, 1.0f, 1.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "sphereNew4.3DS"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						{
+						},
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						{
+						}
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "light 3",
+					"Position": "-6.94746f, 8.59811f, 7.54629f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "1.0f, 1.0f, 1.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "sphereNew4.3DS"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						{
+						},
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						{
+						}
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "light 4",
+					"Position": "60.0f, 3.0f, 60.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "1.0f, 1.0f, 1.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "sphereNew4.3DS"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						{
+						},
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						{
+						}
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "light 5",
+					"Position": "-40.0f, 3.0f, 1.96449f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "1.0f, 1.0f, 1.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "sphereNew4.3DS"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						{
+						},
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						{
+						}
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "light 6",
+					"Position": "-20.0f, 3.0f, -20.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "1.0f, 1.0f, 1.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "sphereNew4.3DS"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						{
+						},
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						{
+						}
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "Terrain1",
+					"Position": "100.0f, -0.5f, 0.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "25000.0f, 25000.0f, 25000.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "10.0f",
+					"Models": 
+					{
+						"Filename": "terrain_plane.obj"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "Ground_SmoothRocks_2k_alb.tga",
+								"Index": "1"
+							}
+						],
+						"Normal": 
+						[
+							{
+								"Filename": "Ground_SmoothRocks_2k_n.tga",
+								"Index": "1"
+							}
+						],
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "defaultRM.png",
+								"Index": "1"
+							}
+						]
+					},
+					"Shaders": 
+					{
+						"FragmentShader": "geometryPassInf.frag",
+						"VertexShader": "geometryPassInf.vert"
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "Skybox 1",
+					"Position": "-117.386f, 11.1996f, -70.2678f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "20000.0f, 20000.0f, 20000.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "0",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "cube_inverted.obj"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "skydome6.png",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						{
+						},
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						{
+						}
+					},
+					"Shaders": 
+					{
+						"FragmentShader": "skybox.frag",
+						"VertexShader": "skybox.vert"
+					}
+				},
+				{
+					"Type": "PointLight",
+					"Name": "PointLight 1",
+					"Attenuation": "0.0f, 0.0f, 1.0f",
+					"Color": "1.0f, 1.0f, 1.0f",
+					"Intensity": "10.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"Position": "-19.2421f, 10.0f, 5.45328f"
+				},
+				{
+					"Type": "PointLight",
+					"Name": "PointLight 2",
+					"Attenuation": "0.0f, 0.0f, 1.0f",
+					"Color": "1.0f, 1.0f, 1.0f",
+					"Intensity": "10.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"Position": "9.12898f, 7.98369f, 9.59357f"
+				},
+				{
+					"Type": "PointLight",
+					"Name": "PointLight 3",
+					"Attenuation": "0.0f, 0.0f, 1.0f",
+					"Color": "1.0f, 1.0f, 1.0f",
+					"Intensity": "10.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"Position": "-6.94746f, 8.59811f, 7.54629f"
+				},
+				{
+					"Type": "PointLight",
+					"Name": "PointLight 45",
+					"Attenuation": "0.0f, 0.0f, 1.0f",
+					"Color": "1.0f, 1.0f, 1.0f",
+					"Intensity": "100.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"Position": "-100.0f, 10.0f, 20.0f"
+				},
+				{
+					"Type": "PointLight",
+					"Name": "Barrel 1 Point Light",
+					"Attenuation": "0.0f, 0.0f, 1.0f",
+					"Color": "0.0f, 1.0f, 0.0f",
+					"Intensity": "0.1f",
+					"OffsetPosition": "0.0f, 1.8f, 0.0f",
+					"Position": "-75.0f, 0.0f, 0.0f"
+				},
+				{
+					"Type": "SpotLight",
+					"Name": "SpotLight 1",
+					"Attenuation": "0.0f, 0.0f, 1.0f",
+					"CutoffAngle": "60.0f",
+					"Color": "1.0f, 1.0f, 1.0f",
+					"Direction": "-1.0f, 0.0f, 0.0f",
+					"Intensity": "200.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Position": "60.0f, 3.0f, 60.0f"
+				},
+				{
+					"Type": "SpotLight",
+					"Name": "SpotLight 2",
+					"Attenuation": "0.0f, 0.0f, 1.0f",
+					"CutoffAngle": "60.0f",
+					"Color": "0.0f, 1.0f, 0.0f",
+					"Direction": "0.577353f, 0.577173f, 0.577525f",
+					"Intensity": "200.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Position": "-40.0f, 3.0f, 1.96449f"
+				},
+				{
+					"Type": "SpotLight",
+					"Name": "SpotLight 3",
+					"Attenuation": "0.0f, 0.0f, 1.0f",
+					"CutoffAngle": "60.0f",
+					"Color": "1.0f, 0.0f, 0.0f",
+					"Direction": "0.577353f, 0.577173f, 0.577525f",
+					"Intensity": "200.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Position": "-40.0f, 3.0f, 1.96449f"
+				},
+				{
+					"Type": "SpotLight",
+					"Name": "SpotLight 3",
+					"Attenuation": "0.0f, 0.0f, 1.0f",
+					"CutoffAngle": "60.0f",
+					"Color": "1.0f, 1.0f, 1.0f",
+					"Direction": "0.707107f, 0.0f, 0.707107f",
+					"Intensity": "200.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Position": "-20.0f, 3.0f, -20.0f"
+				}
+			]
+		},
+		"Scripting": 
+		{
+			"Scene": 
+			{
+			},
+			"Objects": 
+			[
+				{
+					"Type": "FreeCamera",
+					"Name": "Free Camera 1",
+					"Position": "-100.0f, 10.0f, 0.0f",
+					"Angle": "25.5279f, -20.56376f",
+					"Speed": "2.0f",
+					"SprintSpeed": "50.0f",
+					"LowerLimit": "0.0f",
+					"UpperLimit": "500.0f",
+					"Keybindings": 
+					{
+						"ForwardKey": "26",
+						"BackwardKey": "22",
+						"LeftStrafeKey": "4",
+						"RightStrafeKey": "7",
+						"SprintKey": "225"
+					}
+				},
+				{
+					"Type": "DebugUIScript",
+					"Name": "Debug UI Script 1",
+					"Keybindings": 
+					{
+						"DebugCaptureMouseKey": "67",
+						"DebugFullscreenKey": "66",
+						"DebugVertSyncKey": "68",
+						"CloseKey": "41"
+					}
+				},
+				{
+					"Type": "DebugMoveScript",
+					"Name": "Debug Move Script 1",
+					"Position": "0.0f, 5.0f, 0.0f",
+					"Radius": "70.0f",
+					"Rotation": "0.0f, 1.0f, 0.0f",
+					"Speed": "20.0f"
+				},
+				{
+					"Type": "DebugRotateScript",
+					"Name": "Debug Rotate Script 1",
+					"Axis": "0.0f, 1.0f, 0.0f",
+					"Rotation": "1.0f, 0.0f, 0.0f",
+					"Speed": "100.0f"
+				},
+				{
+					"Type": "DebugRotateScript",
+					"Name": "Debug Rotate Script 2",
+					"Axis": "0.0f, 1.0f, 0.0f",
+					"Rotation": "-1.0f, 0.0f, 0.0f",
+					"Speed": "100.0f"
+				},
+				{
+					"Type": "WorldEditScript",
+					"Name": "World Edit Script 1",
+					"Speed": "2.5f",
+					"SprintSpeed": "25.0f",
+					"Keybindings": 
+					{
+						"ForwardKey": "96",
+						"BackwardKey": "90",
+						"UpKey": "95",
+						"DownKey": "89",
+						"LeftKey": "92",
+						"RightKey": "94",
+						"NextKey": "85",
+						"PreviousKey": "84",
+						"SprintKey": "225"
+					}
+				},
+				{
+					"Type": "SolarTimeScript",
+					"Name": "Solar Time Script 1",
+					"Hours": "12",
+					"Seconds": "0.0f",
+					"Latitude": "54.0f",
+					"Longitude": "54.0f",
+					"DayOfYear": "1",
+					"TimeMultiplier": "10.0f",
+					"OffsetPosition": "25.0f"
+				}
+			]
+		}
+	},
+	"ObjectLinks": 
+	[
+		{
+			"Subject": "Free Camera 1",
+			"Observer": "Camera 1"
+		},
+		{
+			"Subject": "Free Camera 1",
+			"Observer": "Skybox 1"
+		},
+		{
+			"Subject": "Solar Time Script 1",
+			"Observer": "DirectionalLight 1"
+		},
+		{
+			"Subject": "Debug Move Script 1",
+			"Observer": "PointLight 1"
+		},
+		{
+			"Subject": "Debug Move Script 1",
+			"Observer": "light 1"
+		},
+		{
+			"Subject": "Debug Rotate Script 1",
+			"Observer": "SpotLight 2"
+		},
+		{
+			"Subject": "Debug Rotate Script 2",
+			"Observer": "SpotLight 3"
+		},
+		{
+			"Subject": "Barrel 1",
+			"Observer": "Barrel 1 Point Light"
+		},
+		{
+			"Subject": "PointLight 2",
+			"Observer": "light 2"
+		},
+		{
+			"Subject": "PointLight 3",
+			"Observer": "light 3"
+		},
+		{
+			"Subject": "SpotLight 1",
+			"Observer": "light 4"
+		},
+		{
+			"Subject": "SpotLight 2",
+			"Observer": "light 5"
+		},
+		{
+			"Subject": "SpotLight 3",
+			"Observer": "light 6"
+		}
+	]
+}

+ 123 - 2
Praxis3D/Data/Maps/default_lite.pmap

@@ -49,6 +49,127 @@
 						}
 					]
 				},
+				{
+					"Type": "ModelObject",
+					"Name": "Terrain 1",
+					"Position": "0.0f, 50.0f, 0.0f",
+					"Rotation": "270.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "25.0f, 25.0f, 6.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "terrain1_UV.3ds"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "ground_FreshTilledDirt_2k_alb.tga",
+								"Index": "0"
+							}
+						],
+						"Normal": 
+						[
+							{
+								"Filename": "ground_FreshTilledDirt_2k_nY+.tga",
+								"Index": "0"
+							}
+						],
+						"Emissive": 
+						{
+						},
+						"RMHAO": 
+						[
+							{
+								"Filename": "Ground_SmoothRocks_RMHAO.tga",
+								"Index": "0"
+							}
+						]
+					}
+				},
+				{
+					"Type": "ModelObject",
+					"Name": "Tank 1",
+					"Position": "-100.0f, 5.0f, 0.0f",
+					"Rotation": "0.0f, 0.0f, 0.0f",
+					"OffsetPosition": "0.0f, 0.0f, 0.0f",
+					"OffsetRotation": "0.0f, 0.0f, 0.0f",
+					"Scale": "10.0, 10.0f, 10.0f",
+					"AlphaThreshold": "0.0f",
+					"HeightScale": "0.0f",
+					"Lighting": "1",
+					"TextureTilingFactor": "1.0f",
+					"Models": 
+					{
+						"Filename": "model.dae"
+					},
+					"Materials": 
+					{
+						"Diffuse": 
+						[
+							{
+								"Filename": "hull_albedo.jpg",
+								"Index": "0"
+							},
+							{
+								"Filename": "turret_albedo.jpg",
+								"Index": "1"
+							},
+							{
+								"Filename": "wheels_albedo.jpg",
+								"Index": "2"
+							},
+							{
+								"Filename": "track_albedo.jpg",
+								"Index": "3"
+							}
+						],
+						"Normal": 
+						[
+							{
+								"Filename": "hull_normal.jpg",
+								"Index": "0"
+							},
+							{
+								"Filename": "turret_normal.jpg",
+								"Index": "1"
+							},
+							{
+								"Filename": "wheels_normal.jpg",
+								"Index": "2"
+							},
+							{
+								"Filename": "track_normal.jpg",
+								"Index": "3"
+							}
+						],
+						"RMHAO": 
+						[
+							{
+								"Filename": "hull_RMHAO.jpg",
+								"Index": "0"
+							},
+							{
+								"Filename": "turret_RMHAO.jpg",
+								"Index": "1"
+							},
+							{
+								"Filename": "wheels_RMHAO.jpg",
+								"Index": "2"
+							},
+							{
+								"Filename": "track_RMHAO.jpg",
+								"Index": "3"
+							}
+						]
+					}
+				},
 				{
 					"Type": "ModelObject",
 					"Name": "Terrain2",
@@ -1019,7 +1140,7 @@
 				{
 					"Type": "SolarTimeScript",
 					"Name": "Solar Time Script 1",
-					"Hours": "15",
+					"Hours": "17",
 					"Minutes": "0",
 					"Seconds": "0.0f",
 					"Year": "2018",
@@ -1028,7 +1149,7 @@
 					"TimeZone": "3",
 					"Latitude": "54.7f",
 					"Longitude": "25.3f",
-					"TimeMultiplier": "300.0f",
+					"TimeMultiplier": "150.0f",
 					"OffsetPosition": "25.0f"
 				}
 			]

+ 2 - 2
Praxis3D/Data/Shaders/geometryPass.vert

@@ -42,7 +42,7 @@ void main(void)
 	
 	// Multiply texture coordinates by the tiling factor. The higher the factor, the denser the tiling
 	texCoord = textureCoord * textureTilingFactor;
-		
+	
 	// Compute TBN matrix
     vec3 T = normalize(mat3(modelMat) * vertexTangent);
     vec3 B = normalize(mat3(modelMat) * vertexBitangent);
@@ -52,6 +52,6 @@ void main(void)
 	
 	tangentCameraPos = TBN2 * cameraPosVec;
 	tangentFragPos = TBN2 * fragPos;
-		
+	
 	gl_Position = MVP * vec4(vertexPosition, 1.0);
 }

+ 1 - 0
Praxis3D/Data/Shaders/hdrMappingPass.frag

@@ -34,6 +34,7 @@ float calcLuma(vec3 p_color)
 // by making overall brightness match the average intended brightness (eyeAdaptionIntBrightness)
 vec3 brightnessMapping(vec3 p_color, float p_exposure)
 {
+	//return clamp(p_color * (eyeAdaptionIntBrightness / p_exposure), vec3(0.0), vec3(10.0));
 	return p_color * clamp(eyeAdaptionIntBrightness / p_exposure, MIN_INTENDED_BRIGHTNESS, MAX_INTENDED_BRIGHTNESS);
 }
 

+ 8 - 5
Praxis3D/Data/Shaders/hdrMappingPass.vert

@@ -41,8 +41,9 @@ float calcLuma(vec3 p_color)
 
 void main(void) 
 {
-	#ifdef ENABLE_HDR
+	//#ifdef ENABLE_HDR
 	
+	// Only do once per draw call
 	if(gl_VertexID == 0)
 	{
 		// Get maximum mipmap level (1x1) of a framebuffer
@@ -50,14 +51,16 @@ void main(void)
 		// Get the current (previous frame) average brightness
 		float avgBrightnessPrevFrame = calcLuma(textureLod(finalColorMap, vec2(0.5), exposureMipmapLevel - 3).xyz);
 		// Perform a linear interpolation between current and previous brightness based on delta time
-		screenBrightness = mix(screenBrightness, avgBrightnessPrevFrame, deltaTimeS / eyeAdaptionRate);
+		//screenBrightness = mix(screenBrightness, avgBrightnessPrevFrame, deltaTimeS / eyeAdaptionRate);
+		//screenBrightness = mix(screenBrightness, avgBrightnessPrevFrame, smoothstep(0.0, 0.1, deltaTimeS));
+		screenBrightness = avgBrightnessPrevFrame;
 	}
-	#else
+	//#else
 	
 	// Set the average brightness to 0.5 so it does not affect the scene
-	screenBrightness = 0.5;
+	//screenBrightness = 0.5;
 	
-	#endif
+	//#endif
 	
 	// Send the average brightness value to the fragment shader
 	avgBrightness = screenBrightness;

+ 4 - 1
Praxis3D/Data/Shaders/lightPass.frag

@@ -230,7 +230,10 @@ void main(void)
 		vec3 dirLightColor = mix(g_sunSetColor, g_sunNoonColor, dirLightFactorSqrt);
 		float dirLightIntensity = directionalLight.m_intensity * mix(g_sunSetIntensityMod, g_sunNoonIntensityMod, dirLightFactorSqrt);
 	
-		// Declare final color of the fragment and add directional light to it
+		// Add ambient lighting
+		finalLightColor += diffuseColor * dirLightIntensity * 0.003;
+	
+		// Add directional lighting
 		finalLightColor += calcLightColor(
 			diffuseColor, 
 			normal, 

+ 4 - 4
Praxis3D/Data/config.ini

@@ -1,12 +1,12 @@
 window_position_x 250
 window_position_y 60
-window_size_windowed_x 1600
-window_size_windowed_y 900
+window_size_windowed_x 1024
+window_size_windowed_y 768
 window_size_fullscreen_x 1920
 window_size_fullscreen_y 1080
 fullscreen 0
 fullscreen_borderless 1
-gl_context_major_version 4
+gl_context_major_version 3
 gl_context_minor_version 3
 vertical_sync 0
 default_texture default.png
@@ -26,4 +26,4 @@ atm_scattering_ground_frag_shader atmosphericScatteringPass_ground_simple.frag
 lens_flare_ghost_threshold 2.0
 lens_flare_halo_threshold 2.0
 lens_flare_halo_radius 0.55
-lens_flare_ghost_count 8
+lens_flare_ghost_count 6

+ 41 - 30
Praxis3D/Data/error-strings-eng.data

@@ -1,63 +1,74 @@
 {
 	"Error Codes":
 	{
-		"Undefined"					: "Undefined",
-		"Success"					: "Succeed",
-		"Failure"					: "Failed",
+		"Undefined"			: "Undefined",
+		"Success"			: "Succeed",
+		"Failure"			: "Failed",
+		"Initialize_success"		: "Has been initialized",
+		"Initialize_failure"		: "Failed to initialized",
 		"Destroy_obj_not_found"		: "Destruction: object not found",
-		"Glew_failed"				: "OpenGL Extension Wrangler Library has failed to initialize",
-		"Ifstream_failed"			: "Unable to read input file stream",
+		"Glew_failed"			: "OpenGL Extension Wrangler Library has failed to initialize",
+		"Ifstream_failed"		: "Unable to read input file stream",
 		"Clock_QueryFrequency"		: "Unable to query the clock frequency",
 		"Framebuffer_failed"		: "Framebuffer has failed to load",
 		"Geometrybuffer_failed"		: "Geometry buffer has failed to load",
 		"AssimpScene_failed"		: "Assimp scene has failed to load",
-		"ObjectPool_full"			: "Object pool overflow",
+		"ObjectPool_full"		: "Object pool overflow",
 		"Property_no_filename"		: "No filename specified",
 		"Shader_attach_failed"		: "Attaching shaders to GPU program has failed",
 		"Shader_compile_failed"		: "Shader compilation from source code has failed to load",
 		"Shader_creation_failed"	: "Shader handle creation has failed",
 		"Shader_link_failed"		: "Shader linking has failed",
 		"Shader_loading_failed"		: "Shader has failed to load",
-		"Texture_not_found"			: "Texture was not found",
-		"Texture_empty"				: "Texture data was not found",
+		"Texture_not_found"		: "Texture was not found",
+		"Texture_empty"			: "Texture data was not found",
 		"Invalid_num_vid_displays"	: "Invalid number of video displays",
 		"SDL_video_init_failed"		: "SDL Video has failed to initialize",
-		"SDL_vsync_failed"			: "Failed to change vertical synchronization mode",
+		"SDL_vsync_failed"		: "Failed to change vertical synchronization mode",
 		"Window_creation_failed"	: "Unable to create a window"
 	},
 	"Error Sources":
 	{
 		"Source_Unknown"		: "Unknown",
 		"Source_General"		: "General",
-		"Source_Engine"			: "Engine",
-		"Source_Renderer"		: "Renderer",
-		"Source_Scripting"		: "Scripting System",
+		"Source_AtmScatteringPass"	: "Atmosphere Scattering Rendering Pass",
+		"Source_BloomCompositePass"	: "Bloom Effect Composite Rendering Pass",
+		"Source_BloomPass"		: "Bloom Effect Rendering Pass",
+		"Source_BlurPass"		: "Blur Effect Rendering Pass",
  		"Source_Config"			: "Configuration",
-		"Source_ConfigLoader"	: "Config Loader",
-		"Source_TextureLoader"	: "Texture Loader",
-		"Source_ModelLoader"	: "Model Loader",
-		"Source_ShaderLoader"	: "Shader Loader",
+		"Source_ConfigLoader"		: "Config Loader",
+		"Source_Engine"			: "Engine",
 		"Source_FileLoader"		: "File Loader",
-		"Source_SceneLoader"	: "Scene Loader",
-		"Source_LightingPass"	: "Lighting Rendering Pass",
-		"Source_GeometryBuffer"	: "Geometry Buffer",
-		"Source_GeometryPass"	: "Geometry Rendering Pass",
-		"Source_GraphicsObject"	: "Graphics Object",
 		"Source_FinalPass"		: "Final Rendering Pass",
-		"Source_ReflectionPass"	: "Reflection Rendering Pass",
-		"Source_ScriptObject"	: "Script Object",
-		"Source_PlayerObject"	: "Player Object",
 		"Source_GameObject"		: "Game Object",
+		"Source_GeometryBuffer"		: "Geometry Buffer",
+		"Source_GeometryPass"		: "Geometry Rendering Pass",
+		"Source_GraphicsObject"		: "Graphics Object",
+		"Source_HdrMappingPass"		: "HDR Mapping Rendering Pass",
+		"Source_LensFlareCompositePass"	: "Lense Flare Effect Composite Rendering Pass",
+		"Source_LensFlarePass"		: "Lense Flare Effect Rendering Pass",
+		"Source_LightObject"		: "Light Object",
+		"Source_LightingPass"		: "Lighting Rendering Pass",
+		"Source_ModelLoader"		: "Model Loader",
+		"Source_PlayerObject"		: "Player Object",
+		"Source_PostProcessPass"	: "Post-process rendering pass",
+		"Source_PropertyLoader"		: "Property Loader",
+		"Source_ReflectionPass"		: "Reflection Rendering Pass",
+		"Source_Renderer"		: "Renderer",
+		"Source_SceneLoader"		: "Scene Loader",
+		"Source_Scripting"		: "Scripting System",
+		"Source_ScriptObject"		: "Script Object",
+		"Source_ShaderLoader"		: "Shader Loader",
 		"Source_SkyObject"		: "Sky Object",
-		"Source_LightObject"	: "Light Object",
-		"Source_PropertyLoader"	: "Property Loader",
+		"Source_SkyPass"		: "Sky Rendering Pass",
+		"Source_TextureLoader"		: "Texture Loader",
 		"Source_Window"			: "Window System"
 	},
 	"Error Types":
 	{
-		"Info"					: "Info",
-		"Warning"				: "Warning",
-		"Error"					: "Error",
-		"FatalError"			: "Fatal Error"
+		"Info"			: "Info",
+		"Warning"		: "Warning",
+		"Error"			: "Error",
+		"FatalError"		: "Fatal Error"
 	}
 }

+ 10 - 9
Praxis3D/Praxis3D.vcxproj

@@ -37,58 +37,58 @@
   <PropertyGroup Label="Globals">
     <ProjectGuid>{A97875DA-A9E8-4B91-928C-8F0CE88581B9}</ProjectGuid>
     <RootNamespace>Praxis3D</RootNamespace>
-    <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
     <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug 64bit|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
     <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
     <WholeProgramOptimization>true</WholeProgramOptimization>
     <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release 64bit|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
     <WholeProgramOptimization>true</WholeProgramOptimization>
     <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
     <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug 64bit|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
     <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
     <WholeProgramOptimization>true</WholeProgramOptimization>
     <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release 64bit|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v142</PlatformToolset>
     <WholeProgramOptimization>true</WholeProgramOptimization>
     <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
@@ -205,6 +205,7 @@
       <SDLCheck>true</SDLCheck>
       <PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <SuppressStartupBanner>true</SuppressStartupBanner>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <GenerateDebugInformation>true</GenerateDebugInformation>

+ 6 - 0
Praxis3D/Praxis3D.vcxproj.user

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ShowAllFiles>false</ShowAllFiles>
+  </PropertyGroup>
+</Project>

BIN
Praxis3D/Praxis3D1.rc


+ 6 - 0
Praxis3D/Source/AtmScatteringPass.h

@@ -112,6 +112,12 @@ public:
 		// Queue atmosphere parameters buffer to be created
 		m_renderer.queueForLoading(m_atmParamBuffer);
 
+		// Check for errors and log either a successful or a failed initialization
+		if(returnError == ErrorCode::Success)
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_success, ErrorSource::Source_AtmScatteringPass);
+		else
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_failure, ErrorSource::Source_AtmScatteringPass);
+
 		return returnError;
 	}
 

+ 6 - 0
Praxis3D/Source/BlurPass.h

@@ -50,6 +50,12 @@ public:
 		else
 			returnError = shaderError;
 		
+		// Check for errors and log either a successful or a failed initialization
+		if(returnError == ErrorCode::Success)
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_success, ErrorSource::Source_BlurPass);
+		else
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_failure, ErrorSource::Source_BlurPass);
+
 		return returnError;
 	}
 

+ 24 - 13
Praxis3D/Source/ErrorCodes.h

@@ -36,6 +36,8 @@ DECLARE_ENUM(ErrorType, ERROR_TYPES)
     Code(Undefined,) \
     Code(Success,) \
     Code(Failure,) \
+    Code(Initialize_success,) \
+    Code(Initialize_failure,) \
 	/* General engine errors */\
     Code(Destroy_obj_not_found,) \
     Code(Glew_failed,) \
@@ -73,28 +75,37 @@ DECLARE_ENUM(ErrorCode, ERROR_CODES)
 #define ERROR_SOURCE(Code) \
     Code(Source_Unknown,) \
     Code(Source_General,) \
-    Code(Source_Engine,) \
-    Code(Source_Renderer,) \
-    Code(Source_Scripting,) \
+    Code(Source_AtmScatteringPass,) \
+    Code(Source_BloomCompositePass,) \
+    Code(Source_BloomPass,) \
+    Code(Source_BlurPass,) \
     Code(Source_Config,) \
     Code(Source_ConfigLoader,) \
-    Code(Source_TextureLoader,) \
-    Code(Source_ModelLoader,) \
-    Code(Source_ShaderLoader,) \
+    Code(Source_Engine,) \
     Code(Source_FileLoader,) \
-    Code(Source_SceneLoader,) \
-    Code(Source_LightingPass,) \
+    Code(Source_FinalPass,) \
+    Code(Source_GameObject,) \
     Code(Source_GeometryBuffer,) \
     Code(Source_GeometryPass,) \
     Code(Source_GraphicsObject,) \
-    Code(Source_FinalPass,) \
+    Code(Source_HdrMappingPass,) \
+    Code(Source_LensFlareCompositePass,) \
+    Code(Source_LensFlarePass,) \
+    Code(Source_LightObject,) \
+    Code(Source_LightingPass,) \
+    Code(Source_ModelLoader,) \
+    Code(Source_PlayerObject,) \
+    Code(Source_PostProcessPass,) \
+    Code(Source_PropertyLoader,) \
     Code(Source_ReflectionPass,) \
+    Code(Source_Renderer,) \
+    Code(Source_SceneLoader,) \
+    Code(Source_Scripting,) \
     Code(Source_ScriptObject,) \
-    Code(Source_PlayerObject,) \
-    Code(Source_GameObject,) \
+    Code(Source_ShaderLoader,) \
     Code(Source_SkyObject,) \
-    Code(Source_LightObject,) \
-    Code(Source_PropertyLoader,) \
+    Code(Source_SkyPass,) \
+    Code(Source_TextureLoader,) \
     Code(Source_Window,) \
     Code(Source_NumberOfErrorSources,) 
 DECLARE_ENUM(ErrorSource, ERROR_SOURCE)

+ 38 - 0
Praxis3D/Source/ErrorHandler.cpp

@@ -25,6 +25,8 @@ ErrorHandler::ErrorHandler()
 	AssignErrorType(Undefined, Warning);
 	AssignErrorType(Success, Info);
 	AssignErrorType(Failure, Warning);
+	AssignErrorType(Initialize_success, Info);
+	AssignErrorType(Initialize_failure, Info);
 	AssignErrorType(Destroy_obj_not_found, Warning);
 	AssignErrorType(Glew_failed, FatalError);
 	AssignErrorType(Ifstream_failed, Warning);
@@ -73,6 +75,42 @@ ErrorHandler::ErrorHandler()
 	m_errHashmap[GetString(Source_PropertyLoader)]	= NumberOfErrorCodes + Source_PropertyLoader;
 	m_errHashmap[GetString(Source_Window)]			= NumberOfErrorCodes + Source_Window;
 
+	
+    m_errHashmap[GetString(Source_Unknown)]						= NumberOfErrorCodes + Source_Unknown;
+    m_errHashmap[GetString(Source_General)]						= NumberOfErrorCodes + Source_General;
+    m_errHashmap[GetString(Source_AtmScatteringPass)]			= NumberOfErrorCodes + Source_AtmScatteringPass;
+    m_errHashmap[GetString(Source_BloomCompositePass)]			= NumberOfErrorCodes + Source_BloomCompositePass;
+    m_errHashmap[GetString(Source_BloomPass)]					= NumberOfErrorCodes + Source_BloomPass;
+	m_errHashmap[GetString(Source_BlurPass)]					= NumberOfErrorCodes + Source_BlurPass;
+    m_errHashmap[GetString(Source_Config)]						= NumberOfErrorCodes + Source_Config;
+    m_errHashmap[GetString(Source_ConfigLoader)]				= NumberOfErrorCodes + Source_ConfigLoader;
+    m_errHashmap[GetString(Source_Engine)]						= NumberOfErrorCodes + Source_Engine;
+    m_errHashmap[GetString(Source_FileLoader)]					= NumberOfErrorCodes + Source_FileLoader;
+    m_errHashmap[GetString(Source_FinalPass)]					= NumberOfErrorCodes + Source_FinalPass;
+    m_errHashmap[GetString(Source_GameObject)]					= NumberOfErrorCodes + Source_GameObject;
+    m_errHashmap[GetString(Source_GeometryBuffer)]				= NumberOfErrorCodes + Source_GeometryBuffer;
+    m_errHashmap[GetString(Source_GeometryPass)]				= NumberOfErrorCodes + Source_GeometryPass;
+    m_errHashmap[GetString(Source_GraphicsObject)]				= NumberOfErrorCodes + Source_GraphicsObject;
+    m_errHashmap[GetString(Source_HdrMappingPass)]				= NumberOfErrorCodes + Source_HdrMappingPass;
+    m_errHashmap[GetString(Source_LensFlareCompositePass)]		= NumberOfErrorCodes + Source_LensFlareCompositePass;
+    m_errHashmap[GetString(Source_LensFlarePass)]				= NumberOfErrorCodes + Source_LensFlarePass;
+    m_errHashmap[GetString(Source_LightObject)]					= NumberOfErrorCodes + Source_LightObject;
+    m_errHashmap[GetString(Source_LightingPass)]				= NumberOfErrorCodes + Source_LightingPass;
+    m_errHashmap[GetString(Source_ModelLoader)]					= NumberOfErrorCodes + Source_ModelLoader;
+    m_errHashmap[GetString(Source_PlayerObject)]				= NumberOfErrorCodes + Source_PlayerObject;
+    m_errHashmap[GetString(Source_PostProcessPass)]				= NumberOfErrorCodes + Source_PostProcessPass;
+    m_errHashmap[GetString(Source_PropertyLoader)]				= NumberOfErrorCodes + Source_PropertyLoader;
+    m_errHashmap[GetString(Source_ReflectionPass)]				= NumberOfErrorCodes + Source_ReflectionPass;
+    m_errHashmap[GetString(Source_Renderer)]					= NumberOfErrorCodes + Source_Renderer;
+    m_errHashmap[GetString(Source_SceneLoader)]					= NumberOfErrorCodes + Source_SceneLoader;
+    m_errHashmap[GetString(Source_Scripting)]					= NumberOfErrorCodes + Source_Scripting;
+    m_errHashmap[GetString(Source_ScriptObject)]				= NumberOfErrorCodes + Source_ScriptObject;
+    m_errHashmap[GetString(Source_ShaderLoader)]				= NumberOfErrorCodes + Source_ShaderLoader;
+    m_errHashmap[GetString(Source_SkyObject)]					= NumberOfErrorCodes + Source_SkyObject;
+    m_errHashmap[GetString(Source_SkyPass)]						= NumberOfErrorCodes + Source_SkyPass;
+    m_errHashmap[GetString(Source_TextureLoader)]				= NumberOfErrorCodes + Source_TextureLoader;
+    m_errHashmap[GetString(Source_Window)]						= NumberOfErrorCodes + Source_Window;
+
 	// Add error types to the hash map, and offset them by number of error codes and error sources, because they share the same hash map
 	m_errHashmap[GetString(Info)]		= NumberOfErrorCodes + Source_NumberOfErrorSources + Info;
 	m_errHashmap[GetString(Warning)]	= NumberOfErrorCodes + Source_NumberOfErrorSources + Warning;

+ 7 - 1
Praxis3D/Source/FinalPass.h

@@ -34,6 +34,12 @@ public:
 			m_renderer.queueForLoading(*m_shaderFinalPass);
 		}
 		
+		// Check for errors and log either a successful or a failed initialization
+		if(returnError == ErrorCode::Success)
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_success, ErrorSource::Source_FinalPass);
+		else
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_failure, ErrorSource::Source_FinalPass);
+
 		return returnError;
 	}
 
@@ -60,7 +66,7 @@ public:
 		if(Config::graphicsVar().eye_adaption)
 		{
 			// Generate mipmaps for the final buffer, for use in tone mapping
-			m_renderer.m_backend.getGeometryBuffer()->generateMipmap(GeometryBuffer::GBufferFinal);
+			//m_renderer.m_backend.getGeometryBuffer()->generateMipmap(GeometryBuffer::GBufferFinal);
 		}
 
 		// Bind final texture for reading so it can be accessed in the shaders

+ 8 - 5
Praxis3D/Source/GeometryPass.h

@@ -30,6 +30,14 @@ public:
 		{
 			// Queue the shaders to be loaded to GPU
 			m_renderer.queueForLoading(*m_shaderGeometry);
+
+			// Log a successful initialization
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_success, ErrorSource::Source_GeometryPass);
+		}
+		else
+		{
+			// Log a failed initialization
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_failure, ErrorSource::Source_GeometryPass);
 		}
 
 		return returnError;
@@ -77,11 +85,6 @@ public:
 				p_sceneObjects.m_customShaderObjects[objIndex]->m_shader->getShaderHandle(),
 				p_sceneObjects.m_customShaderObjects[objIndex]->m_shader->getUniformUpdater(),
 				m_renderer.m_viewProjMatrix);
-
-				//queueForDrawing(*p_sceneObjects.m_customShaderObjects[objIndex], 
-				//				p_sceneObjects.m_customShaderObjects[objIndex]->m_shader->getShaderHandle(),
-				//				p_sceneObjects.m_customShaderObjects[objIndex]->m_shader->getUniformUpdater(),
-				//				viewProjMatrix);
 		}
 
 		// Pass all the draw commands to be executed

+ 7 - 1
Praxis3D/Source/HdrMappingPass.h

@@ -52,6 +52,12 @@ public:
 
 		// Queue HDR buffer to be created
 		m_renderer.queueForLoading(m_HDRSSBuffer);
+		
+		// Check for errors and log either a successful or a failed initialization
+		if(returnError == ErrorCode::Success)
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_success, ErrorSource::Source_HdrMappingPass);
+		else
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_failure, ErrorSource::Source_HdrMappingPass);
 
 		return returnError;
 	}
@@ -63,7 +69,7 @@ public:
 		if(Config::graphicsVar().eye_adaption)
 		{
 			// Generate mipmaps for the final buffer, for use in tone mapping
-			//m_renderer.m_backend.getGeometryBuffer()->generateMipmap(GeometryBuffer::GBufferFinal);
+			m_renderer.m_backend.getGeometryBuffer()->generateMipmap(GeometryBuffer::GBufferFinal);
 		}
 
 		p_renderPassData.setEmissiveInputMap(GeometryBuffer::GBufferDiffuse);

+ 6 - 0
Praxis3D/Source/LenseFlareCompositePass.h

@@ -53,6 +53,12 @@ public:
 		m_renderer.queueForLoading(m_lensFlareDirt);
 		m_renderer.queueForLoading(m_lenseFlareStarburst);
 
+		// Check for errors and log either a successful or a failed initialization
+		if(returnError == ErrorCode::Success)
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_success, ErrorSource::Source_LensFlareCompositePass);
+		else
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_failure, ErrorSource::Source_LensFlareCompositePass);
+
 		return returnError;
 	}
 

+ 6 - 0
Praxis3D/Source/LenseFlarePass.h

@@ -68,6 +68,12 @@ public:
 		
 		// Queue lens flare textures for loading to GPU
 		m_renderer.queueForLoading(m_lensFlareGhostGradient);
+		
+		// Check for errors and log either a successful or a failed initialization
+		if(returnError == ErrorCode::Success)
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_success, ErrorSource::Source_LensFlarePass);
+		else
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_failure, ErrorSource::Source_LensFlarePass);
 
 		return returnError;
 	}

+ 6 - 0
Praxis3D/Source/LightingPass.h

@@ -51,6 +51,12 @@ public:
 		// Queue light buffers to be created
 		m_renderer.queueForLoading(m_pointLightBuffer);
 		m_renderer.queueForLoading(m_spotLightBuffer);
+		
+		// Check for errors and log either a successful or a failed initialization
+		if(returnError == ErrorCode::Success)
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_success, ErrorSource::Source_LightingPass);
+		else
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_failure, ErrorSource::Source_LightingPass);
 
 		return returnError;
 	}

+ 2 - 1
Praxis3D/Source/LoaderBase.h

@@ -86,7 +86,8 @@ public:
 
 		// Clear the object pool
 		for(decltype(m_objectPool.size()) i = 0, size = m_objectPool.size(); i < size; i++)
-			delete m_objectPool[i];
+			if(m_objectPool[i] != nullptr)
+				delete m_objectPool[i];
 
 		m_objectPool.clear();
 	}

+ 6 - 0
Praxis3D/Source/PostProcessPass.h

@@ -70,6 +70,12 @@ public:
 		m_renderer.queueForLoading(m_lensFlareGhostGradient);
 
 		//Loaders::texture2D().load(m_materialNames.m_materials[matType][i].m_filename, static_cast<MaterialType>(matType), false)
+		
+		// Check for errors and log either a successful or a failed initialization
+		if(returnError == ErrorCode::Success)
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_success, ErrorSource::Source_PostProcessPass);
+		else
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_failure, ErrorSource::Source_PostProcessPass);
 
 		return returnError;
 	}

+ 1 - 1
Praxis3D/Source/PropertySet.h

@@ -663,7 +663,7 @@ public:
 	{
 		if(m_optimizedForSearch)
 		{
-			// Find the property by comparing the property ID const PropertySet &returnPropertySet
+			// Find the property by comparing the property ID
 			auto returnPropertySet = std::lower_bound(m_propertySets.begin(), m_propertySets.end(), p_propertyID);
 
 			// If the property ID matches (property is found), return it; otherwise return a null property

+ 6 - 0
Praxis3D/Source/ReflectionPass.h

@@ -31,6 +31,12 @@ public:
 			// Queue the shaders to be loaded to GPU
 			m_renderer.queueForLoading(*m_shaderReflectionPass);
 		}
+		
+		// Check for errors and log either a successful or a failed initialization
+		if(returnError == ErrorCode::Success)
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_success, ErrorSource::Source_ReflectionPass);
+		else
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_failure, ErrorSource::Source_ReflectionPass);
 
 		return returnError;
 	}

+ 1 - 0
Praxis3D/Source/RendererBackend.cpp

@@ -9,6 +9,7 @@ RendererBackend::RendererBackend()
 
 RendererBackend::~RendererBackend()
 {
+	delete m_gbuffer;
 }
 
 ErrorCode RendererBackend::init(const UniformFrameData &p_frameData)

+ 8 - 4
Praxis3D/Source/RendererFrontend.cpp

@@ -80,10 +80,14 @@ RendererFrontend::RendererFrontend()
 RendererFrontend::~RendererFrontend()
 {
 	// Delete rendering passes
-	//for(decltype(m_renderingPasses.size()) i = 0, size = m_renderingPasses.size(); i < size; i++)
-	//{
-		//delete m_renderingPasses[i];
-	//}
+	for(unsigned int i = 0; i < RenderPassType::RenderPassType_NumOfTypes; i++)
+	{
+		// Check if has been created
+		if(m_initializedRenderingPasses[i] != nullptr)
+			delete m_initializedRenderingPasses[i];
+	}
+
+	delete m_renderPassData;
 }
 
 ErrorCode RendererFrontend::init()

+ 6 - 6
Praxis3D/Source/SceneLoader.cpp

@@ -9,7 +9,7 @@ ErrorCode SceneLoader::loadFromFile(const std::string &p_filename)
 {
 	// Load properties from file
 	PropertyLoader loadedProperties(Config::filepathVar().map_path + p_filename);
-	ErrorCode loaderError = loadedProperties.loadFromFile();
+	const ErrorCode loaderError = loadedProperties.loadFromFile();
 
 	// Check if loading was successful, return an error, if not
 	if(loaderError != ErrorCode::Success)
@@ -21,7 +21,7 @@ ErrorCode SceneLoader::loadFromFile(const std::string &p_filename)
 	auto &systemProperties = loadedProperties.getPropertySet().getPropertySetByID(Properties::Systems);
 
 	// Iterate over each system property set
-	for(decltype(systemProperties.getNumPropertySets()) propIndex = 0, propSize = systemProperties.getNumPropertySets(); propIndex < propSize; propIndex++)
+	for(decltype(systemProperties.getNumPropertySets()) propIndex = 0, const propSize = systemProperties.getNumPropertySets(); propIndex < propSize; propIndex++)
 	{
 		// Iterate over all systems scenes
 		for(int sysIndex = 0; sysIndex < Systems::NumberOfSystems; sysIndex++)
@@ -37,7 +37,7 @@ ErrorCode SceneLoader::loadFromFile(const std::string &p_filename)
 				auto &objectProperties = systemProperties.getPropertySetUnsafe(propIndex).getPropertySetByID(Properties::Objects);
 
 				// Iterate over all object property sets
-				for(decltype(objectProperties.getNumPropertySets()) objIndex = 0, objSize = objectProperties.getNumPropertySets(); objIndex < objSize; objIndex++)
+				for(decltype(objectProperties.getNumPropertySets()) objIndex = 0, const objSize = objectProperties.getNumPropertySets(); objIndex < objSize; objIndex++)
 				{
 					// Create a new system object (by pasting the object property set)
 					auto *newObject = m_systemScenes[sysIndex]->createObject(objectProperties.getPropertySetUnsafe(objIndex));
@@ -53,7 +53,7 @@ ErrorCode SceneLoader::loadFromFile(const std::string &p_filename)
 	auto &objLinkProperties = loadedProperties.getPropertySet().getPropertySetByID(Properties::ObjectLinks);
 
 	// Iterate over all object link property sets
-	for(decltype(objLinkProperties.getNumPropertySets()) linkIndex = 0, linkSize = objLinkProperties.getNumPropertySets(); linkIndex < linkSize; linkIndex++)
+	for(decltype(objLinkProperties.getNumPropertySets()) linkIndex = 0, const linkSize = objLinkProperties.getNumPropertySets(); linkIndex < linkSize; linkIndex++)
 	{
 		// Get subject name
 		const auto &subjectName = objLinkProperties.getPropertySetUnsafe(linkIndex).getPropertyByID(Properties::Subject).getString();
@@ -66,13 +66,13 @@ ErrorCode SceneLoader::loadFromFile(const std::string &p_filename)
 			continue;
 
 		// Iterate over created objects and match subject's name
-		for(decltype(createdObjects.size()) subjIndex = 0, subjSize = createdObjects.size(); subjIndex < subjSize; subjIndex++)
+		for(decltype(createdObjects.size()) subjIndex = 0, const subjSize = createdObjects.size(); subjIndex < subjSize; subjIndex++)
 		{
 			// Compare subject name
 			if(createdObjects[subjIndex].first == subjectName)
 			{
 				// Iterate over created objects and match observer's name
-				for(decltype(createdObjects.size()) observIndex = 0, observSize = createdObjects.size(); observIndex < observSize; observIndex++)
+				for(decltype(createdObjects.size()) observIndex = 0, const observSize = createdObjects.size(); observIndex < observSize; observIndex++)
 				{
 					// Compare observer name
 					if(createdObjects[observIndex].first == observerName)

+ 10 - 1
Praxis3D/Source/ShaderLoader.cpp

@@ -18,7 +18,11 @@ ShaderLoader::ShaderLoader()
 }
 ShaderLoader::~ShaderLoader()
 {
+	// Delete shaders
+	for(decltype(m_shaderPrograms.size()) i = 0, size = m_shaderPrograms.size(); i < size; i++)
+		delete m_shaderPrograms[i];
 
+	m_shaderPrograms.clear();
 }
 
 ErrorCode ShaderLoader::init()
@@ -134,4 +138,9 @@ ShaderLoader::ShaderProgram *ShaderLoader::load(const PropertySet &p_properties)
 	}
 
 	return &m_defaultProgram;
-}
+}
+
+ShaderLoader::ShaderProgram::~ShaderProgram()
+{
+	delete m_uniformUpdater;
+}

+ 1 - 0
Praxis3D/Source/ShaderLoader.h

@@ -248,6 +248,7 @@ public:
 			m_programHandle = 0;
 			m_uniformUpdater = nullptr;
 		}
+		~ShaderProgram();
 
 		bool	m_defaultShader, 
 				m_loadedToMemory,

+ 1 - 0
Praxis3D/Source/ShaderUniformUpdater.h

@@ -30,6 +30,7 @@ public:
 		m_updatesPerMesh.clear();
 		m_textureUpdates.clear();
 		m_uniformBlockUpdates.clear();
+		m_SSBBlockUpdates.clear();
 	}
 
 	inline size_t getNumUpdatesPerFrame() const	{ return m_numUpdatesPerFrame;		}

+ 6 - 1
Praxis3D/Source/SkyPass.h

@@ -34,7 +34,12 @@ public:
 			m_renderer.queueForLoading(*m_skyPassShader);	// Queue the shader to be loaded to GPU
 		else
 			returnError = shaderError;
-
+		
+		// Check for errors and log either a successful or a failed initialization
+		if(returnError == ErrorCode::Success)
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_success, ErrorSource::Source_SkyPass);
+		else
+			ErrHandlerLoc::get().log(ErrorCode::Initialize_failure, ErrorSource::Source_SkyPass);
 
 		return returnError;
 	}

+ 0 - 1
Praxis3D/Source/TextureLoader.cpp

@@ -17,7 +17,6 @@ TextureLoader2D::TextureLoader2D()
 
 TextureLoader2D::~TextureLoader2D()
 {
-
 }
 
 ErrorCode TextureLoader2D::init()

+ 0 - 25
Praxis3D/nsight_profiler.cfg

@@ -1,25 +0,0 @@
-; This file contains the counters to configure using the Nsight VSE Frame Profiler.
-; The counters can be configured for the domains common, graphics, and compute individually.
-; To obtain a list of supported counters, please use NvPmApiQuery.exe ($NSIGHT_INSTALL_PATH\Host\Common\Injection32).
-; For example, execute 'NvPmApiQuery.exe --gl' or 'NvPmApiQuery.exe --d3d11' on the target to obtain a list of supported OpenGL or D3D11 counters respectively.
-; Executing 'NvPmApiQuery.exe --help' will show more available options.
-
-; The configuration uses one regex for each of the domains. Here are some examples:
-; 1. collect texture_busy and geom_busy only:
-; graphics "texture_busy|"\
-;          "geom_busy"
-; 2. collect read sector counters from all subpartitions and framebuffers:
-; common   "fb_subp\\d_read_sectors_fb\\d"
-; 3. collect all common counters:
-; common   ".*"
-; 4. collect aggregated compute counters:
-; compute  "^((?!(vsm|slice|gpc|subp)).)*$"
-; 5. collect no common counters:
-; common   ""
-
-counters
-{
-common   ""
-graphics ""
-compute  "^((?!(vsm|slice|gpc|subp)).)*$"
-}