summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core.hpp8
-rw-r--r--src/vk/device.cpp114
2 files changed, 110 insertions, 12 deletions
diff --git a/src/core.hpp b/src/core.hpp
index 7393b33..f9e1e80 100644
--- a/src/core.hpp
+++ b/src/core.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2022-2023 Frederico de Oliveira Linhares
+ * Copyright 2022-2024 Frederico de Oliveira Linhares
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,8 +21,6 @@
#define CANDY_GEAR_VERSION_MINOR 1
#define CANDY_GEAR_VERSION_PATCH 0
-#define DATA_DIR "/usr/local/share/candy_gear"
-
#include <chrono>
#include <random>
@@ -35,6 +33,10 @@
#define SDL_MAIN_HANDLED
+#ifdef _WIN64
+#include <Windows.h>
+#endif
+
#include <SDL2/SDL.h>
#include <SDL2/SDL_vulkan.h>
#include <SDL2/SDL_mixer.h>
diff --git a/src/vk/device.cpp b/src/vk/device.cpp
index 83bdf38..d0690d7 100644
--- a/src/vk/device.cpp
+++ b/src/vk/device.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2022-2023 Frederico de Oliveira Linhares
+ * Copyright 2022-2024 Frederico de Oliveira Linhares
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -158,22 +158,118 @@ Device::Device(VkPhysicalDevice vk_physical_device, bool with_swapchain)
// Load Shaders
{
+ std::string data_dir{""};
+#ifdef _WIN64
+ HKEY hKey;
+ LPCSTR lpSubKey = "SOFTWARE\\CandyGear";
+ LPCSTR lpValueName = "InstallLocation";
+ DWORD dwType = REG_SZ;
+ DWORD dwSize = 0;
+ LPBYTE lpData = NULL;
+
+ if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ, &hKey) ==
+ ERROR_SUCCESS)
+ {
+ if(RegQueryValueEx(hKey, lpValueName, NULL, &dwType, NULL, &dwSize) ==
+ ERROR_SUCCESS)
+ {
+ lpData = new BYTE[dwSize];
+ if(RegQueryValueEx(
+ hKey, lpValueName, NULL, &dwType, lpData, &dwSize) ==
+ ERROR_SUCCESS)
+ {
+ data_dir = reinterpret_cast<char const*>(lpData);
+ }
+ delete[] lpData;
+ }
+ RegCloseKey(hKey);
+ }
+
+ if(data_dir == "")
+ throw std::runtime_error("Failed to read CandyGear registry.");
+
+ std::string vert_sprite_3d_shader_module{data_dir};
+ vert_sprite_3d_shader_module.append("\\glsl\\shader_sprite_3d.vert.spv");
+ this->vert_sprite_3d_shader_module = create_shader_module(
+ this->device, vert_sprite_3d_shader_module.c_str());
+
+ std::string frag_sprite_3d_shader_module{data_dir};
+ frag_sprite_3d_shader_module.append("\\glsl\\shader_sprite_3d.frag.spv");
+ this->frag_sprite_3d_shader_module = create_shader_module(
+ this->device, frag_sprite_3d_shader_module.c_str());
+
+ std::string vert3d_shader_module{data_dir};
+ vert3d_shader_module.append("\\glsl\\shader_3d.vert.spv");
+ this->vert3d_shader_module = create_shader_module(
+ this->device, vert3d_shader_module.c_str());
+
+ std::string frag3d_shader_module{data_dir};
+ frag3d_shader_module.append("\\glsl\\shader_3d.frag.spv");
+ this->frag3d_shader_module = create_shader_module(
+ this->device, frag3d_shader_module.c_str());
+
+ std::string vert2d_solid_shader_module{data_dir};
+ vert2d_solid_shader_module.append("\\glsl\\shader_2d_solid.vert.spv");
+ this->vert2d_solid_shader_module = create_shader_module(
+ this->device, vert2d_solid_shader_module.c_str());
+
+ std::string frag2d_solid_shader_module{data_dir};
+ frag2d_solid_shader_module.append("\\glsl\\shader_2d_solid.frag.spv");
+ this->frag2d_solid_shader_module = create_shader_module(
+ this->device, frag2d_solid_shader_module.c_str());
+
+ std::string vert2d_wired_shader_module{data_dir};
+ vert2d_wired_shader_module.append("\\glsl\\shader_2d_wired.vert.spv");
+ this->vert2d_wired_shader_module = create_shader_module(
+ this->device, vert2d_wired_shader_module.c_str());
+
+ std::string frag2d_wired_shader_module{data_dir};
+ frag2d_wired_shader_module.append("\\glsl\\shader_2d_wired.frag.spv");
+ this->frag2d_wired_shader_module = create_shader_module(
+ this->device, frag2d_wired_shader_module.c_str());
+#else
+ data_dir = "/usr/local/share/candy_gear";
+
+ std::string vert_sprite_3d_shader_module{data_dir};
+ vert_sprite_3d_shader_module.append("/glsl/shader_sprite_3d.vert.spv");
this->vert_sprite_3d_shader_module = create_shader_module(
- this->device, DATA_DIR "/glsl/shader_sprite_3d.vert.spv");
+ this->device, vert_sprite_3d_shader_module.c_str());
+
+ std::string frag_sprite_3d_shader_module{data_dir};
+ frag_sprite_3d_shader_module.append("/glsl/shader_sprite_3d.frag.spv");
this->frag_sprite_3d_shader_module = create_shader_module(
- this->device, DATA_DIR "/glsl/shader_sprite_3d.frag.spv");
+ this->device, frag_sprite_3d_shader_module.c_str());
+
+ std::string vert3d_shader_module{data_dir};
+ vert3d_shader_module.append("/glsl/shader_3d.vert.spv");
this->vert3d_shader_module = create_shader_module(
- this->device, DATA_DIR "/glsl/shader_3d.vert.spv");
+ this->device, vert3d_shader_module.c_str());
+
+ std::string frag3d_shader_module{data_dir};
+ frag3d_shader_module.append("/glsl/shader_3d.frag.spv");
this->frag3d_shader_module = create_shader_module(
- this->device, DATA_DIR "/glsl/shader_3d.frag.spv");
+ this->device, frag3d_shader_module.c_str());
+
+ std::string vert2d_solid_shader_module{data_dir};
+ vert2d_solid_shader_module.append("/glsl/shader_2d_solid.vert.spv");
this->vert2d_solid_shader_module = create_shader_module(
- this->device, DATA_DIR "/glsl/shader_2d_solid.vert.spv");
+ this->device, vert2d_solid_shader_module.c_str());
+
+ std::string frag2d_solid_shader_module{data_dir};
+ frag2d_solid_shader_module.append("/glsl/shader_2d_solid.frag.spv");
this->frag2d_solid_shader_module = create_shader_module(
- this->device, DATA_DIR "/glsl/shader_2d_solid.frag.spv");
+ this->device, frag2d_solid_shader_module.c_str());
+
+ std::string vert2d_wired_shader_module{data_dir};
+ vert2d_wired_shader_module.append("/glsl/shader_2d_wired.vert.spv");
this->vert2d_wired_shader_module = create_shader_module(
- this->device, DATA_DIR "/glsl/shader_2d_wired.vert.spv");
+ this->device, vert2d_wired_shader_module.c_str());
+
+ std::string frag2d_wired_shader_module{data_dir};
+ frag2d_wired_shader_module.append("/glsl/shader_2d_wired.frag.spv");
this->frag2d_wired_shader_module = create_shader_module(
- this->device, DATA_DIR "/glsl/shader_2d_wired.frag.spv");
+ this->device, frag2d_wired_shader_module.c_str());
+#endif
}
this->queue_families = static_cast<QueueFamily*>(