Merge remote-tracking branch 'refs/remotes/tpgc/main'

v1
Brett 2023-04-08 12:44:49 -04:00
commit 94624bddec
8 changed files with 82 additions and 18 deletions

View File

@ -55,7 +55,7 @@ if(${ZLIB_FOUND})
endif() endif()
if(MSVC) if(MSVC)
target_compile_options(BLT PRIVATE /W4) #target_compile_options(BLT PRIVATE /W4)
else() else()
# perhaps we should warn on usused variables, but BLT will have lots of them. # perhaps we should warn on usused variables, but BLT will have lots of them.
target_compile_options(BLT PRIVATE -Wall -Wextra -Wpedantic) target_compile_options(BLT PRIVATE -Wall -Wextra -Wpedantic)
@ -66,8 +66,10 @@ message("BLT ${CMAKE_PROJECT_VERSION} Successfully included!")
if(${BUILD_TESTS}) if(${BUILD_TESTS})
project(BLT_TESTS) project(BLT_TESTS)
if(${CMAKE_BUILD_TYPE} MATCHES Debug AND LINUX)
add_compile_options(-fsanitize=address) add_compile_options(-fsanitize=address)
add_link_options(-fsanitize=address) add_link_options(-fsanitize=address)
endif()
file(GLOB_RECURSE TESTS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/tests/*.cpp") file(GLOB_RECURSE TESTS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/tests/*.cpp")
@ -76,7 +78,10 @@ if(${BUILD_TESTS})
target_link_libraries(BLT_TESTS PUBLIC BLT) target_link_libraries(BLT_TESTS PUBLIC BLT)
if(MSVC) if(MSVC)
target_compile_options(BLT_TESTS PRIVATE /W4) #target_compile_options(BLT_TESTS PRIVATE /W4)
if(${CMAKE_BUILD_TYPE} MATCHES Debug)
target_link_options(BLT_TESTS PRIVATE /DEBUG)
endif()
else() else()
target_compile_options(BLT_TESTS PRIVATE -Wall -Wextra -Wpedantic) target_compile_options(BLT_TESTS PRIVATE -Wall -Wextra -Wpedantic)
endif() endif()

41
CMakeSettings.json Normal file
View File

@ -0,0 +1,41 @@
{
"configurations": [
{
"name": "x64-Debug",
"generator": "Visual Studio 17 2022 Win64",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"variables": [
{
"name": "BUILD_TESTS",
"value": "True",
"type": "BOOL"
}
]
},
{
"name": "x64-Release",
"generator": "Visual Studio 17 2022 Win64",
"configurationType": "Release",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x64_x64" ],
"intelliSenseMode": "windows-msvc-x64",
"variables": [
{
"name": "BUILD_TESTS",
"value": "True",
"type": "BOOL"
}
]
}
]
}

View File

@ -9,6 +9,11 @@
#include <blt/math/vectors.h> #include <blt/math/vectors.h>
#ifndef M_PI
// MSVC does not have M_PI
# define M_PI 3.14159265358979323846
#endif
namespace blt { namespace blt {
class mat4x4 { class mat4x4 {

View File

@ -20,7 +20,15 @@ namespace blt {
return v1 >= v2 - EPSILON && v1 <= v2 + EPSILON; return v1 >= v2 - EPSILON && v1 <= v2 + EPSILON;
} }
#define MSVC_COMPILER (!defined(__GNUC__) && !defined(__clang__))
#ifdef MSVC_COMPILER
template<typename T, uint32_t size>
#else
// STFINAE is broken in MSVC?
template<typename T, uint32_t size, typename std::enable_if<std::is_arithmetic<T>::value>::type* = nullptr> template<typename T, uint32_t size, typename std::enable_if<std::is_arithmetic<T>::value>::type* = nullptr>
#endif
struct vec { struct vec {
private: private:
T elements[size]{}; T elements[size]{};
@ -78,7 +86,7 @@ namespace blt {
} }
[[nodiscard]] inline vec<T, size> normalize() const { [[nodiscard]] inline vec<T, size> normalize() const {
auto mag = this->magnitude(); T mag = this->magnitude();
if (mag == 0) if (mag == 0)
return vec<T, size>(*this); return vec<T, size>(*this);
return *this / mag; return *this / mag;
@ -160,8 +168,8 @@ namespace blt {
} }
static inline constexpr vec<T, size> project(const vec<T, size>& u, const vec<T, size>& v){ static inline constexpr vec<T, size> project(const vec<T, size>& u, const vec<T, size>& v){
float du = dot(u); T du = dot(u);
float dv = dot(v); T dv = dot(v);
return (du / dv) * v; return (du / dv) * v;
} }
}; };
@ -183,7 +191,7 @@ namespace blt {
} }
template<typename T, uint32_t size> template<typename T, uint32_t size>
inline constexpr vec<T, size> operator+(const vec<T, size>& left, float f) { inline constexpr vec<T, size> operator+(const vec<T, size>& left, T f) {
T initializer[size]; T initializer[size];
for (uint32_t i = 0; i < size; i++) for (uint32_t i = 0; i < size; i++)
initializer[i] = left[i] + f; initializer[i] = left[i] + f;
@ -191,7 +199,7 @@ namespace blt {
} }
template<typename T, uint32_t size> template<typename T, uint32_t size>
inline constexpr vec<T, size> operator-(const vec<T, size>& left, float f) { inline constexpr vec<T, size> operator-(const vec<T, size>& left, T f) {
T initializer[size]; T initializer[size];
for (uint32_t i = 0; i < size; i++) for (uint32_t i = 0; i < size; i++)
initializer[i] = left[i] + f; initializer[i] = left[i] + f;
@ -199,7 +207,7 @@ namespace blt {
} }
template<typename T, uint32_t size> template<typename T, uint32_t size>
inline constexpr vec<T, size> operator+(float f, const vec<T, size>& right) { inline constexpr vec<T, size> operator+(T f, const vec<T, size>& right) {
T initializer[size]; T initializer[size];
for (uint32_t i = 0; i < size; i++) for (uint32_t i = 0; i < size; i++)
initializer[i] = f + right[i]; initializer[i] = f + right[i];
@ -207,7 +215,7 @@ namespace blt {
} }
template<typename T, uint32_t size> template<typename T, uint32_t size>
inline constexpr vec<T, size> operator-(float f, const vec<T, size>& right) { inline constexpr vec<T, size> operator-(T f, const vec<T, size>& right) {
T initializer[size]; T initializer[size];
for (uint32_t i = 0; i < size; i++) for (uint32_t i = 0; i < size; i++)
initializer[i] = f - right[i]; initializer[i] = f - right[i];
@ -223,7 +231,7 @@ namespace blt {
} }
template<typename T, uint32_t size> template<typename T, uint32_t size>
inline constexpr vec<T, size> operator*(const vec<T, size>& left, float f) { inline constexpr vec<T, size> operator*(const vec<T, size>& left, T f) {
T initializer[size]; T initializer[size];
for (uint32_t i = 0; i < size; i++) for (uint32_t i = 0; i < size; i++)
initializer[i] = left[i] * f; initializer[i] = left[i] * f;
@ -231,7 +239,7 @@ namespace blt {
} }
template<typename T, uint32_t size> template<typename T, uint32_t size>
inline constexpr vec<T, size> operator*(float f, const vec<T, size>& right) { inline constexpr vec<T, size> operator*(T f, const vec<T, size>& right) {
T initializer[size]; T initializer[size];
for (uint32_t i = 0; i < size; i++) for (uint32_t i = 0; i < size; i++)
initializer[i] = f * right[i]; initializer[i] = f * right[i];
@ -239,7 +247,7 @@ namespace blt {
} }
template<typename T, uint32_t size> template<typename T, uint32_t size>
inline constexpr vec<T, size> operator/(const vec<T, size>& left, float f) { inline constexpr vec<T, size> operator/(const vec<T, size>& left, T f) {
T initializer[size]; T initializer[size];
for (uint32_t i = 0; i < size; i++) for (uint32_t i = 0; i < size; i++)
initializer[i] = left[i] / f; initializer[i] = left[i] / f;

View File

@ -25,7 +25,7 @@ namespace blt::fs {
// 32768 block size seems the fastest on my system // 32768 block size seems the fastest on my system
unsigned long m_bufferSize; unsigned long m_bufferSize;
public: public:
explicit block_reader(unsigned long bufferSize): m_bufferSize(bufferSize) {} explicit block_reader(size_t bufferSize): m_bufferSize(bufferSize) {}
/** /**
* Reads bytes from the internal filesystem implementation * Reads bytes from the internal filesystem implementation

View File

@ -88,7 +88,7 @@ namespace blt::string {
// taken from java, adapted for c++. // taken from java, adapted for c++.
static inline utf8_string createUTFString(const std::string& str) { static inline utf8_string createUTFString(const std::string& str) {
const unsigned int strlen = str.size(); const unsigned int strlen = (unsigned int) str.size();
unsigned int utflen = strlen; unsigned int utflen = strlen;
for (unsigned int i = 0; i < strlen; i++) { for (unsigned int i = 0; i < strlen; i++) {

View File

@ -24,6 +24,7 @@ std::vector<std::string> blt::fs::getLinesFromFile(const std::string& path) {
shaderSource = shaderStream.str(); shaderSource = shaderStream.str();
} catch (std::ifstream::failure& e) { } catch (std::ifstream::failure& e) {
BLT_WARN("Unable to read file '%s'!\n", path.c_str()); BLT_WARN("Unable to read file '%s'!\n", path.c_str());
BLT_WARN("Exception: %s", e.what());
throw std::runtime_error("Failed to read file!\n"); throw std::runtime_error("Failed to read file!\n");
} }
@ -63,6 +64,7 @@ std::vector<std::string> blt::fs::recursiveShaderInclude(const std::string& path
includes.insert({i, recursiveShaderInclude((pathOnly + "/" + file))}); includes.insert({i, recursiveShaderInclude((pathOnly + "/" + file))});
} catch (std::exception& e) { } catch (std::exception& e) {
BLT_FATAL("Shader file contains an invalid #include statement. (Missing < or \")\n"); BLT_FATAL("Shader file contains an invalid #include statement. (Missing < or \")\n");
BLT_FATAL("Exception: %s", e.what());
std::abort(); std::abort();
} }
} }

View File

@ -167,7 +167,10 @@ namespace blt::logging {
std::string formattedString; std::string formattedString;
applyFormatting(format, formattedString, args); applyFormatting(format, formattedString, args);
bool hasEndingLinefeed = formattedString[formattedString.length()-1] == '\n'; bool hasEndingLinefeed = false;
if (formattedString.length() > 0)
hasEndingLinefeed = formattedString[formattedString.length() - 1] == '\n';
if (hasEndingLinefeed) if (hasEndingLinefeed)
formattedString = formattedString.substr(0, formattedString.length()-1); formattedString = formattedString.substr(0, formattedString.length()-1);