aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--premake5.lua37
-rw-r--r--src/Core/Window.cpp46
-rw-r--r--src/Core/Window.h24
-rw-r--r--src/main.c6
-rw-r--r--src/main.cpp11
5 files changed, 113 insertions, 11 deletions
diff --git a/premake5.lua b/premake5.lua
index 2f8dc36..11c92ff 100644
--- a/premake5.lua
+++ b/premake5.lua
@@ -90,7 +90,6 @@ project "GLFW"
filter "system:linux"
pic "On"
-
systemversion "latest"
files
@@ -178,7 +177,21 @@ project "GLFW"
defines
{
"_GLFW_WIN32",
- "_CRT_SECURE_NO_WARNINGS"
+ "_CRT_SECURE_NO_WARNINGS",
+ }
+
+ links
+ {
+ "gdi32",
+ "user32",
+ "kernel32",
+ "shell32",
+ "msvcrt"
+ }
+
+ linkoptions
+ {
+ "/NODEFAULTLIB:library"
}
filter "configurations:Debug"
@@ -204,7 +217,7 @@ group ""
project "Donut"
kind "ConsoleApp"
- language "C"
+ language "C++"
staticruntime "on"
targetdir ("bin/" .. outputdir .. "/%{prj.name}")
@@ -218,7 +231,7 @@ project "Donut"
files
{
"src/**.h",
- "src/**.c"
+ "src/**.cpp"
}
includedirs
@@ -232,7 +245,6 @@ project "Donut"
{
"GLFW",
"GLAD",
- "opengl32.lib"
}
filter "system:windows"
@@ -242,6 +254,21 @@ project "Donut"
"GLFW_INCLUDE_NONE"
}
+ links
+ {
+ "gdi32",
+ "user32",
+ "kernel32",
+ "shell32",
+ "opengl32",
+ "msvcrt"
+ }
+
+ linkoptions
+ {
+ "/NODEFAULTLIB:library"
+ }
+
filter "configurations:Debug"
defines "DONUT_DEBUG"
runtime "Debug"
diff --git a/src/Core/Window.cpp b/src/Core/Window.cpp
new file mode 100644
index 0000000..8f1c6ea
--- /dev/null
+++ b/src/Core/Window.cpp
@@ -0,0 +1,46 @@
+#include "Window.h"
+#include <cstdint>
+
+namespace Donut
+{
+ static bool s_GLFWInitialized = false;
+ static uint32_t s_GLFWWindowCount = 0;
+
+ Window::Window(const std::string& title, int width, int height)
+ : m_Title(title), m_Width(width), m_Height(height)
+ {
+ if (!s_GLFWInitialized)
+ {
+ glfwInit();
+ s_GLFWInitialized = true;
+ }
+
+ m_Window = glfwCreateWindow(width, height, title.c_str(), nullptr, nullptr);
+ glfwMakeContextCurrent(m_Window);
+
+ s_GLFWWindowCount++;
+ }
+
+ Window::~Window()
+ {
+ glfwDestroyWindow(m_Window);
+ s_GLFWWindowCount--;
+
+ if (s_GLFWWindowCount == 0)
+ {
+ glfwTerminate();
+ s_GLFWInitialized = false;
+ }
+ }
+
+ void Window::OnUpdate() const
+ {
+ glfwPollEvents();
+ glfwSwapBuffers(m_Window);
+ }
+
+ bool Window::ShouldClose() const
+ {
+ return glfwWindowShouldClose(m_Window);
+ }
+} \ No newline at end of file
diff --git a/src/Core/Window.h b/src/Core/Window.h
new file mode 100644
index 0000000..866d144
--- /dev/null
+++ b/src/Core/Window.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include <GLFW/glfw3.h>
+#include <string>
+
+namespace Donut
+{
+ class Window
+ {
+ public:
+ Window(const std::string& title, int width, int height);
+ ~Window();
+
+ bool ShouldClose() const;
+ void OnUpdate() const;
+ private:
+ GLFWwindow* m_Window;
+
+ std::string m_Title;
+ int m_Width;
+ int m_Height;
+ bool m_IsClosed;
+ };
+} \ No newline at end of file
diff --git a/src/main.c b/src/main.c
deleted file mode 100644
index b2c1bc6..0000000
--- a/src/main.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-int main(void)
-{
- puts("Donut");
-} \ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..7637a5b
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,11 @@
+#include "Core/Window.h"
+
+int main()
+{
+ Donut::Window window("Donut", 1280, 720);
+
+ while (!window.ShouldClose())
+ {
+ window.OnUpdate();
+ }
+} \ No newline at end of file