diff --git a/3Engine/3Engine.vcxproj b/3Engine/3Engine.vcxproj
index d0740e8..44a5493 100644
--- a/3Engine/3Engine.vcxproj
+++ b/3Engine/3Engine.vcxproj
@@ -95,6 +95,8 @@
+
+
15.0
@@ -195,6 +197,7 @@
Disabled
true
OS_WIN;_CRT_NO_VA_START_VALIDATION;DEBUG;%(PreprocessorDefinitions)
+ /std:c++latest %(AdditionalOptions)
$(SolutionDir)\dependencies\freeglut-msvc\lib\x64\;$(SolutionDir)\dependencies\glew-msvc\lib\Release\x64\;%(AdditionalLibraryDirectories)
@@ -247,6 +250,7 @@ xcopy "$(SolutionDir)assets" "$(OutDir)assets\" /E
true
true
OS_WIN;_CRT_NO_VA_START_VALIDATION;RELEASE;%(PreprocessorDefinitions)
+ /std:c++latest %(AdditionalOptions)
true
diff --git a/3Engine/3Engine.vcxproj.filters b/3Engine/3Engine.vcxproj.filters
index 8c25498..2570c46 100644
--- a/3Engine/3Engine.vcxproj.filters
+++ b/3Engine/3Engine.vcxproj.filters
@@ -123,6 +123,9 @@
Engine
+
+ Engine
+
@@ -230,5 +233,14 @@
Engine
+
+ Engine
+
+
+ Engine
+
+
+ Engine
+
\ No newline at end of file
diff --git a/3EngineExecutable/3EngineExecutable.vcxproj b/3EngineExecutable/3EngineExecutable.vcxproj
index b654627..f1e8f20 100644
--- a/3EngineExecutable/3EngineExecutable.vcxproj
+++ b/3EngineExecutable/3EngineExecutable.vcxproj
@@ -135,6 +135,7 @@
Disabled
true
OS_WIN;_CRT_NO_VA_START_VALIDATION;DEBUG;%(PreprocessorDefinitions)
+ /std:c++latest %(AdditionalOptions)
$(SolutionDir)\dependencies\freeglut-msvc\lib\x64\;$(SolutionDir)\dependencies\glew-msvc\lib\Release\x64\;%(AdditionalLibraryDirectories)
@@ -184,6 +185,7 @@ xcopy "$(SolutionDir)shaders" "$(OutDir)shaders\" /E
true
true
OS_WIN;_CRT_NO_VA_START_VALIDATION;RELEASE;%(PreprocessorDefinitions)
+ /std:c++latest %(AdditionalOptions)
true
diff --git a/3EngineTests/3EngineTests.vcxproj b/3EngineTests/3EngineTests.vcxproj
index 55ff000..0684ab7 100644
--- a/3EngineTests/3EngineTests.vcxproj
+++ b/3EngineTests/3EngineTests.vcxproj
@@ -128,6 +128,7 @@
Disabled
true
OS_WIN;_SCL_SECURE_NO_WARNINGS;_CRT_NO_VA_START_VALIDATION;%(PreprocessorDefinitions)
+ /std:c++latest %(AdditionalOptions)
$(SolutionDir)\dependencies\freeglut-msvc\lib\x64\;$(SolutionDir)\dependencies\glew-msvc\lib\Release\x64\;%(AdditionalLibraryDirectories)
@@ -175,6 +176,7 @@ copy "$(SolutionDir)config\RuntimeConfig.json" "$(OutDir)config\"
true
true
OS_WIN;_SCL_SECURE_NO_WARNINGS;_CRT_NO_VA_START_VALIDATION;%(PreprocessorDefinitions)
+ /std:c++latest %(AdditionalOptions)
true
diff --git a/3EngineTests/3EngineTests.vcxproj.filters b/3EngineTests/3EngineTests.vcxproj.filters
index 3ad9ad5..a0a60d9 100644
--- a/3EngineTests/3EngineTests.vcxproj.filters
+++ b/3EngineTests/3EngineTests.vcxproj.filters
@@ -27,33 +27,15 @@
Source Files
-
- Source Files
-
-
- Source Files
-
Source Files
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
Source Files
Source Files
-
- Source Files
-
Source Files
@@ -182,39 +164,18 @@
Header Files
-
- Header Files
-
-
- Header Files
-
Header Files
Header Files
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
Header Files
Header Files
-
- Header Files
-
Header Files
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 21c78fb..6dca090 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -100,7 +100,8 @@ set(ENGINE_SOURCE_FILES
src/Engine/Shapes/Mesh.cpp src/Engine/Shapes/Mesh.h
src/Engine/Shapes/MeshLoader.cpp src/Engine/Shapes/MeshLoader.h
src/Engine/Actor.cpp src/Engine/Actor.h
- src/Engine/SceneManagement/SceneGraph.cpp src/Engine/SceneManagement/SceneGraph.h)
+ src/Engine/SceneManagement/SceneGraph.cpp src/Engine/SceneManagement/SceneGraph.h
+ src/Engine/Utilities/Manager.h src/Engine/Utilities/Managers.h)
set(EXECUTABLE_SOURCE_FILES
src/Executable/main.cpp
diff --git a/src/Engine/Actor.cpp b/src/Engine/Actor.cpp
index 67650e9..4d9f3b7 100644
--- a/src/Engine/Actor.cpp
+++ b/src/Engine/Actor.cpp
@@ -10,7 +10,7 @@
namespace ThreeEngine {
Actor::Actor()
- : IDrawable(), isInitiated(false), transform(), mesh(),
+ : IDrawable(), isInitiated(false), transform(), mesh(nullptr),
shaderProgram(nullptr), parent(nullptr) { }
Actor::~Actor() {
@@ -29,15 +29,17 @@ namespace ThreeEngine {
"shaders/Default/program.json");
}
GetShaderProgram()->Init();
- mesh.Init();
+ if (mesh) {
+ mesh->Init();
+ }
for (auto&& child : children) {
child->Init();
}
}
void Actor::Draw() {
- { // Actor Mesh
- mesh.Bind();
+ if (mesh) { // Actor Mesh
+ mesh->Bind();
GetShaderProgram()->Bind();
number matrixArray[16];
@@ -49,20 +51,19 @@ namespace ThreeEngine {
if (preDraw) {
preDraw();
}
- mesh.Draw();
+ mesh->Draw();
if (postDraw) {
postDraw();
}
GetShaderProgram()->Unbind();
- mesh.Unbind();
+ mesh->Unbind();
CheckOpenGLError("Could not draw Actor.");
}
- { // Children
- for (auto&& child : children) {
- child->Draw();
- }
+ // Children
+ for (auto&& child : children) {
+ child->Draw();
}
}
diff --git a/src/Engine/Actor.h b/src/Engine/Actor.h
index 36c41e9..40055df 100644
--- a/src/Engine/Actor.h
+++ b/src/Engine/Actor.h
@@ -32,7 +32,7 @@ namespace ThreeEngine {
std::function preDraw, postDraw;
- Mesh mesh;
+ std::shared_ptr mesh;
std::shared_ptr shaderProgram;
diff --git a/src/Engine/Shapes/Cube.cpp b/src/Engine/Shapes/Cube.cpp
index 916579d..69a4b74 100644
--- a/src/Engine/Shapes/Cube.cpp
+++ b/src/Engine/Shapes/Cube.cpp
@@ -11,7 +11,8 @@
namespace ThreeEngine {
Cube::Cube() : Actor(), color{.5f, .5f, .5f, 1.0f} {
- mesh.Vertices = std::vector({
+ mesh = std::make_shared();
+ mesh->Vertices = std::vector({
{0.0f, 0.0f, 1.0f}, // 0 - FRONT
{1.0f, 0.0f, 1.0f}, // 1
{1.0f, 1.0f, 1.0f}, // 2
@@ -54,7 +55,7 @@ namespace ThreeEngine {
{1.0f, 0.0f, 1.0f}, // 1
{0.0f, 0.0f, 1.0f} // 0
});
- for (Vector & v : mesh.Vertices) {
+ for (Vector & v : mesh->Vertices) {
v -= 0.5f;
}
preDraw = std::bind(&Cube::ColorUpdate, this);
diff --git a/src/Engine/Shapes/MeshLoader.cpp b/src/Engine/Shapes/MeshLoader.cpp
index 99d198f..7093b23 100644
--- a/src/Engine/Shapes/MeshLoader.cpp
+++ b/src/Engine/Shapes/MeshLoader.cpp
@@ -76,8 +76,8 @@ namespace ThreeEngine {
return meshData;
}
- Mesh MeshLoader::OBJ_ProcessMeshData(MeshLoader::MeshData& meshData) {
- Mesh mesh = Mesh();
+ std::shared_ptr MeshLoader::OBJ_ProcessMeshData(MeshLoader::MeshData& meshData) {
+ auto mesh = std::make_shared();
for (unsigned int i = 0; i < meshData.vertexIdx.size(); i++) {
unsigned int vi = meshData.vertexIdx[i];
if ((vi - 1) >= meshData.vertices.size()) {
@@ -85,22 +85,22 @@ namespace ThreeEngine {
continue;
}
Vector v = meshData.vertices[vi - 1];
- mesh.Vertices.push_back(v);
+ mesh->Vertices.push_back(v);
if (!meshData.texCoords.empty()) {
unsigned int ti = meshData.texCoordIdx[i];
Vector2 t = meshData.texCoords[ti - 1];
- mesh.TexCoords.push_back(t);
+ mesh->TexCoords.push_back(t);
}
if (!meshData.normals.empty()) {
unsigned int ni = meshData.normalIdx[i];
Vector n = meshData.normals[ni - 1];
- mesh.Normals.push_back(n);
+ mesh->Normals.push_back(n);
}
}
return mesh;
}
- Mesh MeshLoader::LoadFileOBJ(std::string const& filepath) {
+ std::shared_ptr MeshLoader::LoadFileOBJ(std::string const& filepath) {
MeshData meshData = OBJ_LoadMeshData(filepath);
return OBJ_ProcessMeshData(meshData);
}
diff --git a/src/Engine/Shapes/MeshLoader.h b/src/Engine/Shapes/MeshLoader.h
index ea012ec..124cca1 100644
--- a/src/Engine/Shapes/MeshLoader.h
+++ b/src/Engine/Shapes/MeshLoader.h
@@ -6,6 +6,7 @@
#ifndef THREEENGINE_MESHLOADER_H
#define THREEENGINE_MESHLOADER_H
+#include
#include "../Utilities/singleton.h"
#include "Mesh.h"
@@ -32,10 +33,10 @@ namespace ThreeEngine {
MeshData OBJ_LoadMeshData(std::string const& filename);
- Mesh OBJ_ProcessMeshData(MeshData& meshData);
+ std::shared_ptr OBJ_ProcessMeshData(MeshData& meshData);
public:
- Mesh LoadFileOBJ(std::string const& filepath);
+ std::shared_ptr LoadFileOBJ(std::string const& filepath);
};
} // namespace ThreeEngine
diff --git a/src/Engine/Utilities/Manager.h b/src/Engine/Utilities/Manager.h
new file mode 100644
index 0000000..85a8836
--- /dev/null
+++ b/src/Engine/Utilities/Manager.h
@@ -0,0 +1,39 @@
+/*
+* File Manager.h in project ThreeEngine
+*
+* Copyright (C) Ricardo Rodrigues 2017 - All Rights Reserved
+*/
+#ifndef THREEENGINE_MANAGER_H
+#define THREEENGINE_MANAGER_H
+
+#include