Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,22 @@ option(OMATH_BUILD_TESTS "Build unit tests" OFF)
option(OMATH_THREAT_WARNING_AS_ERROR "Set highest level of warnings and force compiler to treat them as errors" ON)
option(OMATH_BUILD_AS_SHARED_LIBRARY "Build Omath as .so or .dll" OFF)
option(OMATH_USE_AVX2 "Omath will use AVX2 to boost performance" ON)

option(OMATH_IMGUI_INTEGRATION "Omath will define method to convert omath types to imgui types" OFF)

if (OMATH_BUILD_AS_SHARED_LIBRARY)
add_library(omath SHARED source/Vector3.cpp)
else()
add_library(omath STATIC source/Matrix.cpp)
endif()

if (OMATH_IMGUI_INTEGRATION)
target_compile_definitions(omath PUBLIC OMATH_IMGUI_INTEGRATION)
endif()

if (OMATH_USE_AVX2)
target_compile_definitions(omath PUBLIC OMATH_USE_AVX2)
endif()

set_target_properties(omath PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}"
Expand All @@ -31,9 +39,6 @@ endif()

target_compile_features(omath PUBLIC cxx_std_23)

if (OMATH_USE_AVX2)
target_compile_definitions(omath PUBLIC OMATH_USE_AVX2)
endif()

add_subdirectory(source)

Expand Down
39 changes: 22 additions & 17 deletions include/omath/Vector2.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,19 @@
//

#pragma once
#include <tuple>
#include <cmath>
#include <tuple>

#ifdef OMATH_IMGUI_INTEGRATION
#include <imgui.h>
#endif


namespace omath
{

template<class Type> requires std::is_arithmetic_v<Type>
template<class Type>
requires std::is_arithmetic_v<Type>
class Vector2
{
public:
Expand All @@ -19,7 +25,9 @@ namespace omath
// Constructors
constexpr Vector2() = default;

constexpr Vector2(const Type& x, const Type& y) : x(x), y(y) {}
constexpr Vector2(const Type& x, const Type& y) : x(x), y(y)
{
}

// Equality operators
[[nodiscard]]
Expand Down Expand Up @@ -145,23 +153,12 @@ namespace omath

constexpr Vector2& Abs()
{
//FIXME: Replace with std::abs, if it will become constexprable
// FIXME: Replace with std::abs, if it will become constexprable
x = x < 0 ? -x : x;
y = y < 0 ? -y : y;
return *this;
}

template<class type>
[[nodiscard]] constexpr const type& As() const
{
return *reinterpret_cast<const type*>(this);
}
template<class type>
[[nodiscard]] constexpr type& As()
{
return *reinterpret_cast<type*>(this);
}

[[nodiscard]] constexpr Vector2 operator-() const
{
return {-x, -y};
Expand All @@ -188,7 +185,7 @@ namespace omath
return {x / fl, y / fl};
}

// Sum of elements
// Sum of elements
[[nodiscard]] constexpr Type Sum() const
{
return x + y;
Expand All @@ -199,5 +196,13 @@ namespace omath
{
return std::make_tuple(x, y);
}

#ifdef OMATH_IMGUI_INTEGRATION
[[nodiscard]]
ImVec2 ToImVec2() const
{
return {static_cast<float>(this->x), static_cast<float>(this->y)};
}
#endif
};
}
} // namespace omath
7 changes: 3 additions & 4 deletions include/omath/Vector3.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@

#pragma once

#include "Vector2.hpp"
#include <cstdint>
#include <expected>
#include <functional>
#include "omath/Vector2.hpp"
#include "omath/Angle.hpp"
#include <expected>
#include <immintrin.h>

#include "omath/Vector2.hpp"

namespace omath
{
Expand Down
15 changes: 15 additions & 0 deletions include/omath/Vector4.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <omath/Vector3.hpp>
#include <algorithm>


namespace omath
{
template <class Type>
Expand Down Expand Up @@ -154,5 +155,19 @@ namespace omath
{
return Vector3<Type>::Sum() + w;
}

#ifdef OMATH_IMGUI_INTEGRATION
[[nodiscard]]
ImVec4 ToImVec4() const
{
return
{
static_cast<float>(this->x),
static_cast<float>(this->y),
static_cast<float>(this->z),
static_cast<float>(w),
};
}
#endif
};
}