Compare commits

..

3 Commits

Author SHA1 Message Date
a9eff7d320 Merge pull request #157 from orange-cpp/feature/mesh_improvement
Feature/mesh improvement
2026-02-26 16:39:21 +03:00
211e4c3d9b optimization 2026-02-26 16:19:54 +03:00
74dc2234f7 fixed collider when rotated 2026-02-26 16:17:41 +03:00
11 changed files with 29 additions and 68 deletions

View File

@@ -1,7 +0,0 @@
<component name="ProjectDictionaryState">
<dictionary name="project">
<words>
<w>vmprotect</w>
</words>
</dictionary>
</component>

View File

@@ -31,10 +31,6 @@ option(OMATH_SUPRESS_SAFETY_CHECKS
option(OMATH_ENABLE_COVERAGE "Enable coverage" OFF)
option(OMATH_ENABLE_FORCE_INLINE
"Will for compiler to make some functions to be force inlined no matter what" ON)
option(OMATH_VMPROTECT_INTEGRATION
"omath will use vmprotect sdk to protect sensitive parts of code from reverse engineering"
OFF)
if(VCPKG_MANIFEST_FEATURES)
foreach(omath_feature IN LISTS VCPKG_MANIFEST_FEATURES)
if(omath_feature STREQUAL "imgui")
@@ -47,8 +43,6 @@ if(VCPKG_MANIFEST_FEATURES)
set(OMATH_BUILD_BENCHMARK ON)
elseif(omath_feature STREQUAL "examples")
set(OMATH_BUILD_EXAMPLES ON)
elseif(omath_feature STREQUAL "vmprotect")
set(OMATH_VMPROTECT_INTEGRATION ON)
endif()
endforeach()
@@ -113,11 +107,6 @@ if(OMATH_IMGUI_INTEGRATION)
endif()
if(OMATH_VMPROTECT_INTEGRATION)
find_package(vmprotect_sdk CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC vmprotect_sdk::vmprotect_sdk)
endif()
if(OMATH_USE_AVX2)
target_compile_definitions(${PROJECT_NAME} PUBLIC OMATH_USE_AVX2)
endif()

View File

@@ -145,7 +145,7 @@
"hidden": true,
"inherits": ["linux-base", "vcpkg-base"],
"cacheVariables": {
"VCPKG_MANIFEST_FEATURES": "tests;imgui;avx2;vmprotect;examples"
"VCPKG_MANIFEST_FEATURES": "tests;imgui;avx2"
}
},
{

View File

@@ -2,7 +2,7 @@ add_subdirectory(example_barycentric)
add_subdirectory(example_glfw3)
add_subdirectory(example_proj_mat_builder)
add_subdirectory(example_signature_scan)
add_subdirectory(exmple_var_encryption)
if(OMATH_ENABLE_VALGRIND)
omath_setup_valgrind(example_projection_matrix_builder)
omath_setup_valgrind(example_signature_scan)

View File

@@ -1,10 +0,0 @@
project(example_var_encryption)
add_executable(${PROJECT_NAME} main.cpp)
set_target_properties(
${PROJECT_NAME}
PROPERTIES CXX_STANDARD 23
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}")
target_link_libraries(${PROJECT_NAME} PRIVATE omath::omath)

View File

@@ -1,15 +0,0 @@
//
// Created by orange on 24.02.2026.
//
#include "omath/containers/encrypted_variable.hpp"
#include <omath/omath.hpp>
#include <print>
int main()
{
OMATH_DEF_CRYPT_VAR(int, 64) var{5};
var.encrypt();
std::println("{}", var.value());
var.decrypt();
std::println("{}", var.value());
return var.value();
}

View File

@@ -46,9 +46,27 @@ namespace omath::collision
[[nodiscard]]
const VertexType& find_furthest_vertex(const VectorType& direction) const
{
// The support query arrives in world space, but vertex positions are stored
// in local space. We need argmax_v { world(v) · d }.
//
// world(v) = M·v (ignoring translation, which is constant across vertices)
// world(v) · d = v · Mᵀ·d
//
// So we transform the direction to local space once — O(1) — then compare
// raw local positions, which is far cheaper than calling
// vertex_position_to_world_space (full 4×4 multiply) for every vertex.
//
// d_local = upper-left 3×3 of M, transposed, times d_world:
// d_local[j] = sum_i M.at(i,j) * d[i] (i.e. column j of M dotted with d)
const auto& m = m_mesh.get_to_world_matrix();
const VectorType d_local = {
m.at(0, 0) * direction.x + m.at(1, 0) * direction.y + m.at(2, 0) * direction.z,
m.at(0, 1) * direction.x + m.at(1, 1) * direction.y + m.at(2, 1) * direction.z,
m.at(0, 2) * direction.x + m.at(1, 2) * direction.y + m.at(2, 2) * direction.z,
};
return *std::ranges::max_element(
m_mesh.m_vertex_buffer, [&direction](const auto& first, const auto& second)
{ return first.position.dot(direction) < second.position.dot(direction); });
m_mesh.m_vertex_buffer, [&d_local](const auto& first, const auto& second)
{ return first.position.dot(d_local) < second.position.dot(d_local); });
}
MeshType m_mesh;
};

