Compare commits

...

24 Commits

Author SHA1 Message Date
Recep Aslantas
6626d2b74f Update affine.h 2020-11-22 01:25:34 +03:00
Recep Aslantas
5bda762df6 use epsilon to compare results in glm_uniscaled() 2020-11-22 01:14:18 +03:00
Recep Aslantas
f9824a8dc6 test: use custom epsilon to compare 2020-11-22 00:59:48 +03:00
Recep Aslantas
ccd3058adc remove CGLM_USE_DEFAULT_EPSILON
* to override float epsilon we just need to define GLM_FLT_EPSILON
* CGLM_USE_DEFAULT_EPSILON was redundant, also it forces to override system default epsilon which may not be good idea, because not all systems may support smaller epsilon values
2020-11-22 00:38:57 +03:00
Recep Aslantas
4ab9ab4772 docs: fix/improve build documentation 2020-11-21 18:20:04 +03:00
Recep Aslantas
a5ff477fc8 doc: fix duplicate entry warning 2020-11-21 18:13:59 +03:00
Recep Aslantas
254570d006 Merge pull request #169 from podsvirov/docs-c-id-attribute-restrict
Fix Documentions WARNING for __restrict attribute
2020-11-21 18:11:28 +03:00
Konstantin Podsvirov
681f20d540 Fix Documentions WARNING for __restrict attribute
Add `__restrict` keyword to `c_id_attributes` added in `sphinx 3.0`.

