aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/rt.hpp11
-rw-r--r--include/utils.hpp5
-rw-r--r--include/vk-renderer.hpp5
-rw-r--r--include/vulkan-loader.hpp4
-rw-r--r--include/window.hpp23
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/main.cpp15
-rw-r--r--src/vk-renderer.cpp4
-rw-r--r--src/vulkan-loader.cpp3
-rw-r--r--src/window.cpp6
10 files changed, 63 insertions, 15 deletions
diff --git a/include/rt.hpp b/include/rt.hpp
index 222fe3a..c7fa9a0 100644
--- a/include/rt.hpp
+++ b/include/rt.hpp
@@ -1,6 +1,15 @@
#ifndef __RT_HPP_
#define __RT_HPP_
+#if defined(__linux__)
+#define LINUX
+#include <unistd.h>
+#include <dlfcn.h>
+#elif defined(_WIN32) || defined(_WIN64)
+#define WINDOWS
+#include <Windows.h>
+#endif
+
#include "utils.hpp"
#include "vec3.hpp"
#include "color.hpp"
@@ -8,8 +17,6 @@
#include "camera.hpp"
#include "material.hpp"
-#ifdef __linux__
#include "window.hpp"
-#endif
#endif // !__RT_HPP_
diff --git a/include/utils.hpp b/include/utils.hpp
index 0bef213..42a5a1a 100644
--- a/include/utils.hpp
+++ b/include/utils.hpp
@@ -5,13 +5,14 @@
#include <vector>
-#include <cmath>
#include <cstdlib>
std::vector<uint8_t> get_shader_code(const char* path);
+#define PI 3.14159265359
+
inline float deg_to_rad(float deg) {
- return deg * M_PI / 180.0;
+ return deg * PI / 180.0;
}
inline float randd() {
diff --git a/include/vk-renderer.hpp b/include/vk-renderer.hpp
index d987d6f..aecda0f 100644
--- a/include/vk-renderer.hpp
+++ b/include/vk-renderer.hpp
@@ -6,10 +6,7 @@
#include "vulkan-loader.hpp"
#include "thirdparty/vk_mem_alloc.h"
-#include "vec3.hpp"
-#include "camera.hpp"
-#include "sphere.hpp"
-#include "window.hpp"
+#include "rt.hpp"
struct input_data {
color sky_color;
diff --git a/include/vulkan-loader.hpp b/include/vulkan-loader.hpp
index 0243c9f..cafd5bc 100644
--- a/include/vulkan-loader.hpp
+++ b/include/vulkan-loader.hpp
@@ -1,12 +1,12 @@
#ifndef __VULKAN_LOADER_HPP_
#define __VULKAN_LOADER_HPP_
-#if defined(_WIN32) || defined(_WIN64)
+#if defined(WINDOWS)
#include <Windows.h>
#include <windowsx.h>
#define VK_USE_PLATFORM_WIN32_KHR
-#elif defined(__linux__)
+#elif defined(LINUX)
#define VK_USE_PLATFORM_XCB_KHR
#endif
diff --git a/include/window.hpp b/include/window.hpp
index 8ddb58d..4b3d37b 100644
--- a/include/window.hpp
+++ b/include/window.hpp
@@ -1,6 +1,18 @@
#ifndef __WINDOW_HPP_
#define __WINDOW_HPP_
+#include <cstdint>
+
+#if defined(__linux__)
+#define LINUX
+#include <unistd.h>
+#include <dlfcn.h>
+#elif defined(_WIN32) || defined(_WIN64)
+#define WINDOWS
+#include <Windows.h>
+#endif
+
+#if defined(LINUX)
#include <xcb/xcb.h>
class window {
@@ -13,5 +25,16 @@ class window {
uint32_t width;
uint32_t height;
};
+#elif defined(WINDOWS)
+#include <Windows.h>
+
+class window {
+ public:
+ window(uint32_t width, uint32_t height);
+
+ uint32_t width;
+ uint32_t height;
+};
+#endif
#endif // !__WINDOW_HPP_
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 43a9858..77614b2 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,3 +1,5 @@
+add_definitions(-DNOMINMAX -D_USE_MATH_DEFINES)
+
include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(${Vulkan_INCLUDE_DIRS})
diff --git a/src/main.cpp b/src/main.cpp
index 5bd2f6e..5b321ff 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -4,8 +4,6 @@
#include <cstring>
#include <cstdio>
#include <cassert>
-#include <unistd.h>
-#include <dlfcn.h>
#include "rt.hpp"
#include "vk-renderer.hpp"
@@ -70,6 +68,16 @@ void random_scene(sphere *world) {
int main() {
RENDERDOC_API_1_1_2 *rdoc_api = NULL;
+#ifdef WINDOWS
+ // At init, on windows
+ if(HMODULE mod = GetModuleHandleA("renderdoc.dll"))
+ {
+ pRENDERDOC_GetAPI RENDERDOC_GetAPI =
+ (pRENDERDOC_GetAPI)GetProcAddress(mod, "RENDERDOC_GetAPI");
+ int ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_1_2, (void **)&rdoc_api);
+ assert(ret == 1);
+ }
+#elif LINUX
// At init, on linux/android.
// For android replace librenderdoc.so with libVkLayer_GLES_RenderDoc.so
if(void *mod = dlopen("librenderdoc.so", RTLD_NOW | RTLD_NOLOAD))
@@ -78,6 +86,7 @@ int main() {
int ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_1_2, (void **)&rdoc_api);
assert(ret == 1);
}
+#endif
// Image dimensions
// const float aspect_ratio = 16.0 / 9.0;
@@ -150,8 +159,6 @@ int main() {
// stop the capture
if(rdoc_api) rdoc_api->EndFrameCapture(NULL, NULL);
- pause();
-
//-------------------------
// GPU path tracer
//-------------------------
diff --git a/src/vk-renderer.cpp b/src/vk-renderer.cpp
index a34b83d..ea7a9cb 100644
--- a/src/vk-renderer.cpp
+++ b/src/vk-renderer.cpp
@@ -150,7 +150,9 @@ void vkrenderer::create_instance() {
std::vector<const char*> extensions = {
VK_EXT_DEBUG_UTILS_EXTENSION_NAME,
"VK_KHR_surface",
+#ifdef LINUX
"VK_KHR_xcb_surface"
+#endif
};
VkInstanceCreateInfo instance_create_info = {};
@@ -192,6 +194,7 @@ void vkrenderer::create_debugger() {
}
void vkrenderer::create_surface(window& wnd) {
+#ifdef LINUX
VkXcbSurfaceCreateInfoKHR create_info = {};
create_info.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
create_info.pNext = nullptr;
@@ -200,6 +203,7 @@ void vkrenderer::create_surface(window& wnd) {
create_info.window = wnd.win;
VKRESULT(vkCreateXcbSurfaceKHR(instance, &create_info, nullptr, &platform_surface))
+#endif
}
void vkrenderer::create_device() {
diff --git a/src/vulkan-loader.cpp b/src/vulkan-loader.cpp
index 17ddb31..4590cff 100644
--- a/src/vulkan-loader.cpp
+++ b/src/vulkan-loader.cpp
@@ -1,13 +1,14 @@
#include "vulkan-loader.hpp"
#include <iostream>
+#include "rt.hpp"
#if defined(WINDOWS)
HMODULE vulkanLibrary = LoadLibrary("vulkan-1.dll");
#define LoadProcAddress GetProcAddress
-#elif defined(__linux__)
+#elif defined(LINUX)
#include <dlfcn.h>
void *vulkanLibrary = dlopen( "libvulkan.so.1", RTLD_NOW );
diff --git a/src/window.cpp b/src/window.cpp
index 1bfc903..d901e66 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1,5 +1,6 @@
#include "window.hpp"
+#ifdef LINUX
window::window(uint32_t width, uint32_t height)
:width(width), height(height) {
connection = xcb_connect(NULL, NULL);
@@ -27,3 +28,8 @@ window::window(uint32_t width, uint32_t height)
xcb_map_window(connection, win);
xcb_flush(connection);
}
+#elif defined(WINDOWS)
+window::window(uint32_t width, uint32_t height)
+ :width(width), height(height) {
+}
+#endif