23 #ifndef __LIBRETRO_SDK_GFX_MATH_MATRIX_4X4_H__ 24 #define __LIBRETRO_SDK_GFX_MATH_MATRIX_4X4_H__ 36 #define MAT_ELEM_4X4(mat, row, column) ((mat).data[4 * (column) + (row)]) 45 #define matrix_4x4_copy(dst, src) \ 46 MAT_ELEM_4X4(dst, 0, 0) = MAT_ELEM_4X4(src, 0, 0); \ 47 MAT_ELEM_4X4(dst, 0, 1) = MAT_ELEM_4X4(src, 0, 1); \ 48 MAT_ELEM_4X4(dst, 0, 2) = MAT_ELEM_4X4(src, 0, 2); \ 49 MAT_ELEM_4X4(dst, 0, 3) = MAT_ELEM_4X4(src, 0, 3); \ 50 MAT_ELEM_4X4(dst, 1, 0) = MAT_ELEM_4X4(src, 1, 0); \ 51 MAT_ELEM_4X4(dst, 1, 1) = MAT_ELEM_4X4(src, 1, 1); \ 52 MAT_ELEM_4X4(dst, 1, 2) = MAT_ELEM_4X4(src, 1, 2); \ 53 MAT_ELEM_4X4(dst, 1, 3) = MAT_ELEM_4X4(src, 1, 3); \ 54 MAT_ELEM_4X4(dst, 2, 0) = MAT_ELEM_4X4(src, 2, 0); \ 55 MAT_ELEM_4X4(dst, 2, 1) = MAT_ELEM_4X4(src, 2, 1); \ 56 MAT_ELEM_4X4(dst, 2, 2) = MAT_ELEM_4X4(src, 2, 2); \ 57 MAT_ELEM_4X4(dst, 2, 3) = MAT_ELEM_4X4(src, 2, 3); \ 58 MAT_ELEM_4X4(dst, 3, 0) = MAT_ELEM_4X4(src, 3, 0); \ 59 MAT_ELEM_4X4(dst, 3, 1) = MAT_ELEM_4X4(src, 3, 1); \ 60 MAT_ELEM_4X4(dst, 3, 2) = MAT_ELEM_4X4(src, 3, 2); \ 61 MAT_ELEM_4X4(dst, 3, 3) = MAT_ELEM_4X4(src, 3, 3) 66 #define matrix_4x4_identity(mat) \ 67 MAT_ELEM_4X4(mat, 0, 0) = 1.0f; \ 68 MAT_ELEM_4X4(mat, 0, 1) = 0.0f; \ 69 MAT_ELEM_4X4(mat, 0, 2) = 0.0f; \ 70 MAT_ELEM_4X4(mat, 0, 3) = 0.0f; \ 71 MAT_ELEM_4X4(mat, 1, 0) = 0.0f; \ 72 MAT_ELEM_4X4(mat, 1, 1) = 1.0f; \ 73 MAT_ELEM_4X4(mat, 1, 2) = 0.0f; \ 74 MAT_ELEM_4X4(mat, 1, 3) = 0.0f; \ 75 MAT_ELEM_4X4(mat, 2, 0) = 0.0f; \ 76 MAT_ELEM_4X4(mat, 2, 1) = 0.0f; \ 77 MAT_ELEM_4X4(mat, 2, 2) = 1.0f; \ 78 MAT_ELEM_4X4(mat, 2, 3) = 0.0f; \ 79 MAT_ELEM_4X4(mat, 3, 0) = 0.0f; \ 80 MAT_ELEM_4X4(mat, 3, 1) = 0.0f; \ 81 MAT_ELEM_4X4(mat, 3, 2) = 0.0f; \ 82 MAT_ELEM_4X4(mat, 3, 3) = 1.0f 88 #define matrix_4x4_transpose(out, in) \ 89 MAT_ELEM_4X4(out, 0, 0) = MAT_ELEM_4X4(in, 0, 0); \ 90 MAT_ELEM_4X4(out, 1, 0) = MAT_ELEM_4X4(in, 0, 1); \ 91 MAT_ELEM_4X4(out, 2, 0) = MAT_ELEM_4X4(in, 0, 2); \ 92 MAT_ELEM_4X4(out, 3, 0) = MAT_ELEM_4X4(in, 0, 3); \ 93 MAT_ELEM_4X4(out, 0, 1) = MAT_ELEM_4X4(in, 1, 0); \ 94 MAT_ELEM_4X4(out, 1, 1) = MAT_ELEM_4X4(in, 1, 1); \ 95 MAT_ELEM_4X4(out, 2, 1) = MAT_ELEM_4X4(in, 1, 2); \ 96 MAT_ELEM_4X4(out, 3, 1) = MAT_ELEM_4X4(in, 1, 3); \ 97 MAT_ELEM_4X4(out, 0, 2) = MAT_ELEM_4X4(in, 2, 0); \ 98 MAT_ELEM_4X4(out, 1, 2) = MAT_ELEM_4X4(in, 2, 1); \ 99 MAT_ELEM_4X4(out, 2, 2) = MAT_ELEM_4X4(in, 2, 2); \ 100 MAT_ELEM_4X4(out, 3, 2) = MAT_ELEM_4X4(in, 2, 3); \ 101 MAT_ELEM_4X4(out, 0, 3) = MAT_ELEM_4X4(in, 3, 0); \ 102 MAT_ELEM_4X4(out, 1, 3) = MAT_ELEM_4X4(in, 3, 1); \ 103 MAT_ELEM_4X4(out, 2, 3) = MAT_ELEM_4X4(in, 3, 2); \ 104 MAT_ELEM_4X4(out, 3, 3) = MAT_ELEM_4X4(in, 3, 3) 109 #define matrix_4x4_rotate_x(mat, radians) \ 111 float cosine = cosf(radians); \ 112 float sine = sinf(radians); \ 113 MAT_ELEM_4X4(mat, 0, 0) = 1.0f; \ 114 MAT_ELEM_4X4(mat, 0, 1) = 0.0f; \ 115 MAT_ELEM_4X4(mat, 0, 2) = 0.0f; \ 116 MAT_ELEM_4X4(mat, 0, 3) = 0.0f; \ 117 MAT_ELEM_4X4(mat, 1, 0) = 0.0f; \ 118 MAT_ELEM_4X4(mat, 1, 1) = cosine; \ 119 MAT_ELEM_4X4(mat, 1, 2) = -sine; \ 120 MAT_ELEM_4X4(mat, 1, 3) = 0.0f; \ 121 MAT_ELEM_4X4(mat, 2, 0) = 0.0f; \ 122 MAT_ELEM_4X4(mat, 2, 1) = sine; \ 123 MAT_ELEM_4X4(mat, 2, 2) = cosine; \ 124 MAT_ELEM_4X4(mat, 2, 3) = 0.0f; \ 125 MAT_ELEM_4X4(mat, 3, 0) = 0.0f; \ 126 MAT_ELEM_4X4(mat, 3, 1) = 0.0f; \ 127 MAT_ELEM_4X4(mat, 3, 2) = 0.0f; \ 128 MAT_ELEM_4X4(mat, 3, 3) = 1.0f; \ 136 #define matrix_4x4_rotate_y(mat, radians) \ 138 float cosine = cosf(radians); \ 139 float sine = sinf(radians); \ 140 MAT_ELEM_4X4(mat, 0, 0) = cosine; \ 141 MAT_ELEM_4X4(mat, 0, 1) = 0.0f; \ 142 MAT_ELEM_4X4(mat, 0, 2) = -sine; \ 143 MAT_ELEM_4X4(mat, 0, 3) = 0.0f; \ 144 MAT_ELEM_4X4(mat, 1, 0) = 0.0f; \ 145 MAT_ELEM_4X4(mat, 1, 1) = 1.0f; \ 146 MAT_ELEM_4X4(mat, 1, 2) = 0.0f; \ 147 MAT_ELEM_4X4(mat, 1, 3) = 0.0f; \ 148 MAT_ELEM_4X4(mat, 2, 0) = sine; \ 149 MAT_ELEM_4X4(mat, 2, 1) = 0.0f; \ 150 MAT_ELEM_4X4(mat, 2, 2) = cosine; \ 151 MAT_ELEM_4X4(mat, 2, 3) = 0.0f; \ 152 MAT_ELEM_4X4(mat, 3, 0) = 0.0f; \ 153 MAT_ELEM_4X4(mat, 3, 1) = 0.0f; \ 154 MAT_ELEM_4X4(mat, 3, 2) = 0.0f; \ 155 MAT_ELEM_4X4(mat, 3, 3) = 1.0f; \ 162 #define matrix_4x4_rotate_z(mat, radians) \ 164 float cosine = cosf(radians); \ 165 float sine = sinf(radians); \ 166 MAT_ELEM_4X4(mat, 0, 0) = cosine; \ 167 MAT_ELEM_4X4(mat, 0, 1) = -sine; \ 168 MAT_ELEM_4X4(mat, 0, 2) = 0.0f; \ 169 MAT_ELEM_4X4(mat, 0, 3) = 0.0f; \ 170 MAT_ELEM_4X4(mat, 1, 0) = sine; \ 171 MAT_ELEM_4X4(mat, 1, 1) = cosine; \ 172 MAT_ELEM_4X4(mat, 1, 2) = 0.0f; \ 173 MAT_ELEM_4X4(mat, 1, 3) = 0.0f; \ 174 MAT_ELEM_4X4(mat, 2, 0) = 0.0f; \ 175 MAT_ELEM_4X4(mat, 2, 1) = 0.0f; \ 176 MAT_ELEM_4X4(mat, 2, 2) = 1.0f; \ 177 MAT_ELEM_4X4(mat, 2, 3) = 0.0f; \ 178 MAT_ELEM_4X4(mat, 3, 0) = 0.0f; \ 179 MAT_ELEM_4X4(mat, 3, 1) = 0.0f; \ 180 MAT_ELEM_4X4(mat, 3, 2) = 0.0f; \ 181 MAT_ELEM_4X4(mat, 3, 3) = 1.0f; \ 187 #define matrix_4x4_ortho(mat, left, right, bottom, top, znear, zfar) \ 189 float rl = (right) - (left); \ 190 float tb = (top) - (bottom); \ 191 float fn = (zfar) - (znear); \ 192 MAT_ELEM_4X4(mat, 0, 0) = 2.0f / rl; \ 193 MAT_ELEM_4X4(mat, 0, 1) = 0.0f; \ 194 MAT_ELEM_4X4(mat, 0, 2) = 0.0f; \ 195 MAT_ELEM_4X4(mat, 0, 3) = -((left) + (right)) / rl; \ 196 MAT_ELEM_4X4(mat, 1, 0) = 0.0f; \ 197 MAT_ELEM_4X4(mat, 1, 1) = 2.0f / tb; \ 198 MAT_ELEM_4X4(mat, 1, 2) = 0.0f; \ 199 MAT_ELEM_4X4(mat, 1, 3) = -((top) + (bottom)) / tb; \ 200 MAT_ELEM_4X4(mat, 2, 0) = 0.0f; \ 201 MAT_ELEM_4X4(mat, 2, 1) = 0.0f; \ 202 MAT_ELEM_4X4(mat, 2, 2) = -2.0f / fn; \ 203 MAT_ELEM_4X4(mat, 2, 3) = -((zfar) + (znear)) / fn; \ 204 MAT_ELEM_4X4(mat, 3, 0) = 0.0f; \ 205 MAT_ELEM_4X4(mat, 3, 1) = 0.0f; \ 206 MAT_ELEM_4X4(mat, 3, 2) = 0.0f; \ 207 MAT_ELEM_4X4(mat, 3, 3) = 1.0f; \ 210 #define matrix_4x4_lookat(out, eye, center, up) \ 215 vec3_copy(zaxis, center); \ 216 vec3_subtract(zaxis, eye); \ 217 vec3_normalize(zaxis); \ 218 vec3_cross(xaxis, zaxis, up); \ 219 vec3_normalize(xaxis); \ 220 vec3_cross(yaxis, xaxis, zaxis); \ 221 MAT_ELEM_4X4(out, 0, 0) = xaxis[0]; \ 222 MAT_ELEM_4X4(out, 0, 1) = yaxis[0]; \ 223 MAT_ELEM_4X4(out, 0, 2) = -zaxis[0]; \ 224 MAT_ELEM_4X4(out, 0, 3) = 0.0; \ 225 MAT_ELEM_4X4(out, 1, 0) = xaxis[1]; \ 226 MAT_ELEM_4X4(out, 1, 1) = yaxis[1]; \ 227 MAT_ELEM_4X4(out, 1, 2) = -zaxis[1]; \ 228 MAT_ELEM_4X4(out, 1, 3) = 0.0f; \ 229 MAT_ELEM_4X4(out, 2, 0) = xaxis[2]; \ 230 MAT_ELEM_4X4(out, 2, 1) = yaxis[2]; \ 231 MAT_ELEM_4X4(out, 2, 2) = -zaxis[2]; \ 232 MAT_ELEM_4X4(out, 2, 3) = 0.0f; \ 233 MAT_ELEM_4X4(out, 3, 0) = -(xaxis[0] * eye[0] + xaxis[1] * eye[1] + xaxis[2] * eye[2]); \ 234 MAT_ELEM_4X4(out, 3, 1) = -(yaxis[0] * eye[0] + yaxis[1] * eye[1] + yaxis[2] * eye[2]); \ 235 MAT_ELEM_4X4(out, 3, 2) = (zaxis[0] * eye[0] + zaxis[1] * eye[1] + zaxis[2] * eye[2]); \ 236 MAT_ELEM_4X4(out, 3, 3) = 1.f; \ 243 #define matrix_4x4_multiply(out, a, b) \ 244 MAT_ELEM_4X4(out, 0, 0) = \ 245 MAT_ELEM_4X4(a, 0, 0) * MAT_ELEM_4X4(b, 0, 0) + \ 246 MAT_ELEM_4X4(a, 0, 1) * MAT_ELEM_4X4(b, 1, 0) + \ 247 MAT_ELEM_4X4(a, 0, 2) * MAT_ELEM_4X4(b, 2, 0) + \ 248 MAT_ELEM_4X4(a, 0, 3) * MAT_ELEM_4X4(b, 3, 0); \ 249 MAT_ELEM_4X4(out, 0, 1) = \ 250 MAT_ELEM_4X4(a, 0, 0) * MAT_ELEM_4X4(b, 0, 1) + \ 251 MAT_ELEM_4X4(a, 0, 1) * MAT_ELEM_4X4(b, 1, 1) + \ 252 MAT_ELEM_4X4(a, 0, 2) * MAT_ELEM_4X4(b, 2, 1) + \ 253 MAT_ELEM_4X4(a, 0, 3) * MAT_ELEM_4X4(b, 3, 1); \ 254 MAT_ELEM_4X4(out, 0, 2) = \ 255 MAT_ELEM_4X4(a, 0, 0) * MAT_ELEM_4X4(b, 0, 2) + \ 256 MAT_ELEM_4X4(a, 0, 1) * MAT_ELEM_4X4(b, 1, 2) + \ 257 MAT_ELEM_4X4(a, 0, 2) * MAT_ELEM_4X4(b, 2, 2) + \ 258 MAT_ELEM_4X4(a, 0, 3) * MAT_ELEM_4X4(b, 3, 2); \ 259 MAT_ELEM_4X4(out, 0, 3) = \ 260 MAT_ELEM_4X4(a, 0, 0) * MAT_ELEM_4X4(b, 0, 3) + \ 261 MAT_ELEM_4X4(a, 0, 1) * MAT_ELEM_4X4(b, 1, 3) + \ 262 MAT_ELEM_4X4(a, 0, 2) * MAT_ELEM_4X4(b, 2, 3) + \ 263 MAT_ELEM_4X4(a, 0, 3) * MAT_ELEM_4X4(b, 3, 3); \ 264 MAT_ELEM_4X4(out, 1, 0) = \ 265 MAT_ELEM_4X4(a, 1, 0) * MAT_ELEM_4X4(b, 0, 0) + \ 266 MAT_ELEM_4X4(a, 1, 1) * MAT_ELEM_4X4(b, 1, 0) + \ 267 MAT_ELEM_4X4(a, 1, 2) * MAT_ELEM_4X4(b, 2, 0) + \ 268 MAT_ELEM_4X4(a, 1, 3) * MAT_ELEM_4X4(b, 3, 0); \ 269 MAT_ELEM_4X4(out, 1, 1) = \ 270 MAT_ELEM_4X4(a, 1, 0) * MAT_ELEM_4X4(b, 0, 1) + \ 271 MAT_ELEM_4X4(a, 1, 1) * MAT_ELEM_4X4(b, 1, 1) + \ 272 MAT_ELEM_4X4(a, 1, 2) * MAT_ELEM_4X4(b, 2, 1) + \ 273 MAT_ELEM_4X4(a, 1, 3) * MAT_ELEM_4X4(b, 3, 1); \ 274 MAT_ELEM_4X4(out, 1, 2) = \ 275 MAT_ELEM_4X4(a, 1, 0) * MAT_ELEM_4X4(b, 0, 2) + \ 276 MAT_ELEM_4X4(a, 1, 1) * MAT_ELEM_4X4(b, 1, 2) + \ 277 MAT_ELEM_4X4(a, 1, 2) * MAT_ELEM_4X4(b, 2, 2) + \ 278 MAT_ELEM_4X4(a, 1, 3) * MAT_ELEM_4X4(b, 3, 2); \ 279 MAT_ELEM_4X4(out, 1, 3) = \ 280 MAT_ELEM_4X4(a, 1, 0) * MAT_ELEM_4X4(b, 0, 3) + \ 281 MAT_ELEM_4X4(a, 1, 1) * MAT_ELEM_4X4(b, 1, 3) + \ 282 MAT_ELEM_4X4(a, 1, 2) * MAT_ELEM_4X4(b, 2, 3) + \ 283 MAT_ELEM_4X4(a, 1, 3) * MAT_ELEM_4X4(b, 3, 3); \ 284 MAT_ELEM_4X4(out, 2, 0) = \ 285 MAT_ELEM_4X4(a, 2, 0) * MAT_ELEM_4X4(b, 0, 0) + \ 286 MAT_ELEM_4X4(a, 2, 1) * MAT_ELEM_4X4(b, 1, 0) + \ 287 MAT_ELEM_4X4(a, 2, 2) * MAT_ELEM_4X4(b, 2, 0) + \ 288 MAT_ELEM_4X4(a, 2, 3) * MAT_ELEM_4X4(b, 3, 0); \ 289 MAT_ELEM_4X4(out, 2, 1) = \ 290 MAT_ELEM_4X4(a, 2, 0) * MAT_ELEM_4X4(b, 0, 1) + \ 291 MAT_ELEM_4X4(a, 2, 1) * MAT_ELEM_4X4(b, 1, 1) + \ 292 MAT_ELEM_4X4(a, 2, 2) * MAT_ELEM_4X4(b, 2, 1) + \ 293 MAT_ELEM_4X4(a, 2, 3) * MAT_ELEM_4X4(b, 3, 1); \ 294 MAT_ELEM_4X4(out, 2, 2) = \ 295 MAT_ELEM_4X4(a, 2, 0) * MAT_ELEM_4X4(b, 0, 2) + \ 296 MAT_ELEM_4X4(a, 2, 1) * MAT_ELEM_4X4(b, 1, 2) + \ 297 MAT_ELEM_4X4(a, 2, 2) * MAT_ELEM_4X4(b, 2, 2) + \ 298 MAT_ELEM_4X4(a, 2, 3) * MAT_ELEM_4X4(b, 3, 2); \ 299 MAT_ELEM_4X4(out, 2, 3) = \ 300 MAT_ELEM_4X4(a, 2, 0) * MAT_ELEM_4X4(b, 0, 3) + \ 301 MAT_ELEM_4X4(a, 2, 1) * MAT_ELEM_4X4(b, 1, 3) + \ 302 MAT_ELEM_4X4(a, 2, 2) * MAT_ELEM_4X4(b, 2, 3) + \ 303 MAT_ELEM_4X4(a, 2, 3) * MAT_ELEM_4X4(b, 3, 3); \ 304 MAT_ELEM_4X4(out, 3, 0) = \ 305 MAT_ELEM_4X4(a, 3, 0) * MAT_ELEM_4X4(b, 0, 0) + \ 306 MAT_ELEM_4X4(a, 3, 1) * MAT_ELEM_4X4(b, 1, 0) + \ 307 MAT_ELEM_4X4(a, 3, 2) * MAT_ELEM_4X4(b, 2, 0) + \ 308 MAT_ELEM_4X4(a, 3, 3) * MAT_ELEM_4X4(b, 3, 0); \ 309 MAT_ELEM_4X4(out, 3, 1) = \ 310 MAT_ELEM_4X4(a, 3, 0) * MAT_ELEM_4X4(b, 0, 1) + \ 311 MAT_ELEM_4X4(a, 3, 1) * MAT_ELEM_4X4(b, 1, 1) + \ 312 MAT_ELEM_4X4(a, 3, 2) * MAT_ELEM_4X4(b, 2, 1) + \ 313 MAT_ELEM_4X4(a, 3, 3) * MAT_ELEM_4X4(b, 3, 1); \ 314 MAT_ELEM_4X4(out, 3, 2) = \ 315 MAT_ELEM_4X4(a, 3, 0) * MAT_ELEM_4X4(b, 0, 2) + \ 316 MAT_ELEM_4X4(a, 3, 1) * MAT_ELEM_4X4(b, 1, 2) + \ 317 MAT_ELEM_4X4(a, 3, 2) * MAT_ELEM_4X4(b, 2, 2) + \ 318 MAT_ELEM_4X4(a, 3, 3) * MAT_ELEM_4X4(b, 3, 2); \ 319 MAT_ELEM_4X4(out, 3, 3) = \ 320 MAT_ELEM_4X4(a, 3, 0) * MAT_ELEM_4X4(b, 0, 3) + \ 321 MAT_ELEM_4X4(a, 3, 1) * MAT_ELEM_4X4(b, 1, 3) + \ 322 MAT_ELEM_4X4(a, 3, 2) * MAT_ELEM_4X4(b, 2, 3) + \ 323 MAT_ELEM_4X4(a, 3, 3) * MAT_ELEM_4X4(b, 3, 3) 325 #define matrix_4x4_scale(mat, x, y, z) \ 326 MAT_ELEM_4X4(mat, 0, 0) = x; \ 327 MAT_ELEM_4X4(mat, 0, 1) = 0.0f; \ 328 MAT_ELEM_4X4(mat, 0, 2) = 0.0f; \ 329 MAT_ELEM_4X4(mat, 0, 3) = 0.0f; \ 330 MAT_ELEM_4X4(mat, 1, 0) = 0.0f; \ 331 MAT_ELEM_4X4(mat, 1, 1) = y; \ 332 MAT_ELEM_4X4(mat, 1, 2) = 0.0f; \ 333 MAT_ELEM_4X4(mat, 1, 3) = 0.0f; \ 334 MAT_ELEM_4X4(mat, 2, 0) = 0.0f; \ 335 MAT_ELEM_4X4(mat, 2, 1) = 0.0f; \ 336 MAT_ELEM_4X4(mat, 2, 2) = z; \ 337 MAT_ELEM_4X4(mat, 2, 3) = 0.0f; \ 338 MAT_ELEM_4X4(mat, 3, 0) = 0.0f; \ 339 MAT_ELEM_4X4(mat, 3, 1) = 0.0f; \ 340 MAT_ELEM_4X4(mat, 3, 2) = 0.0f; \ 341 MAT_ELEM_4X4(mat, 3, 3) = 1.0f 349 #define matrix_4x4_translate(mat, x, y, z) \ 350 MAT_ELEM_4X4(mat, 0, 0) = 1.0f; \ 351 MAT_ELEM_4X4(mat, 0, 1) = 0.0f; \ 352 MAT_ELEM_4X4(mat, 0, 2) = 0.0f; \ 353 MAT_ELEM_4X4(mat, 0, 3) = x; \ 354 MAT_ELEM_4X4(mat, 1, 0) = 0.0f; \ 355 MAT_ELEM_4X4(mat, 1, 1) = 1.0f; \ 356 MAT_ELEM_4X4(mat, 1, 2) = 1.0f; \ 357 MAT_ELEM_4X4(mat, 1, 3) = y; \ 358 MAT_ELEM_4X4(mat, 2, 0) = 0.0f; \ 359 MAT_ELEM_4X4(mat, 2, 1) = 0.0f; \ 360 MAT_ELEM_4X4(mat, 2, 2) = 1.0f; \ 361 MAT_ELEM_4X4(mat, 2, 3) = z; \ 362 MAT_ELEM_4X4(mat, 3, 0) = 0.0f; \ 363 MAT_ELEM_4X4(mat, 3, 1) = 0.0f; \ 364 MAT_ELEM_4X4(mat, 3, 2) = 0.0f; \ 365 MAT_ELEM_4X4(mat, 3, 3) = 1.0f 371 #define matrix_4x4_projection(mat, y_fov, aspect, znear, zfar) \ 373 float const a = 1.f / tan((y_fov) / 2.f); \ 374 float delta_z = (zfar) - (znear); \ 375 MAT_ELEM_4X4(mat, 0, 0) = a / (aspect); \ 376 MAT_ELEM_4X4(mat, 0, 1) = 0.0f; \ 377 MAT_ELEM_4X4(mat, 0, 2) = 0.0f; \ 378 MAT_ELEM_4X4(mat, 0, 3) = 0.0f; \ 379 MAT_ELEM_4X4(mat, 1, 0) = 0.0f; \ 380 MAT_ELEM_4X4(mat, 1, 1) = a; \ 381 MAT_ELEM_4X4(mat, 1, 2) = 0.0f; \ 382 MAT_ELEM_4X4(mat, 1, 3) = 0.0f; \ 383 MAT_ELEM_4X4(mat, 2, 0) = 0.0f; \ 384 MAT_ELEM_4X4(mat, 2, 1) = 0.0f; \ 385 MAT_ELEM_4X4(mat, 2, 2) = -(((zfar) + (znear)) / delta_z); \ 386 MAT_ELEM_4X4(mat, 2, 3) = -1.f; \ 387 MAT_ELEM_4X4(mat, 3, 0) = 0.0f; \ 388 MAT_ELEM_4X4(mat, 3, 1) = 0.0f; \ 389 MAT_ELEM_4X4(mat, 3, 2) = -((2.f * (zfar) * (znear)) / delta_z); \ 390 MAT_ELEM_4X4(mat, 3, 3) = 0.0f; \ Definition: matrix_4x4.h:40
#define RETRO_BEGIN_DECLS
Definition: retro_common_api.h:41
#define RETRO_END_DECLS
Definition: retro_common_api.h:42
RETRO_BEGIN_DECLS struct math_matrix_4x4 math_matrix_4x4