From 294edcdcff3d5c55960c18ca00fa44517b1eecc6 Mon Sep 17 00:00:00 2001 From: JimmyBinoculars Date: Fri, 20 Feb 2026 02:05:56 +0000 Subject: [PATCH] Window with own structure --- .gitignore | 1 + Makefile | 10 +++++----- VulkanTest | Bin 16712 -> 0 bytes a.out | Bin 0 -> 17984 bytes cve_window.cpp | 22 ++++++++++++++++++++++ cve_window.hpp | 28 ++++++++++++++++++++++++++++ first_app.cpp | 9 +++++++++ first_app.hpp | 15 +++++++++++++++ helloWorld.cpp | 8 -------- main.cpp | 42 +++++++++++++----------------------------- 10 files changed, 93 insertions(+), 42 deletions(-) create mode 100644 .gitignore delete mode 100755 VulkanTest create mode 100755 a.out create mode 100644 cve_window.cpp create mode 100644 cve_window.hpp create mode 100644 first_app.cpp create mode 100644 first_app.hpp delete mode 100644 helloWorld.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..100b938 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +README \ No newline at end of file diff --git a/Makefile b/Makefile index 08551de..820991d 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,13 @@ CFLAGS = -std=c++17 -O2 LDFLAGS = -lglfw -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi -VulkanTest: main.cpp - g++ $(CFLAGS) -o VulkanTest main.cpp $(LDFLAGS) +VulkanTest: *.cpp *.hpp + g++ $(CFLAGS) -o a.out *.cpp $(LDFLAGS) .PHONY: test clean -test: VulkanTest - ./VulkanTest +test: a.out + ./a.out clean: - rm -f VulkanTest \ No newline at end of file + rm -f a.out diff --git a/VulkanTest b/VulkanTest deleted file mode 100755 index c34e554085835676cdffb0afe18a52bbbba63a92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16712 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 OpQqLvFSjY!Sn+?MC}M;F literal 0 HcmV?d00001 diff --git a/cve_window.cpp b/cve_window.cpp new file mode 100644 index 0000000..5b2d6cd --- /dev/null +++ b/cve_window.cpp @@ -0,0 +1,22 @@ +#include "cve_window.hpp" + +namespace cve { + CveWindow::CveWindow(int w, int h, std::string name) : width{w}, + height{h}, windowName{name} { + initWindow(); + } + + CveWindow::~CveWindow() { + glfwDestroyWindow(window); + glfwTerminate(); + } + + void CveWindow::initWindow() { + glfwInit(); + glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); + glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); + + window = glfwCreateWindow(width, height, + windowName.c_str(), nullptr, nullptr); + } +} diff --git a/cve_window.hpp b/cve_window.hpp new file mode 100644 index 0000000..f522ea2 --- /dev/null +++ b/cve_window.hpp @@ -0,0 +1,28 @@ +#pragma once + +#define GLFW_INCLUDE_VULKAN +#include + +#include +namespace cve { + +class CveWindow { + public: + CveWindow(int w, int h, std::string name); + ~CveWindow(); + + CveWindow(const CveWindow &) = delete; + CveWindow &operator=(const CveWindow &) = delete; + + bool shouldClose() { return glfwWindowShouldClose(window); }; + private: + void initWindow(); + + const int width; + const int height; + + std::string windowName; + GLFWwindow *window; +}; + +} diff --git a/first_app.cpp b/first_app.cpp new file mode 100644 index 0000000..4a87526 --- /dev/null +++ b/first_app.cpp @@ -0,0 +1,9 @@ +#include "first_app.hpp" + +namespace cve { + void FirstApp::run() { + while (!cveWindow.shouldClose()) { + glfwPollEvents(); + } + } +} diff --git a/first_app.hpp b/first_app.hpp new file mode 100644 index 0000000..e4bab1b --- /dev/null +++ b/first_app.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include "cve_window.hpp" + +namespace cve { + class FirstApp { + public: + static constexpr int WIDTH = 800; + static constexpr int HEIGHT = 600; + + void run(); + private: + CveWindow cveWindow{WIDTH, HEIGHT, "Hello Vulkan!"}; + }; +} diff --git a/helloWorld.cpp b/helloWorld.cpp deleted file mode 100644 index a7bff40..0000000 --- a/helloWorld.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include - -using namespace std; - -int main() { - printf("Hello, World!\n"); - return 0; -} \ No newline at end of file diff --git a/main.cpp b/main.cpp index b8f6e6f..18ef125 100644 --- a/main.cpp +++ b/main.cpp @@ -1,35 +1,19 @@ -#define GLFW_INCLUDE_VULKAN -#include - -#define GLM_FORCE_RADIANS -#define GLM_FORCE_DEPTH_ZERO_TO_ONE -#include -#include +#include "first_app.hpp" +// std +#include #include +#include int main() { - glfwInit(); + cve::FirstApp app{}; - glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); - GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", nullptr, nullptr); + try { + app.run(); + } catch (const std::exception &e) { + std::cerr << e.what() << '\n'; + return EXIT_FAILURE; + } - uint32_t extensionCount = 0; - vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr); - - std::cout << extensionCount << " extensions supported\n"; - - glm::mat4 matrix; - glm::vec4 vec; - auto test = matrix * vec; - - while(!glfwWindowShouldClose(window)) { - glfwPollEvents(); - } - - glfwDestroyWindow(window); - - glfwTerminate(); - - return 0; -} \ No newline at end of file + return EXIT_SUCCESS; +}