61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | 
 | ||
|  |     Vectorial - vector math library | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   Motivation | ||
|  | 
 | ||
|  |     I couldn't find an open source math library that was usable and | ||
|  |     supported simd - especially the ARM NEON variant. | ||
|  | 
 | ||
|  | 
 | ||
|  |   Features | ||
|  | 
 | ||
|  |     Supports NEON, SSE, scalar and generic gcc vector extension. | ||
|  |     Most basic vector and matrix math is available, but not quite | ||
|  |     yet full featured. | ||
|  | 
 | ||
|  | 
 | ||
|  |   Design | ||
|  | 
 | ||
|  |     Vectorial consists of two main parts, pure-C wrapper around | ||
|  |     platform-specific vector instructions in the simd*.h files | ||
|  |     and C++ classes for common uses, the vec*.h and mat*.h | ||
|  | 
 | ||
|  |     The config.h autodetects approriate vector instructions to use. | ||
|  | 
 | ||
|  |     The platform-specific support is done with intrisincs only, | ||
|  |     allowing the compiler to have a full view of the code, hopefully | ||
|  |     resulting in better optimizations especially with reordering etc. | ||
|  | 
 | ||
|  | 
 | ||
|  |   Installation / Usage | ||
|  | 
 | ||
|  |     Add vectorial/include to your include path | ||
|  | 
 | ||
|  |     #include "vectorial/simd4f.h"   | ||
|  |     for C-only simd wrapper, using it looks like this: | ||
|  |       simd4f v = simd4f_normalize( simd4f_add( simd4f_create(1,2,3,4), y) ); | ||
|  |       float z = simd4f_get_z(v); | ||
|  | 
 | ||
|  |     #include "vectorial/vectorial.h" | ||
|  |     for C++ classes. They reside in vectorial namespace, you might | ||
|  |     want to alias them to your own namespace | ||
|  |       namespace myproject { | ||
|  |         using namespace ::vectorial; | ||
|  |         // if you like different name: typedef vec3f Vector3; | ||
|  |       } | ||
|  |       using myproject::vec4f; | ||
|  |        | ||
|  |       vec4f v = normalize( vec4f(1,2,3,4) + y ); | ||
|  |       float z = v.z(); | ||
|  | 
 | ||
|  | 
 | ||
|  |   License | ||
|  | 
 | ||
|  |     2-clause BSD. See LICENSE | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 |