Sun, 27 Jul 2025 23:34:19 +0200
add asc_create_flags() utility function
3 | 1 | /* |
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | |
3 | * Copyright 2023 Mike Becker. All rights reserved. | |
4 | * | |
5 | * Redistribution and use in source and binary forms, with or without | |
6 | * modification, are permitted provided that the following conditions are met: | |
7 | * | |
8 | * 1. Redistributions of source code must retain the above copyright | |
9 | * notice, this list of conditions and the following disclaimer. | |
10 | * | |
11 | * 2. Redistributions in binary form must reproduce the above copyright | |
12 | * notice, this list of conditions and the following disclaimer in the | |
13 | * documentation and/or other materials provided with the distribution. | |
14 | * | |
15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
16 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
17 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
18 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
19 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
20 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
21 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
22 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
23 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
24 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
25 | * POSSIBILITY OF SUCH DAMAGE. | |
26 | */ | |
27 | ||
28 | #ifndef ASCENSION_DATATYPES_H | |
29 | #define ASCENSION_DATATYPES_H | |
30 | ||
14 | 31 | #ifdef __cplusplus |
32 | #error You cannot ascend using C++ | |
33 | #endif | |
34 | ||
6
302971e8599b
move window related stuff to its own unit
Mike Becker <universe@uap-core.de>
parents:
5
diff
changeset
|
35 | #include <stdbool.h> |
228
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
36 | #include <stdarg.h> |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
37 | #include <string.h> |
19 | 38 | #include <SDL2/SDL_pixels.h> |
4
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
39 | |
12
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
40 | // -------------------------------------------------------------------------- |
46
d3285aed65b3
make the timer have nanoseconds precision
Mike Becker <universe@uap-core.de>
parents:
45
diff
changeset
|
41 | // Useful Macros |
d3285aed65b3
make the timer have nanoseconds precision
Mike Becker <universe@uap-core.de>
parents:
45
diff
changeset
|
42 | // -------------------------------------------------------------------------- |
d3285aed65b3
make the timer have nanoseconds precision
Mike Becker <universe@uap-core.de>
parents:
45
diff
changeset
|
43 | |
148
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
146
diff
changeset
|
44 | #define asc_nanoseconds(t) (t) |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
146
diff
changeset
|
45 | #define asc_microseconds(t) (t*1000ull) |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
146
diff
changeset
|
46 | #define asc_milliseconds(t) (t*1000000ull) |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
146
diff
changeset
|
47 | #define asc_seconds(t) (t*1000000000ull) |
46
d3285aed65b3
make the timer have nanoseconds precision
Mike Becker <universe@uap-core.de>
parents:
45
diff
changeset
|
48 | |
117
d1267f656a97
implement texture scaling
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
49 | /** |
d1267f656a97
implement texture scaling
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
50 | * Tests a value if it is zero and returns an alternative when it is. |
d1267f656a97
implement texture scaling
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
51 | * |
d1267f656a97
implement texture scaling
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
52 | * @param y the alternative |
d1267f656a97
implement texture scaling
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
53 | * @param x the value that shall be tested |
d1267f656a97
implement texture scaling
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
54 | * @return x if nonzero, y otherwise |
d1267f656a97
implement texture scaling
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
55 | */ |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
150
diff
changeset
|
56 | #define ASC_NONZERO_OR(y, x) ((x) != 0 ? x : y) |
117
d1267f656a97
implement texture scaling
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
57 | |
132
a407a2b18c7c
move flag macros to datatypes.h
Mike Becker <universe@uap-core.de>
parents:
129
diff
changeset
|
58 | #define asc_test_flag(reg, flag) ((reg & flag) == flag) |
a407a2b18c7c
move flag macros to datatypes.h
Mike Becker <universe@uap-core.de>
parents:
129
diff
changeset
|
59 | #define asc_test_flag_masked(reg, mask, flag) ((reg & mask) == flag) |
a407a2b18c7c
move flag macros to datatypes.h
Mike Becker <universe@uap-core.de>
parents:
129
diff
changeset
|
60 | #define asc_clear_flag(reg, flag) (reg &= ~(flag)) |
a407a2b18c7c
move flag macros to datatypes.h
Mike Becker <universe@uap-core.de>
parents:
129
diff
changeset
|
61 | #define asc_set_flag(reg, flag) (reg |= flag) |
a407a2b18c7c
move flag macros to datatypes.h
Mike Becker <universe@uap-core.de>
parents:
129
diff
changeset
|
62 | #define asc_set_flag_masked(reg, mask, flag) (reg = (reg & ~(mask)) | flag) |
a407a2b18c7c
move flag macros to datatypes.h
Mike Becker <universe@uap-core.de>
parents:
129
diff
changeset
|
63 | |
228
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
64 | static inline int asc_create_flags(unsigned start, unsigned n, ...) { |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
65 | va_list args; |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
66 | va_start(args, n); |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
67 | int result = 0; |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
68 | for (unsigned i = 0; i < n; i++) { |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
69 | if (va_arg(args, int)) { |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
70 | result |= start; |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
71 | } |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
72 | start <<= 1; |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
73 | } |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
74 | va_end(args); |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
75 | return result; |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
76 | } |
ecda73508be6
add asc_create_flags() utility function
Mike Becker <universe@uap-core.de>
parents:
218
diff
changeset
|
77 | |
139
5d655459db85
refactor shader management - resolves #684
Mike Becker <universe@uap-core.de>
parents:
132
diff
changeset
|
78 | #define asc_ptr_cast(type, lvalue, rvalue) type *lvalue = (type *)(rvalue); |
169
6e6717d9c776
improve "polymorphic" typing of shaders
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
79 | #define asc_cptr_cast(type, lvalue, rvalue) const type *lvalue = (const type *)(rvalue); |
139
5d655459db85
refactor shader management - resolves #684
Mike Becker <universe@uap-core.de>
parents:
132
diff
changeset
|
80 | |
46
d3285aed65b3
make the timer have nanoseconds precision
Mike Becker <universe@uap-core.de>
parents:
45
diff
changeset
|
81 | // -------------------------------------------------------------------------- |
12
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
82 | // Datatype Definitions |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
83 | // -------------------------------------------------------------------------- |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
84 | |
4
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
85 | typedef unsigned char asc_ubyte; |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
86 | typedef signed char asc_sbyte; |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
87 | |
5 | 88 | typedef union asc_vec2i { |
3 | 89 | struct { int x, y; }; |
90 | struct { int width, height; }; | |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
91 | int data[2]; |
3 | 92 | } asc_vec2i; |
175
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
93 | #define ASC_VEC2I(x, y) (asc_vec2i){{(int)x, (int)y}} |
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
94 | #define ASC_VEC2I_0 (asc_vec2i){{0, 0}} |
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
95 | #define ASC_VEC2I_1 (asc_vec2i){{1, 1}} |
105 | 96 | |
97 | typedef union asc_vec2u { | |
98 | struct { unsigned x, y; }; | |
99 | struct { unsigned width, height; }; | |
100 | unsigned data[2]; | |
101 | } asc_vec2u; | |
175
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
102 | #define ASC_VEC2U(x, y) (asc_vec2u){{(unsigned)x, (unsigned)y}} |
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
103 | #define ASC_VEC2U_0 (asc_vec2u){{0u, 0u}} |
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
104 | #define ASC_VEC2U_1 (asc_vec2u){{1u, 1u}} |
3 | 105 | |
186
e9bb4d4f88a8
rename asc_recti to just asc_rect (there won't be an asc_rectu)
Mike Becker <universe@uap-core.de>
parents:
184
diff
changeset
|
106 | typedef struct asc_rect { |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
107 | asc_vec2i pos; |
105 | 108 | asc_vec2u size; |
186
e9bb4d4f88a8
rename asc_recti to just asc_rect (there won't be an asc_rectu)
Mike Becker <universe@uap-core.de>
parents:
184
diff
changeset
|
109 | } asc_rect; |
e9bb4d4f88a8
rename asc_recti to just asc_rect (there won't be an asc_rectu)
Mike Becker <universe@uap-core.de>
parents:
184
diff
changeset
|
110 | #define ASC_RECT(x, y, w, h) (asc_rect){ASC_VEC2I(x,y), ASC_VEC2U(w,h)} |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
111 | |
115
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
112 | typedef union asc_vec2f { |
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
113 | struct { float x, y; }; |
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
114 | struct { float width, height; }; |
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
115 | struct { float u, v; }; |
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
116 | float data[2]; |
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
117 | } asc_vec2f; |
175
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
118 | #define ASC_VEC2F(x, y) (asc_vec2f){{(float)x, (float)y}} |
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
119 | #define ASC_VEC2F_0 (asc_vec2f){{0.0f, 0.0f}} |
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
120 | #define ASC_VEC2F_1 (asc_vec2f){{1.0f, 1.0f}} |
115
e5f8c99b0987
refactor rendering 1/3 - create new mesh structs
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
121 | |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
122 | typedef union asc_vec3f { |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
123 | struct { float x, y, z; }; |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
124 | struct { float width, height, depth; }; |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
125 | float data[3]; |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
126 | } asc_vec3f; |
175
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
127 | #define ASC_VEC3F(x, y, z) (asc_vec3f){{(float)x, (float)y, (float)(z)}} |
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
128 | #define ASC_VEC3F_0 (asc_vec3f){{0.0f, 0.0f, 0.0f}} |
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
129 | #define ASC_VEC3F_1 (asc_vec3f){{1.0f, 1.0f, 1.0f}} |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
130 | |
203
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
131 | typedef union asc_vec4f { |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
132 | struct { float x, y, z, w; }; |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
133 | float data[4]; |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
134 | } asc_vec4f; |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
135 | #define ASC_VEC4F(x, y, z, w) (asc_vec4f){{(float)x, (float)y, (float)(z), (float)(w)}} |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
136 | #define ASC_VEC4F_0 (asc_vec4f){{0.0f, 0.0f, 0.0f, 0.0f}} |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
137 | #define ASC_VEC4F_1 (asc_vec4f){{1.0f, 1.0f, 1.0f, 1.0f}} |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
138 | |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
139 | typedef struct asc_col4i { |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
140 | asc_ubyte red, green, blue, alpha; |
4
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
141 | } asc_col4i; |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
142 | |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
143 | typedef struct asc_col4f { |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
144 | float red, green, blue, alpha; |
4
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
145 | } asc_col4f; |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
146 | |
175
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
147 | #define ASC_RGB(r,g,b) (asc_col4i){(asc_ubyte)r, (asc_ubyte)g, (asc_ubyte)b, 255u} |
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
148 | #define ASC_RGBA(r,g,b,a) (asc_col4i){(asc_ubyte)r, (asc_ubyte)g, (asc_ubyte)b, (asc_ubyte)a} |
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
149 | #define ASC_RGB_F(r,g,b) (asc_col4f){r,g,b,1.f} |
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
150 | #define ASC_RGBA_F(r,g,b,a) (asc_col4f){r,g,b,a} |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
151 | |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
152 | typedef float asc_mat4f[16]; |
12
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
153 | |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
154 | // -------------------------------------------------------------------------- |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
155 | // General Utility Functions |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
156 | // -------------------------------------------------------------------------- |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
157 | |
192
160f3300f6b7
rename asc_memcmp() to asc_memcmpc() to avoid confusion with regular memcmp()
Mike Becker <universe@uap-core.de>
parents:
191
diff
changeset
|
158 | static inline bool asc_memcmpc(const void *mem, char c, size_t n) { |
191
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
159 | const unsigned char cu = (unsigned char) c; |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
160 | size_t csz; |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
161 | memset(&csz, cu, sizeof(size_t)); |
175
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
162 | const unsigned char *p = mem; |
191
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
163 | const size_t wordsize = sizeof(size_t); |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
164 | size_t i = 0; |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
165 | size_t result = 0; |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
166 | |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
167 | // Check word-sized chunks |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
168 | for (; i + wordsize <= n; i += wordsize) { |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
169 | result |= *(size_t *) (p + i) - cu; |
175
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
170 | } |
191
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
171 | |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
172 | // Check remaining bytes |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
173 | for (; i < n; i++) { |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
174 | result |= p[i] - cu; |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
175 | } |
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
176 | return result == 0; |
175
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
177 | } |
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
178 | |
192
160f3300f6b7
rename asc_memcmp() to asc_memcmpc() to avoid confusion with regular memcmp()
Mike Becker <universe@uap-core.de>
parents:
191
diff
changeset
|
179 | #define asc_memcmpz(mem, n) asc_memcmpc(mem, 0, n) |
191
95ad77a4b8e3
optimize asc_memcmp() by enabling the compiler to use SIMD instructions
Mike Becker <universe@uap-core.de>
parents:
187
diff
changeset
|
180 | |
187
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
181 | static inline int asc_clampi(int v, int min, int max) { |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
182 | if (v < min) return min; |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
183 | if (v > max) return max; |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
184 | return v; |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
185 | } |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
186 | |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
187 | static inline unsigned asc_clampu(unsigned v, unsigned min, unsigned max) { |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
188 | if (v < min) return min; |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
189 | if (v > max) return max; |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
190 | return v; |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
191 | } |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
192 | |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
193 | static inline long long int asc_clampll(long long int v, long long int min, long long int max) { |
4
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
194 | if (v < min) return min; |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
195 | if (v > max) return max; |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
196 | return v; |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
197 | } |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
198 | |
187
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
199 | static inline unsigned long long int asc_clampull(unsigned long long int v, unsigned long long int min, unsigned long long int max) { |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
200 | if (v < min) return min; |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
201 | if (v > max) return max; |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
202 | return v; |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
203 | } |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
204 | |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
205 | static inline float asc_clampf(float v, float min, float max) { |
105 | 206 | if (v < min) return min; |
207 | if (v > max) return max; | |
208 | return v; | |
209 | } | |
210 | ||
187
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
211 | static inline double asc_clampd(double v, double min, double max) { |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
212 | if (v < min) return min; |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
213 | if (v > max) return max; |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
214 | return v; |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
215 | } |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
216 | |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
217 | #define asc_clamp(v, min, max) _Generic((v), \ |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
218 | int: asc_clampi, \ |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
219 | long long int: asc_clampll, \ |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
220 | unsigned: asc_clampu, \ |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
221 | unsigned long long int: asc_clampull, \ |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
222 | float: asc_clampf, \ |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
223 | double: asc_clampd \ |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
224 | )(v, min, max) |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
225 | |
186
e9bb4d4f88a8
rename asc_recti to just asc_rect (there won't be an asc_rectu)
Mike Becker <universe@uap-core.de>
parents:
184
diff
changeset
|
226 | static inline asc_vec2i asc_rect_center(asc_rect rect) { |
184 | 227 | return ASC_VEC2I(rect.pos.x + rect.size.width/2, rect.pos.y + rect.size.height/2); |
228 | } | |
229 | ||
199
1d0db7f48457
add conversion functions between degrees and radians
Mike Becker <universe@uap-core.de>
parents:
192
diff
changeset
|
230 | static inline float asc_rad(float angle) { |
1d0db7f48457
add conversion functions between degrees and radians
Mike Becker <universe@uap-core.de>
parents:
192
diff
changeset
|
231 | return angle * 3.14159265358979323846f / 180.f; |
1d0db7f48457
add conversion functions between degrees and radians
Mike Becker <universe@uap-core.de>
parents:
192
diff
changeset
|
232 | } |
1d0db7f48457
add conversion functions between degrees and radians
Mike Becker <universe@uap-core.de>
parents:
192
diff
changeset
|
233 | |
1d0db7f48457
add conversion functions between degrees and radians
Mike Becker <universe@uap-core.de>
parents:
192
diff
changeset
|
234 | static inline float asc_deg(float rads) { |
1d0db7f48457
add conversion functions between degrees and radians
Mike Becker <universe@uap-core.de>
parents:
192
diff
changeset
|
235 | return rads * 180.f / 3.14159265358979323846f; |
1d0db7f48457
add conversion functions between degrees and radians
Mike Becker <universe@uap-core.de>
parents:
192
diff
changeset
|
236 | } |
1d0db7f48457
add conversion functions between degrees and radians
Mike Becker <universe@uap-core.de>
parents:
192
diff
changeset
|
237 | |
4
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
238 | /** |
201
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
239 | * |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
240 | * @param x the floating point |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
241 | * @return if @p x is near zero, returns zero, returns @p x otherwise |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
242 | */ |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
243 | static inline float asc_fround_zero(float x) { |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
244 | if (fabsf(x) < FLT_EPSILON) { |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
245 | return 0.f; |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
246 | } else { |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
247 | return x; |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
248 | } |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
249 | } |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
250 | |
217
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
251 | static inline int asc_sgn(int x) { |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
252 | return x < 0 ? -1 : 1; |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
253 | } |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
254 | |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
255 | static inline int asc_sgnf(float x) { |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
256 | return asc_fround_zero(x) < 0 ? -1 : 1; |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
257 | } |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
258 | |
201
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
259 | /** |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
260 | * Returns the cosine of x. |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
261 | * |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
262 | * This function eliminates result values close to zero. |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
263 | * |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
264 | * @param x the angle in radians |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
265 | * @return the cosine of x |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
266 | */ |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
267 | static inline float asc_cos(float x) { |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
268 | return asc_fround_zero(cosf(x)); |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
269 | } |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
270 | |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
271 | /** |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
272 | * Returns the sine of x. |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
273 | * |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
274 | * This function eliminates result values close to zero. |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
275 | * |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
276 | * @param x the angle in radians |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
277 | * @return the sine of x |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
278 | */ |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
279 | static inline float asc_sin(float x) { |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
280 | return asc_fround_zero(sinf(x)); |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
281 | } |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
282 | |
030fa72d516a
add functions for sin() and cos() with increased precision when the return value is supposed to be zero
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
283 | /** |
4
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
284 | * Converts a float color (0.0f to 1.0f) to an int color (0 to 255). |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
285 | * |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
286 | * This operation is quite expensive. When you need to use it often, it's |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
287 | * quite obvious that you should change the data type. |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
288 | * |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
289 | * @param c the color using floats |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
290 | * @return the same color using ints |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
291 | */ |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
292 | static inline asc_col4i asc_col_ftoi(asc_col4f c) { |
105 | 293 | unsigned red = (unsigned)(255*c.red); |
294 | unsigned green = (unsigned)(255*c.green); | |
295 | unsigned blue = (unsigned)(255*c.blue); | |
296 | unsigned alpha = (unsigned)(255*c.alpha); | |
4
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
297 | asc_col4i r; |
187
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
298 | r.red = asc_clamp(red, 0, 255); |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
299 | r.green = asc_clamp(green, 0, 255); |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
300 | r.blue = asc_clamp(blue, 0, 255); |
15763968dfd5
make asc_clamp() generic and support all common types
Mike Becker <universe@uap-core.de>
parents:
186
diff
changeset
|
301 | r.alpha = asc_clamp(alpha, 0, 255); |
4
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
302 | return r; |
b7acda6a4476
add simple color data types
Mike Becker <universe@uap-core.de>
parents:
3
diff
changeset
|
303 | } |
3 | 304 | |
121
ede9a9e92ff9
add viewport_clear flag to camera settings
Mike Becker <universe@uap-core.de>
parents:
117
diff
changeset
|
305 | static inline asc_col4f asc_col_itof(asc_col4i c) { |
ede9a9e92ff9
add viewport_clear flag to camera settings
Mike Becker <universe@uap-core.de>
parents:
117
diff
changeset
|
306 | // dividing by 256 is much more performant |
170 | 307 | // because it compiles to multiplication instead of division |
308 | const float f = 256.f / 255.f; | |
309 | const float red = c.red * f / 256.f; | |
310 | const float green = c.green * f / 256.f; | |
311 | const float blue = c.blue * f / 256.f; | |
312 | const float alpha = c.alpha * f / 256.f; | |
313 | return (asc_col4f) {red, green, blue, alpha}; | |
121
ede9a9e92ff9
add viewport_clear flag to camera settings
Mike Becker <universe@uap-core.de>
parents:
117
diff
changeset
|
314 | } |
ede9a9e92ff9
add viewport_clear flag to camera settings
Mike Becker <universe@uap-core.de>
parents:
117
diff
changeset
|
315 | |
19 | 316 | static inline SDL_Color asc_col_sdl(asc_col4i col) { |
32
86468a71dd73
add transformation matrix
Mike Becker <universe@uap-core.de>
parents:
19
diff
changeset
|
317 | return (SDL_Color) {.r = col.red, .g = col.green, .b = col.blue, .a = col.alpha}; |
19 | 318 | } |
319 | ||
12
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
320 | // -------------------------------------------------------------------------- |
129
84e89b36c792
add functions to scale vectors
Mike Becker <universe@uap-core.de>
parents:
124
diff
changeset
|
321 | // Vector Functions |
84e89b36c792
add functions to scale vectors
Mike Becker <universe@uap-core.de>
parents:
124
diff
changeset
|
322 | // -------------------------------------------------------------------------- |
84e89b36c792
add functions to scale vectors
Mike Becker <universe@uap-core.de>
parents:
124
diff
changeset
|
323 | |
217
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
324 | static inline asc_vec2i asc_vec2_ftoi(asc_vec2f v) { |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
325 | return ASC_VEC2I(v.x, v.y); |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
326 | } |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
327 | |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
328 | static inline asc_vec2f asc_vec2_itof(asc_vec2i v) { |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
329 | return ASC_VEC2F(v.x, v.y); |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
330 | } |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
331 | |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
332 | static inline asc_vec2u asc_vec2_ftou(asc_vec2f v) { |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
333 | return ASC_VEC2U(v.x, v.y); |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
334 | } |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
335 | |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
336 | static inline asc_vec2f asc_vec2_utof(asc_vec2u v) { |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
337 | return ASC_VEC2F(v.x, v.y); |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
338 | } |
4b3c974eab44
improve snap-to-grid-movement
Mike Becker <universe@uap-core.de>
parents:
216
diff
changeset
|
339 | |
129
84e89b36c792
add functions to scale vectors
Mike Becker <universe@uap-core.de>
parents:
124
diff
changeset
|
340 | static inline asc_vec2f asc_vec2f_scale(asc_vec2f v, float s) { |
175
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
341 | return ASC_VEC2F(v.x*s, v.y*s); |
129
84e89b36c792
add functions to scale vectors
Mike Becker <universe@uap-core.de>
parents:
124
diff
changeset
|
342 | } |
84e89b36c792
add functions to scale vectors
Mike Becker <universe@uap-core.de>
parents:
124
diff
changeset
|
343 | |
84e89b36c792
add functions to scale vectors
Mike Becker <universe@uap-core.de>
parents:
124
diff
changeset
|
344 | static inline asc_vec3f asc_vec3f_scale(asc_vec3f v, float s) { |
175
e5544920377e
improve macros in datatypes.h - fixes #692
Mike Becker <universe@uap-core.de>
parents:
173
diff
changeset
|
345 | return ASC_VEC3F(v.x*s, v.y*s, v.z*s); |
129
84e89b36c792
add functions to scale vectors
Mike Becker <universe@uap-core.de>
parents:
124
diff
changeset
|
346 | } |
84e89b36c792
add functions to scale vectors
Mike Becker <universe@uap-core.de>
parents:
124
diff
changeset
|
347 | |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
203
diff
changeset
|
348 | static inline asc_vec2f asc_vec2f_neg(asc_vec2f v) { |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
203
diff
changeset
|
349 | return ASC_VEC2F(-v.x, -v.y); |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
203
diff
changeset
|
350 | } |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
203
diff
changeset
|
351 | |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
203
diff
changeset
|
352 | static inline asc_vec3f asc_vec3f_neg(asc_vec3f v) { |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
203
diff
changeset
|
353 | return ASC_VEC3F(-v.x, -v.y, -v.z); |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
203
diff
changeset
|
354 | } |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
203
diff
changeset
|
355 | |
150
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
356 | static inline unsigned asc_vec2u_sqrlen(asc_vec2u v) { |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
357 | return v.x*v.x + v.y*v.y; |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
358 | } |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
359 | |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
360 | static inline unsigned asc_vec2i_sqrlen(asc_vec2i v) { |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
361 | return v.x*v.x + v.y*v.y; |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
362 | } |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
363 | |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
364 | static inline float asc_vec2f_sqrlen(asc_vec2f v) { |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
365 | return v.x*v.x + v.y*v.y; |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
366 | } |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
367 | |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
368 | static inline float asc_vec3f_sqrlen(asc_vec3f v) { |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
369 | return v.x*v.x + v.y*v.y + v.z*v.z; |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
370 | } |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
371 | |
218
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
372 | static inline asc_vec2i asc_vec2i_sub(asc_vec2i a, asc_vec2i b) { |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
373 | return ASC_VEC2I(a.x-b.x, a.y-b.y); |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
374 | } |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
375 | |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
376 | static inline asc_vec2u asc_vec2u_sub(asc_vec2u a, asc_vec2u b) { |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
377 | // this may overflow - responsibility lies with the caller |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
378 | return ASC_VEC2U(a.x-b.x, a.y-b.y); |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
379 | } |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
380 | |
216
943980fa37b5
snap the movement to the grid
Mike Becker <universe@uap-core.de>
parents:
204
diff
changeset
|
381 | static inline asc_vec2f asc_vec2f_sub(asc_vec2f a, asc_vec2f b) { |
943980fa37b5
snap the movement to the grid
Mike Becker <universe@uap-core.de>
parents:
204
diff
changeset
|
382 | return ASC_VEC2F(a.x-b.x, a.y-b.y); |
943980fa37b5
snap the movement to the grid
Mike Becker <universe@uap-core.de>
parents:
204
diff
changeset
|
383 | } |
943980fa37b5
snap the movement to the grid
Mike Becker <universe@uap-core.de>
parents:
204
diff
changeset
|
384 | |
218
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
385 | static inline asc_vec3f asc_vec3f_sub(asc_vec3f a, asc_vec3f b) { |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
386 | return ASC_VEC3F(a.x-b.x, a.y-b.y, a.z-b.z); |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
387 | } |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
388 | |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
389 | static inline asc_vec2i asc_vec2i_add(asc_vec2i a, asc_vec2i b) { |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
390 | return ASC_VEC2I(a.x+b.x, a.y+b.y); |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
391 | } |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
392 | |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
393 | static inline asc_vec2u asc_vec2u_add(asc_vec2u a, asc_vec2u b) { |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
394 | return ASC_VEC2U(a.x+b.x, a.y+b.y); |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
395 | } |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
396 | |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
397 | static inline asc_vec2f asc_vec2f_add(asc_vec2f a, asc_vec2f b) { |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
398 | return ASC_VEC2F(a.x+b.x, a.y+b.y); |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
399 | } |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
400 | |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
401 | static inline asc_vec3f asc_vec3f_add(asc_vec3f a, asc_vec3f b) { |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
402 | return ASC_VEC3F(a.x+b.x, a.y+b.y, a.z+b.z); |
2ead0699ce77
add more vector arithmetic functions
Mike Becker <universe@uap-core.de>
parents:
217
diff
changeset
|
403 | } |
216
943980fa37b5
snap the movement to the grid
Mike Becker <universe@uap-core.de>
parents:
204
diff
changeset
|
404 | |
129
84e89b36c792
add functions to scale vectors
Mike Becker <universe@uap-core.de>
parents:
124
diff
changeset
|
405 | // -------------------------------------------------------------------------- |
12
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
406 | // Matrix Functions |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
407 | // -------------------------------------------------------------------------- |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
408 | |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
409 | /** |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
410 | * Computes a matrix index in column-major order. |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
411 | * @param col the column |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
412 | * @param row the row |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
413 | * @param rows the number of rows |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
414 | */ |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
415 | #define asc_mat_index(col, row, rows) ((row) + (col) * (rows)) |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
416 | |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
417 | /** |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
418 | * Computes a 4x4 matrix index in column-major order. |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
419 | * @param col the column |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
420 | * @param row the row |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
421 | */ |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
422 | #define asc_mat4_index(col, row) asc_mat_index(col, row, 4) |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
423 | |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
424 | static inline void asc_mat4f_unit(asc_mat4f mat) { |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
425 | memset(mat, 0, sizeof(float) * 16); |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
426 | mat[asc_mat4_index(0,0)] = 1; |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
427 | mat[asc_mat4_index(1,1)] = 1; |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
428 | mat[asc_mat4_index(2,2)] = 1; |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
429 | mat[asc_mat4_index(3,3)] = 1; |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
430 | } |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
431 | |
12
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
432 | static inline void asc_mat4f_ortho( |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
433 | asc_mat4f mat, |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
434 | float left, |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
435 | float right, |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
436 | float bottom, |
41
df81d493716e
add correct interleaving of opaque and transparent sprites
Mike Becker <universe@uap-core.de>
parents:
38
diff
changeset
|
437 | float top, |
df81d493716e
add correct interleaving of opaque and transparent sprites
Mike Becker <universe@uap-core.de>
parents:
38
diff
changeset
|
438 | float near, |
df81d493716e
add correct interleaving of opaque and transparent sprites
Mike Becker <universe@uap-core.de>
parents:
38
diff
changeset
|
439 | float far |
12
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
440 | ) { |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
441 | memset(mat, 0, sizeof(float) * 16); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
442 | mat[asc_mat4_index(0,0)] = 2.f / (right - left); |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
443 | mat[asc_mat4_index(1,1)] = 2.f / (top - bottom); |
41
df81d493716e
add correct interleaving of opaque and transparent sprites
Mike Becker <universe@uap-core.de>
parents:
38
diff
changeset
|
444 | mat[asc_mat4_index(2,2)] = -2.f / (far - near); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
445 | mat[asc_mat4_index(3,0)] = -(right + left) / (right - left); |
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
446 | mat[asc_mat4_index(3,1)] = -(top + bottom) / (top - bottom); |
41
df81d493716e
add correct interleaving of opaque and transparent sprites
Mike Becker <universe@uap-core.de>
parents:
38
diff
changeset
|
447 | mat[asc_mat4_index(3,2)] = -(far + near) / (far - near); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
448 | mat[asc_mat4_index(3,3)] = 1; |
12
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
449 | } |
d89e0ebc76d2
add projection matrix to AscWindow
Mike Becker <universe@uap-core.de>
parents:
6
diff
changeset
|
450 | |
99
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
451 | /** |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
452 | * Shorter version of updating an orthographic matrix which assumes the top right corner at (0,0). |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
453 | * |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
454 | * @attention The matrix MUST have been properly initialized with asc_mat4f_ortho() with left=0 and top=0, first! |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
455 | * |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
456 | * @param mat the matrix |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
457 | * @param width the new width (right coordinate) |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
458 | * @param height the new height (bottom coordinate) |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
459 | */ |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
460 | static inline void asc_mat4f_ortho_update_size( |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
461 | asc_mat4f mat, |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
462 | float width, |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
463 | float height |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
464 | ) { |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
465 | mat[asc_mat4_index(0,0)] = 2.f / width; |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
466 | mat[asc_mat4_index(1,1)] = -2.f / height; |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
467 | } |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
46
diff
changeset
|
468 | |
200
cf0579d3bbc4
add rotation functions, but rotation with special point of origin is still broken
Mike Becker <universe@uap-core.de>
parents:
199
diff
changeset
|
469 | static inline void asc_mat4f_mul( |
38
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
470 | asc_mat4f dest, |
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
471 | asc_mat4f const left, |
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
472 | asc_mat4f const right |
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
473 | ) { |
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
474 | for (unsigned i = 0; i < 4; i++) { |
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
475 | for (unsigned j = 0; j < 4; j++) { |
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
476 | dest[asc_mat4_index(i, j)] = 0; |
203
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
477 | for (unsigned k = 0; k < 4; k++) { |
38
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
478 | dest[asc_mat4_index(i,j)] += |
202
d6fd0eabe568
fix wrong row/column access in asc_mat4f_mul()
Mike Becker <universe@uap-core.de>
parents:
201
diff
changeset
|
479 | left[asc_mat4_index(k,j)] * right[asc_mat4_index(i,k)]; |
38
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
480 | } |
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
481 | } |
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
482 | } |
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
483 | } |
6e5629ea4c5c
implement that nodes inherit the world transform of their parent
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
484 | |
203
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
485 | static inline asc_vec3f asc_mat4f_apply( |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
486 | asc_mat4f const mat, |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
487 | asc_vec3f vec |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
488 | ) { |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
489 | asc_vec4f dest = ASC_VEC4F_0; |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
490 | for (unsigned j = 0; j < 4; j++) { |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
491 | for (unsigned k = 0; k < 4; k++) { |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
492 | dest.data[j] += mat[asc_mat4_index(k,j)] * vec.data[k]; |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
493 | } |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
494 | } |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
495 | return ASC_VEC3F(dest.x, dest.y, dest.z); |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
496 | } |
1883bdc4fb20
add function to apply a matrix to a vector
Mike Becker <universe@uap-core.de>
parents:
202
diff
changeset
|
497 | |
3 | 498 | #endif //ASCENSION_DATATYPES_H |