aboutsummaryrefslogtreecommitdiff
path: root/source/main.cpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2022-04-15 20:30:39 -0700
committerrtk0c <[email protected]>2022-04-15 20:30:39 -0700
commitafcac59c7d04f4337d6b04ebed8cac7e871ccc50 (patch)
tree8c32b90b4a0ab762a68f228dc8cc4e7f52fc5bd7 /source/main.cpp
parentf2a1481123ac23aeb4937df5f61c57e0e4f1ff52 (diff)
Changeset: 7 Work on Material system
Diffstat (limited to 'source/main.cpp')
-rw-r--r--source/main.cpp75
1 files changed, 41 insertions, 34 deletions
diff --git a/source/main.cpp b/source/main.cpp
index f7cde70..8f16403 100644
--- a/source/main.cpp
+++ b/source/main.cpp
@@ -2,18 +2,20 @@
#include "AppConfig.hpp"
#include "EditorNotification.hpp"
+#include "Material.hpp"
#include "Shader.hpp"
+#include "Texture.hpp"
#define GLFW_INCLUDE_NONE
#include <GLFW/glfw3.h>
-#include <filesystem>
#include <backends/imgui_impl_glfw.h>
#include <backends/imgui_impl_opengl3.h>
#include <glad/glad.h>
#include <imgui.h>
#include <cstdlib>
#include <cxxopts.hpp>
+#include <filesystem>
#include <string>
namespace fs = std::filesystem;
@@ -26,7 +28,7 @@ static void GlfwMouseCallback(GLFWwindow* window, int button, int action, int mo
if (ImGui::GetIO().WantCaptureMouse) {
return;
}
-
+
App* app = static_cast<App*>(glfwGetWindowUserPointer(window));
app->HandleMouse(button, action);
}
@@ -35,7 +37,7 @@ static void GlfwMouseMotionCallback(GLFWwindow* window, double xOff, double yOff
if (ImGui::GetIO().WantCaptureMouse) {
return;
}
-
+
App* app = static_cast<App*>(glfwGetWindowUserPointer(window));
app->HandleMouseMotion(xOff, yOff);
}
@@ -44,7 +46,7 @@ static void GlfwKeyCallback(GLFWwindow* window, int key, int scancode, int actio
if (ImGui::GetIO().WantCaptureKeyboard) {
return;
}
-
+
GLFWkeyboard* keyboard = glfwGetLastActiveKeyboard();
if (keyboard) {
App* app = static_cast<App*>(glfwGetWindowUserPointer(window));
@@ -55,7 +57,7 @@ static void GlfwKeyCallback(GLFWwindow* window, int key, int scancode, int actio
int main(int argc, char* argv[]) {
constexpr auto kGameDataDir = "game-data-directory";
constexpr auto kGameAssetDir = "game-asset-directory";
-
+
cxxopts::Options options(std::string(AppConfig::kAppName), "");
// clang-format off
options.add_options()
@@ -64,26 +66,26 @@ int main(int argc, char* argv[]) {
;
// clang-format on
auto args = options.parse(argc, argv);
-
+
{
auto assetDir = args[kGameAssetDir].as<std::string>();
-
+
fs::path assetDirPath(assetDir);
if (!fs::exists(assetDirPath)) {
fprintf(stderr, "Invalid asset directory.\n");
return -4;
}
-
+
AppConfig::assetDir = std::move(assetDir);
AppConfig::assetDirPath = std::move(assetDirPath);
}
-
+
if (args.count(kGameDataDir) > 0) {
auto dataDir = args[kGameDataDir].as<std::string>();
-
+
fs::path dataDirPath(dataDir);
fs::create_directories(dataDir);
-
+
AppConfig::dataDir = std::move(dataDir);
AppConfig::dataDirPath = std::move(dataDirPath);
} else {
@@ -91,13 +93,13 @@ int main(int argc, char* argv[]) {
AppConfig::dataDir = ".";
AppConfig::dataDirPath = fs::path(".");
}
-
+
if (!glfwInit()) {
return -1;
}
-
+
glfwSetErrorCallback(&GlfwErrorCallback);
-
+
// Decide GL+GLSL versions
#if defined(IMGUI_IMPL_OPENGL_ES2)
// GL ES 2.0 + GLSL 100
@@ -118,48 +120,53 @@ int main(int argc, char* argv[]) {
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
#endif
-
+
App app;
-
+
GLFWwindow* window = glfwCreateWindow(1280, 720, "ImGui Command Palette Example", nullptr, nullptr);
if (window == nullptr) {
return -2;
}
-
+
glfwSetWindowUserPointer(window, &app);
-
+
// Window callbacks are retained by ImGui GLFW backend
glfwSetKeyCallback(window, &GlfwKeyCallback);
glfwSetMouseButtonCallback(window, &GlfwMouseCallback);
glfwSetCursorPosCallback(window, &GlfwMouseMotionCallback);
-
+
glfwMakeContextCurrent(window);
glfwSwapInterval(1);
-
+
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
return -3;
}
-
+
IMGUI_CHECKVERSION();
ImGui::CreateContext();
-
+
ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL3_Init(glsl_version);
-
- ShaderManager::instance = new ShaderManager();
- ShaderManager::instance->DiscoverShaders();
-
+
+ ShaderManager::instance = new ShaderManager();
+ TextureManager::instance = new TextureManager();
+ MaterialManager::instance = new MaterialManager();
+
+ ShaderManager::instance->DiscoverShaders();
+ TextureManager::instance->DiscoverTextures();
+ MaterialManager::instance->DiscoverMaterials();
+
app.Init();
while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
-
+
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
-
+
app.Show();
ImGui::ShowNotifications();
-
+
ImGui::Render();
int display_w, display_h;
glfwGetFramebufferSize(window, &display_w, &display_h);
@@ -168,18 +175,18 @@ int main(int argc, char* argv[]) {
glClearColor(clear_color.x * clear_color.w, clear_color.y * clear_color.w, clear_color.z * clear_color.w, clear_color.w);
glClear(GL_COLOR_BUFFER_BIT);
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
-
+
glfwSwapBuffers(window);
}
app.Shutdown();
-
+
ImGui_ImplOpenGL3_Shutdown();
ImGui_ImplGlfw_Shutdown();
-
+
ImGui::DestroyContext();
-
+
glfwDestroyWindow(window);
glfwTerminate();
-
+
return 0;
}