blob: aa8e5041b2578941ee1b6454aa365cc26d0f5150 [file] [log] [blame]
Adam Sawickif1a793c2018-03-13 15:42:22 +01001#ifndef COMMON_H_
2#define COMMON_H_
3
Adam Sawickib8333fb2018-03-13 16:15:53 +01004#include "VmaUsage.h"
5
Adam Sawickif1a793c2018-03-13 15:42:22 +01006#ifdef _WIN32
7
8#define MATHFU_COMPILE_WITHOUT_SIMD_SUPPORT
9#include <mathfu/glsl_mappings.h>
10#include <mathfu/constants.h>
11
Adam Sawickib8333fb2018-03-13 16:15:53 +010012#include <iostream>
Adam Sawickif1a793c2018-03-13 15:42:22 +010013#include <fstream>
14#include <vector>
Adam Sawickif1a793c2018-03-13 15:42:22 +010015#include <memory>
16#include <algorithm>
17#include <numeric>
18#include <array>
19#include <type_traits>
20#include <utility>
Adam Sawickib8333fb2018-03-13 16:15:53 +010021#include <chrono>
22#include <string>
Adam Sawickif1a793c2018-03-13 15:42:22 +010023
Adam Sawickif1a793c2018-03-13 15:42:22 +010024#include <cassert>
25#include <cstdlib>
26#include <cstdio>
Adam Sawickib8333fb2018-03-13 16:15:53 +010027#include <cstdarg>
28
29typedef std::chrono::high_resolution_clock::time_point time_point;
30typedef std::chrono::high_resolution_clock::duration duration;
Adam Sawickif1a793c2018-03-13 15:42:22 +010031
32#define ERR_GUARD_VULKAN(Expr) do { VkResult res__ = (Expr); if (res__ < 0) assert(0); } while(0)
33
Adam Sawickib8333fb2018-03-13 16:15:53 +010034extern VkPhysicalDevice g_hPhysicalDevice;
35extern VkDevice g_hDevice;
36extern VmaAllocator g_hAllocator;
37extern bool g_MemoryAliasingWarningEnabled;
38
39inline float ToFloatSeconds(duration d)
40{
41 return std::chrono::duration_cast<std::chrono::duration<float>>(d).count();
42}
43
44template <typename T>
45inline T ceil_div(T x, T y)
46{
47 return (x+y-1) / y;
48}
49
50template <typename T>
51static inline T align_up(T val, T align)
52{
53 return (val + align - 1) / align * align;
54}
55
56class RandomNumberGenerator
57{
58public:
59 RandomNumberGenerator() : m_Value{GetTickCount()} {}
60 RandomNumberGenerator(uint32_t seed) : m_Value{seed} { }
61 void Seed(uint32_t seed) { m_Value = seed; }
62 uint32_t Generate() { return GenerateFast() ^ (GenerateFast() >> 7); }
63
64private:
65 uint32_t m_Value;
66 uint32_t GenerateFast() { return m_Value = (m_Value * 196314165 + 907633515); }
67};
68
69void ReadFile(std::vector<char>& out, const char* fileName);
70
71enum class CONSOLE_COLOR
72{
73 INFO,
74 NORMAL,
75 WARNING,
76 ERROR_,
77 COUNT
78};
79
80void SetConsoleColor(CONSOLE_COLOR color);
81
82void PrintMessage(CONSOLE_COLOR color, const char* msg);
83void PrintMessage(CONSOLE_COLOR color, const wchar_t* msg);
84
85inline void Print(const char* msg) { PrintMessage(CONSOLE_COLOR::NORMAL, msg); }
86inline void Print(const wchar_t* msg) { PrintMessage(CONSOLE_COLOR::NORMAL, msg); }
87inline void PrintWarning(const char* msg) { PrintMessage(CONSOLE_COLOR::WARNING, msg); }
88inline void PrintWarning(const wchar_t* msg) { PrintMessage(CONSOLE_COLOR::WARNING, msg); }
89inline void PrintError(const char* msg) { PrintMessage(CONSOLE_COLOR::ERROR_, msg); }
90inline void PrintError(const wchar_t* msg) { PrintMessage(CONSOLE_COLOR::ERROR_, msg); }
91
92void PrintMessageV(CONSOLE_COLOR color, const char* format, va_list argList);
93void PrintMessageV(CONSOLE_COLOR color, const wchar_t* format, va_list argList);
94void PrintMessageF(CONSOLE_COLOR color, const char* format, ...);
95void PrintMessageF(CONSOLE_COLOR color, const wchar_t* format, ...);
96void PrintWarningF(const char* format, ...);
97void PrintWarningF(const wchar_t* format, ...);
98void PrintErrorF(const char* format, ...);
99void PrintErrorF(const wchar_t* format, ...);
100
101void SaveFile(const wchar_t* filePath, const void* data, size_t dataSize);
102
Adam Sawickif1a793c2018-03-13 15:42:22 +0100103#endif // #ifdef _WIN32
104
105#endif