Closes #167
2020-11-21 15:34:18 +03:00
Recep Aslantas
fd87f6e2c3 Merge pull request #168 from podsvirov/fix-fix-docs-for-vec2
Fix fix docs for glm_vec2()
2020-11-21 14:32:48 +03:00
Konstantin Podsvirov
2c12c6dce5 Fix fix docs for glm_vec2()
Remove extra `\` symbol.
2020-11-21 14:05:19 +03:00
Recep Aslantas
5619527fd3 Update cglm.podspec 2020-11-19 22:42:12 +03:00
Recep Aslantas
8b1c3c3fc4 now working on v0.8.0 2020-11-19 22:21:21 +03:00
Recep Aslantas
ec852c7682 Merge pull request #164 from taisei-project/fix-cast-align
simd/x86: fix -Wcast-align warnings (gcc/clang)
2020-11-09 11:19:02 +03:00
Recep Aslantas
5433c9ed6c Merge pull request #165 from taisei-project/meson-install-option
meson: add 'install' option
2020-11-09 11:11:36 +03:00
Andrei Alexeyev
2a2d51624b meson: add 'install' option
This is useful for people who want to use cglm as a meson subproject
without polluting the main project's install target.
2020-11-08 20:30:24 +02:00
Andrei Alexeyev
5fa908602f simd/x86: fix -Wcast-align warnings (gcc/clang)
This modifies glmm_{load,store}3 functions to make the compiler assume
the v pointer is appropriately aligned for the type it is being cast to.
Not tested with CGLM_ALL_UNALIGNED, but it probably doesn't matter.
2020-11-08 20:09:57 +02:00
Recep Aslantas
9da74f9654 Update CREDITS 2020-11-08 17:57:34 +03:00
Recep Aslantas
dddb077b13 ignore xcode user data 2020-11-08 17:42:55 +03:00
Recep Aslantas
6107287c9a Merge pull request #163 from emersion/glm-vec2-doc-fix
Fix docs for glm_vec2()
2020-10-17 09:19:33 +03:00
Simon Ser
7dccbef6e3 Fix docs for glm_vec2()
The prototype takes a float *, which can be vec3 or vec4.
2020-10-16 22:32:24 +02:00
Recep Aslantas
d920a62be2 Merge pull request #160 from smumryak/master
Added simple swiftpm package file
2020-09-08 11:55:18 +03:00
Serhii Mumriak
73f32b9ef7 Updated README.md with swift configuration information 2020-09-07 17:26:33 -07:00
Serhii Mumriak
2e5257bcc1 Updated 160 PR according review comments. 2020-09-07 17:09:37 -07:00
Serhii Mumriak
65b0b461ab Added simple swiftpm package file with module map and empty C file to trick the compiler to build the empty C target. 2020-09-05 20:39:12 -07:00
22 changed files with 172 additions and 46 deletions

1
.gitignore vendored
View File

@@ -75,3 +75,4 @@ Default-568h@2x.png
build/ build/
conftest.dir/* conftest.dir/*
confdefs.h confdefs.h
*.xcuserdatad

View File

@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.8.2) cmake_minimum_required(VERSION 3.8.2)
project(cglm VERSION 0.7.9 LANGUAGES C) project(cglm VERSION 0.8.0 LANGUAGES C)
set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED YES) set(CMAKE_C_STANDARD_REQUIRED YES)

View File

@@ -71,3 +71,6 @@ Authors:
Thomas Möller (tompa@clarus.se) Thomas Möller (tompa@clarus.se)
Ben Trumbore (wbt@graphics.cornell.edu) Ben Trumbore (wbt@graphics.cornell.edu)
Link to paper: http://webserver2.tecgraf.puc-rio.br/~mgattass/cg/trbRR/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf Link to paper: http://webserver2.tecgraf.puc-rio.br/~mgattass/cg/trbRR/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf
14. ARM NEON: Matrix Vector Multiplication
https://stackoverflow.com/a/57793352/2676533

44
Package.swift Normal file
View File

@@ -0,0 +1,44 @@
// swift-tools-version:5.2
import PackageDescription
let package = Package(
name: "cglm",
products: [
.library(name: "cglm", type: .static, targets: ["cglmHeader"]),
.library(name: "cglmc", targets: ["cglmCompiled"]),
],
dependencies: [],
targets: [
.target(
name: "cglmCompiled",
path: "./",
exclude: [
"./docs",
"./src/swift",
"./include",
"./test",
"./win",
],
sources: [
"./src",
],
publicHeadersPath: "./include"
),
.target(
name: "cglmHeader",
path: "./",
exclude: [
"./docs",
"./include",
"./test",
"./win",
],
sources: [
"./src/swift",
],
publicHeadersPath: "./include"
),
],
cLanguageStandard: .c11
)

View File

@@ -212,6 +212,38 @@ cglm_dep = dependency('cglm', fallback : 'cglm', 'cglm_dep')
executable('exe', 'src/main.c', dependencies : cglm_dep) executable('exe', 'src/main.c', dependencies : cglm_dep)
``` ```
### Swift (Swift Package Manager)
Currently only default build options are supported. Add **cglm** dependency to your project:
```swift
...
Package(
...
dependencies: [
...
.package(url: "https://github.com/recp/cglm", .branch("master")),
]
...
)
```
Now add **cgml** as a dependency to your target. Product choices are:
- **cglm** for inlined version of the library which can be linked only statically
- **cglmc** for a compiled version of the library with no linking limitation
```swift
...
.target(
...
dependencies: [
...
.product(name: "cglm", package: "cglm"),
]
...
)
...
```
### Unix (Autotools) ### Unix (Autotools)

View File

@@ -2,10 +2,10 @@ Pod::Spec.new do |s|
# Description # Description
s.name = "cglm" s.name = "cglm"
s.version = "0.7.2" s.version = "0.7.9"
s.summary = "📽 Optimized OpenGL/Graphics Math (glm) for C" s.summary = "📽 Highly Optimized Graphics Math (glm) for C"
s.description = <<-DESC s.description = <<-DESC
cglm is math library for graphics programming for C. It is similar to original glm but it is written for C instead of C++ (you can use here too). See the documentation or README for all features. cglm is math library for graphics programming for C. See the documentation or README for all features.
DESC DESC
s.documentation_url = "http://cglm.readthedocs.io" s.documentation_url = "http://cglm.readthedocs.io"
@@ -25,4 +25,13 @@ cglm is math library for graphics programming for C. It is similar to original g
# Linking # Linking
s.library = "m" s.library = "m"
# Configuration
s.pod_target_xcconfig = {
'CLANG_ENABLE_MODULES' => 'NO',
'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES',
'CLANG_WARN_DOCUMENTATION_COMMENTS' => 'NO',
'GCC_C_LANGUAGE_STANDARD' => 'gnu11',
'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GLM_TESTS_NO_COLORFUL_OUTPUT'
}
end end

View File

@@ -7,7 +7,7 @@
#***************************************************************************** #*****************************************************************************
AC_PREREQ([2.69]) AC_PREREQ([2.69])
AC_INIT([cglm], [0.7.9], [info@recp.me]) AC_INIT([cglm], [0.8.0], [info@recp.me])
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects serial-tests]) AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects serial-tests])
# Don't use the default cflags (-O2 -g), we set ours manually in Makefile.am. # Don't use the default cflags (-O2 -g), we set ours manually in Makefile.am.

View File

@@ -50,7 +50,7 @@ If you don't want to install **cglm** to your system's folder you can get static
Meson (All platforms): Meson (All platforms):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash .. code-block::
:linenos: :linenos:
$ meson build # [Optional] --default-library=static $ meson build # [Optional] --default-library=static
@@ -60,7 +60,7 @@ Meson (All platforms):
**Meson Options:** **Meson Options:**
.. code-block:: CMake .. code-block::
:linenos: :linenos:
c_std=c11 c_std=c11
@@ -69,9 +69,9 @@ Meson (All platforms):
enable_tests=false # to run tests: ninja test enable_tests=false # to run tests: ninja test
**Use with your CMake project example** **Use with your Meson project**
.. code-block:: CMake .. code-block::
:linenos: :linenos:
# Clone cglm or create a cglm.wrap under <source_root>/subprojects # Clone cglm or create a cglm.wrap under <source_root>/subprojects

View File

@@ -25,7 +25,7 @@
# If your documentation needs a minimal Sphinx version, state it here. # If your documentation needs a minimal Sphinx version, state it here.
# #
# needs_sphinx = '1.0' # needs_sphinx = '3.0'
# Add any Sphinx extension module names here, as strings. They can be # Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
@@ -62,9 +62,9 @@ author = u'Recep Aslantas'
# built documents. # built documents.
# #
# The short X.Y version. # The short X.Y version.
version = u'0.7.9' version = u'0.8.0'
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = u'0.7.9' release = u'0.8.0'
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.
@@ -197,3 +197,7 @@ epub_exclude_files = ['search.html']
# If true, `todo` and `todoList` produce output, else they produce nothing. # If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = True todo_include_todos = True
# -- Options for the C domain ------------------------------------------------
c_id_attributes = ['__restrict']

View File

@@ -374,7 +374,7 @@ Functions documentation
| *[in]* **q** quaternion | *[in]* **q** quaternion
| *[in]* **pivot** pivot | *[in]* **pivot** pivot
.. c:function:: void glm_quat_rotate(mat4 m, versor q, mat4 dest) .. c:function:: void glm_quat_rotate_atm(mat4 m, versor q, vec3 pivot)
| rotate NEW transform matrix using quaternion at pivot point | rotate NEW transform matrix using quaternion at pivot point
| this creates rotation matrix, it assumes you don't have a matrix | this creates rotation matrix, it assumes you don't have a matrix

View File

@@ -55,12 +55,12 @@ Functions:
Functions documentation Functions documentation
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
.. c:function:: void glm_vec2(vec4 v4, vec2 dest) .. c:function:: void glm_vec2(float * v, vec2 dest)
init vec2 using vec3 init vec2 using vec3 or vec4
Parameters: Parameters:
| *[in]* **v3** vector3 | *[in]* **v** vector
| *[out]* **dest** destination | *[out]* **dest** destination
.. c:function:: void glm_vec2_copy(vec2 a, vec2 dest) .. c:function:: void glm_vec2_copy(vec2 a, vec2 dest)

View File

@@ -425,7 +425,7 @@ bool
glm_uniscaled(mat4 m) { glm_uniscaled(mat4 m) {
CGLM_ALIGN(8) vec3 s; CGLM_ALIGN(8) vec3 s;
glm_decompose_scalev(m, s); glm_decompose_scalev(m, s);
return glm_vec3_eq_all(s); return glm_vec3_eq_eps(s, s[0]);
} }
/*! /*!

View File

@@ -42,12 +42,18 @@
#include "types.h" #include "types.h"
#include "simd/intrin.h" #include "simd/intrin.h"
#ifndef CGLM_USE_DEFAULT_EPSILON /** CGLM_USE_DEFAULT_EPSILON is removed, to override float epsilon,
# ifndef GLM_FLT_EPSILON * just define GLM_FLT_EPSILON with epsilon value like below
# define GLM_FLT_EPSILON 1e-6 *
* #define GLM_FLT_EPSILON 1e-6f
*/
#ifndef GLM_FLT_EPSILON
# ifndef FLT_EPSILON
# define GLM_FLT_EPSILON 1e-6f
# else
# define GLM_FLT_EPSILON FLT_EPSILON
# endif # endif
#else
# define GLM_FLT_EPSILON FLT_EPSILON
#endif #endif
#endif /* cglm_common_h */ #endif /* cglm_common_h */

View File

@@ -175,7 +175,7 @@ glmm_load3(float v[3]) {
__m128i xy; __m128i xy;
__m128 z; __m128 z;
xy = _mm_loadl_epi64((const __m128i *)v); xy = _mm_loadl_epi64(CGLM_CASTPTR_ASSUME_ALIGNED(v, const __m128i));
z = _mm_load_ss(&v[2]); z = _mm_load_ss(&v[2]);
return _mm_movelh_ps(_mm_castsi128_ps(xy), z); return _mm_movelh_ps(_mm_castsi128_ps(xy), z);
@@ -184,7 +184,7 @@ glmm_load3(float v[3]) {
static inline static inline
void void
glmm_store3(float v[3], __m128 vx) { glmm_store3(float v[3], __m128 vx) {
_mm_storel_pi((__m64 *)&v[0], vx); _mm_storel_pi(CGLM_CASTPTR_ASSUME_ALIGNED(v, __m64), vx);
_mm_store_ss(&v[2], glmm_shuff1(vx, 2, 2, 2, 2)); _mm_store_ss(&v[2], glmm_shuff1(vx, 2, 2, 2, 2));
} }

View File

@@ -32,6 +32,16 @@
# define CGLM_ALIGN_MAT CGLM_ALIGN(16) # define CGLM_ALIGN_MAT CGLM_ALIGN(16)
#endif #endif
#ifdef __GNUC__
# define CGLM_ASSUME_ALIGNED(expr, alignment) \
__builtin_assume_aligned((expr), (alignment))
#else
# define CGLM_ASSUME_ALIGNED(expr, alignment) (expr)
#endif
#define CGLM_CASTPTR_ASSUME_ALIGNED(expr, type) \
((type*)CGLM_ASSUME_ALIGNED((expr), __alignof__(type)))
typedef float vec2[2]; typedef float vec2[2];
typedef float vec3[3]; typedef float vec3[3];
typedef int ivec3[3]; typedef int ivec3[3];

View File

@@ -9,7 +9,7 @@
#define cglm_version_h #define cglm_version_h
#define CGLM_VERSION_MAJOR 0 #define CGLM_VERSION_MAJOR 0
#define CGLM_VERSION_MINOR 7 #define CGLM_VERSION_MINOR 8
#define CGLM_VERSION_PATCH 9 #define CGLM_VERSION_PATCH 0
#endif /* cglm_version_h */ #endif /* cglm_version_h */

14
include/module.modulemap Normal file
View File

@@ -0,0 +1,14 @@
module cglm {
header "cglm/cglm.h"
header "cglm/struct.h"
export *
}
module cglmc {
header "cglm/cglm.h"
header "cglm/struct.h"
header "cglm/call.h"
export *
}

View File

@@ -1,5 +1,5 @@
project('cglm', 'c', project('cglm', 'c',
version : '0.7.9', version : '0.8.0',
license : 'mit', license : 'mit',
default_options : [ default_options : [
'c_std=c11', 'c_std=c11',
@@ -11,6 +11,7 @@ project('cglm', 'c',
cc = meson.get_compiler('c') cc = meson.get_compiler('c')
cglm_install = get_option('install')
cglm_deps = cc.find_library('m', required : false) cglm_deps = cc.find_library('m', required : false)
cglm_args = [] cglm_args = []
@@ -50,11 +51,9 @@ cglm_src = files(
'src/vec4.c' 'src/vec4.c'
) )
install_subdir('include/cglm', install_dir : get_option('includedir'))
cglm_lib = library('cglm', cglm_lib = library('cglm',
cglm_src, cglm_src,
install : true, install : cglm_install,
dependencies : cglm_deps, dependencies : cglm_deps,
c_args : [ build_args, cglm_args ] c_args : [ build_args, cglm_args ]
) )
@@ -71,17 +70,19 @@ if meson.version().version_compare('>= 0.54.0')
meson.override_dependency('cglm', cglm_dep) meson.override_dependency('cglm', cglm_dep)
endif endif
if cglm_install
install_subdir('include/cglm', install_dir : get_option('includedir'))
pkg = import('pkgconfig') pkg = import('pkgconfig')
pkg.generate(
pkg.generate( name : 'cglm',
name : 'cglm', libraries : cglm_lib,
libraries : cglm_lib, extra_cflags : cglm_args,
extra_cflags : cglm_args, version : meson.project_version(),
version : meson.project_version(), url : 'https://github.com/recp/cglm',
url : 'https://github.com/recp/cglm', description : 'OpenGL Mathematics (glm) for C'
description : 'OpenGL Mathematics (glm) for C' )
) endif
if get_option('build_tests') == true if get_option('build_tests') == true

View File

@@ -1 +1,2 @@
option('build_tests', type : 'boolean', value : false, description : 'Build tests') option('build_tests', type : 'boolean', value : false, description : 'Build tests')
option('install', type : 'boolean', value : true, description : 'Include the library, headers, and pkg-config file in the install target')

1
src/swift/empty.c Normal file
View File

@@ -0,0 +1 @@
// This empty file is needed to trick swiftpm to build the header-only version of cglm as swiftpm itself does not support C targets that have no source code files

View File

@@ -35,9 +35,9 @@ TEST_IMPL(camera_decomp) {
farVal = 100.0f; farVal = 100.0f;
glm_perspective(fovy, aspect, nearVal, farVal, proj); glm_perspective(fovy, aspect, nearVal, farVal, proj);
ASSERT(fabsf(aspect - glm_persp_aspect(proj)) < GLM_FLT_EPSILON) ASSERT(fabsf(aspect - glm_persp_aspect(proj)) < 1e-5f)
ASSERT(fabsf(fovy - glm_persp_fovy(proj)) < GLM_FLT_EPSILON) ASSERT(fabsf(fovy - glm_persp_fovy(proj)) < 1e-5f)
ASSERT(fabsf(49.984f - glm_deg(glm_persp_fovy(proj))) < GLM_FLT_EPSILON) ASSERT(fabsf(49.984f - glm_deg(glm_persp_fovy(proj))) < 1e-5f)
glm_persp_sizes(proj, fovy, sizes); glm_persp_sizes(proj, fovy, sizes);

View File

@@ -106,7 +106,7 @@ test_rand_quat(versor q);
CGLM_INLINE CGLM_INLINE
bool bool
test_eq(float a, float b) { test_eq(float a, float b) {
return fabsf(a - b) <= GLM_FLT_EPSILON * 10; return fabsf(a - b) <= 1e-5f;
} }
CGLM_INLINE CGLM_INLINE