View File

@@ -2,14 +2,10 @@
// Created by Vladislav on 04.01.2026.
//
#pragma once
#include <VMProtectSDK.h>
#include <array>
#include <cstddef>
#include <cstdint>
#include <span>
#include <source_location>
#ifdef OMATH_ENABLE_FORCE_INLINE
#ifdef _MSC_VER
#define OMATH_FORCE_INLINE __forceinline
@@ -114,18 +110,16 @@ namespace omath
bool m_is_encrypted{};
value_type m_data{};
OMATH_FORCE_INLINE void xor_contained_var_by_key()
OMATH_FORCE_INLINE constexpr void xor_contained_var_by_key()
{
VMProtectBeginVirtualization(nullptr);
// Safe, keeps const-correctness, and avoids reinterpret_cast issues
auto bytes = std::as_writable_bytes(std::span<value_type, 1>{&m_data, 1});
for (std::size_t i = 0; i < bytes.size(); ++i)
{
const auto k = static_cast<std::uint8_t>(key[i % key_size] + (i * key_size));
const std::uint8_t k = static_cast<std::uint8_t>(key[i % key_size] + (i * key_size));
bytes[i] ^= static_cast<std::byte>(k);
}
VMProtectEnd();
}
public:
@@ -140,7 +134,7 @@ namespace omath
return m_is_encrypted;
}
OMATH_FORCE_INLINE void decrypt()
OMATH_FORCE_INLINE constexpr void decrypt()
{
if (!m_is_encrypted)
return;
@@ -148,7 +142,7 @@ namespace omath
m_is_encrypted = false;
}
OMATH_FORCE_INLINE void encrypt()
OMATH_FORCE_INLINE constexpr void encrypt()
{
if (m_is_encrypted)
return;

View File

@@ -8,7 +8,6 @@
#include <utility>
#include <variant>
#include <vector>
#include <VMProtectSDK.h>
#pragma pack(push, 1)

View File

@@ -1,7 +1,7 @@
{
"default-registry": {
"kind": "git",
"baseline": "05442024c3fda64320bd25d2251cc9807b84fb6f",
"baseline": "b1b19307e2d2ec1eefbdb7ea069de7d4bcd31f01",
"repository": "https://github.com/microsoft/vcpkg"
},
"registries": [

View File

@@ -17,16 +17,9 @@
],
"features": {
"avx2": {
"description": "omath will use AVX2 to boost performance",
"description": "Omath will use AVX2 to boost performance",
"supports": "!arm"
},
"vmprotect": {
"description": "omath will use vmprotect sdk to protect sensitive parts of code from reverse engineering",
"supports": "windows | linux | osx | android",
"dependencies": [
"orange-vmprotect-sdk"
]
},
"benchmark": {
"description": "Build benchmarks",
"dependencies": [
@@ -42,7 +35,7 @@
]
},
"imgui": {
"description": "omath will define method to convert omath types to imgui types",
"description": "Omath will define method to convert omath types to imgui types",
"dependencies": [
"imgui"
]