Start math library by preprocessor templating
This commit is contained in:
		
							parent
							
								
									6251e105c8
								
							
						
					
					
						commit
						d4117ea729
					
				| @ -3,10 +3,92 @@ | ||||
| 
 | ||||
| #include <Dengine/Common.h> | ||||
| 
 | ||||
| inline f32 squared(const f32 a) | ||||
| #define squared(x) (x * x) | ||||
| #define abs(x) ((x) > 0 ? (x) : -(x)) | ||||
| 
 | ||||
| union v2 | ||||
| { | ||||
| 	f32 result = a * a; | ||||
| 	struct | ||||
| 	{ | ||||
| 		f32 x, y; | ||||
| 	}; | ||||
| 	struct | ||||
| 	{ | ||||
| 		f32 w, h; | ||||
| 	}; | ||||
| 	f32 data[2]; | ||||
| }; | ||||
| 
 | ||||
| union v3 | ||||
| { | ||||
| 	struct | ||||
| 	{ | ||||
| 		f32 x, y, z; | ||||
| 	}; | ||||
| 	struct | ||||
| 	{ | ||||
| 		f32 r, g, b; | ||||
| 	}; | ||||
| 	f32 data[3]; | ||||
| }; | ||||
| 
 | ||||
| union v4 | ||||
| { | ||||
| 	struct | ||||
| 	{ | ||||
| 		f32 x, y, z, w; | ||||
| 	}; | ||||
| 	struct | ||||
| 	{ | ||||
| 		f32 r, g, b, a; | ||||
| 	}; | ||||
| 	f32 data[4]; | ||||
| }; | ||||
| 
 | ||||
| INTERNAL inline v2 V2(const f32 x, const f32 y) | ||||
| { | ||||
| 	v2 result = v2{x, y}; | ||||
| 	return result; | ||||
| } | ||||
| INTERNAL inline v3 V3(const f32 x, const f32 y, const f32 z) | ||||
| { | ||||
| 	v3 result = v3{x, y, z}; | ||||
| 	return result; | ||||
| } | ||||
| INTERNAL inline v4 V4(const f32 x, const f32 y, const f32 z, const f32 w) | ||||
| { | ||||
| 	v4 result = v4{x, y, z, w}; | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| #define DEFINE_VECTOR_MATH(num) \ | ||||
| INTERNAL inline v##num v##num##_add(const v##num a, const v##num b) \ | ||||
| { \ | ||||
| 	v##num result; \ | ||||
| 	for (i32 i = 0; i < ##num; i++) { result.data[i] = a.data[i] + b.data[i]; } \ | ||||
| 	return result; \ | ||||
| } \ | ||||
| INTERNAL inline v##num v##num##_sub(const v##num a, const v##num b) \ | ||||
| { \ | ||||
| 	v##num result; \ | ||||
| 	for (i32 i = 0; i < ##num; i++) { result.data[i] = a.data[i] - b.data[i]; } \ | ||||
| 	return result; \ | ||||
| } \ | ||||
| INTERNAL inline v##num v##num##_scale(const v##num a, const f32 b) \ | ||||
| { \ | ||||
| 	v##num result; \ | ||||
| 	for (i32 i = 0; i < ##num; i++) { result.data[i] = a.data[i] * b; } \ | ||||
| 	return result; \ | ||||
| } \ | ||||
| INTERNAL inline v##num v##num##_mul(const v##num a, const v##num b) \ | ||||
| { \ | ||||
| 	v##num result; \ | ||||
| 	for (i32 i = 0; i < ##num; i++) { result.data[i] = a.data[i] * b.data[i]; } \ | ||||
| 	return result; \ | ||||
| } \ | ||||
| 
 | ||||
| DEFINE_VECTOR_MATH(2); | ||||
| DEFINE_VECTOR_MATH(3); | ||||
| DEFINE_VECTOR_MATH(4); | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
| @ -29,7 +29,7 @@ struct Texture | ||||
| }; | ||||
| 
 | ||||
| // Generates texture from image data
 | ||||
| Texture genTexture(const GLuint width, const GLuint height, const GLint bytesPerPixel, | ||||
|                    const u8 *const image); | ||||
| Texture genTexture(const GLuint width, const GLuint height, | ||||
|                    const GLint bytesPerPixel, const u8 *const image); | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user