• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <com.badlogic.gdx.math.Matrix4.h>
2 
3 //@line:1157
4 
5 	#include <memory.h>
6 	#include <stdio.h>
7 	#include <string.h>
8 
9 	#define M00 0
10 	#define M01 4
11 	#define M02 8
12 	#define M03 12
13 	#define M10 1
14 	#define M11 5
15 	#define M12 9
16 	#define M13 13
17 	#define M20 2
18 	#define M21 6
19 	#define M22 10
20 	#define M23 14
21 	#define M30 3
22 	#define M31 7
23 	#define M32 11
24 	#define M33 15
25 
matrix4_mul(float * mata,float * matb)26 	static inline void matrix4_mul(float* mata, float* matb) {
27 		float tmp[16];
28 		tmp[M00] = mata[M00] * matb[M00] + mata[M01] * matb[M10] + mata[M02] * matb[M20] + mata[M03] * matb[M30];
29 		tmp[M01] = mata[M00] * matb[M01] + mata[M01] * matb[M11] + mata[M02] * matb[M21] + mata[M03] * matb[M31];
30 		tmp[M02] = mata[M00] * matb[M02] + mata[M01] * matb[M12] + mata[M02] * matb[M22] + mata[M03] * matb[M32];
31 		tmp[M03] = mata[M00] * matb[M03] + mata[M01] * matb[M13] + mata[M02] * matb[M23] + mata[M03] * matb[M33];
32 		tmp[M10] = mata[M10] * matb[M00] + mata[M11] * matb[M10] + mata[M12] * matb[M20] + mata[M13] * matb[M30];
33 		tmp[M11] = mata[M10] * matb[M01] + mata[M11] * matb[M11] + mata[M12] * matb[M21] + mata[M13] * matb[M31];
34 		tmp[M12] = mata[M10] * matb[M02] + mata[M11] * matb[M12] + mata[M12] * matb[M22] + mata[M13] * matb[M32];
35 		tmp[M13] = mata[M10] * matb[M03] + mata[M11] * matb[M13] + mata[M12] * matb[M23] + mata[M13] * matb[M33];
36 		tmp[M20] = mata[M20] * matb[M00] + mata[M21] * matb[M10] + mata[M22] * matb[M20] + mata[M23] * matb[M30];
37 		tmp[M21] = mata[M20] * matb[M01] + mata[M21] * matb[M11] + mata[M22] * matb[M21] + mata[M23] * matb[M31];
38 		tmp[M22] = mata[M20] * matb[M02] + mata[M21] * matb[M12] + mata[M22] * matb[M22] + mata[M23] * matb[M32];
39 		tmp[M23] = mata[M20] * matb[M03] + mata[M21] * matb[M13] + mata[M22] * matb[M23] + mata[M23] * matb[M33];
40 		tmp[M30] = mata[M30] * matb[M00] + mata[M31] * matb[M10] + mata[M32] * matb[M20] + mata[M33] * matb[M30];
41 		tmp[M31] = mata[M30] * matb[M01] + mata[M31] * matb[M11] + mata[M32] * matb[M21] + mata[M33] * matb[M31];
42 		tmp[M32] = mata[M30] * matb[M02] + mata[M31] * matb[M12] + mata[M32] * matb[M22] + mata[M33] * matb[M32];
43 		tmp[M33] = mata[M30] * matb[M03] + mata[M31] * matb[M13] + mata[M32] * matb[M23] + mata[M33] * matb[M33];
44 		memcpy(mata, tmp, sizeof(float) *  16);
45 	}
46 
matrix4_det(float * val)47 	static inline float matrix4_det(float* val) {
48 		return val[M30] * val[M21] * val[M12] * val[M03] - val[M20] * val[M31] * val[M12] * val[M03] - val[M30] * val[M11]
49 				* val[M22] * val[M03] + val[M10] * val[M31] * val[M22] * val[M03] + val[M20] * val[M11] * val[M32] * val[M03] - val[M10]
50 				* val[M21] * val[M32] * val[M03] - val[M30] * val[M21] * val[M02] * val[M13] + val[M20] * val[M31] * val[M02] * val[M13]
51 				+ val[M30] * val[M01] * val[M22] * val[M13] - val[M00] * val[M31] * val[M22] * val[M13] - val[M20] * val[M01] * val[M32]
52 				* val[M13] + val[M00] * val[M21] * val[M32] * val[M13] + val[M30] * val[M11] * val[M02] * val[M23] - val[M10] * val[M31]
53 				* val[M02] * val[M23] - val[M30] * val[M01] * val[M12] * val[M23] + val[M00] * val[M31] * val[M12] * val[M23] + val[M10]
54 				* val[M01] * val[M32] * val[M23] - val[M00] * val[M11] * val[M32] * val[M23] - val[M20] * val[M11] * val[M02] * val[M33]
55 				+ val[M10] * val[M21] * val[M02] * val[M33] + val[M20] * val[M01] * val[M12] * val[M33] - val[M00] * val[M21] * val[M12]
56 				* val[M33] - val[M10] * val[M01] * val[M22] * val[M33] + val[M00] * val[M11] * val[M22] * val[M33];
57 	}
58 
matrix4_inv(float * val)59 	static inline bool matrix4_inv(float* val) {
60 		float tmp[16];
61 		float l_det = matrix4_det(val);
62 		if (l_det == 0) return false;
63 		tmp[M00] = val[M12] * val[M23] * val[M31] - val[M13] * val[M22] * val[M31] + val[M13] * val[M21] * val[M32] - val[M11]
64 			* val[M23] * val[M32] - val[M12] * val[M21] * val[M33] + val[M11] * val[M22] * val[M33];
65 		tmp[M01] = val[M03] * val[M22] * val[M31] - val[M02] * val[M23] * val[M31] - val[M03] * val[M21] * val[M32] + val[M01]
66 			* val[M23] * val[M32] + val[M02] * val[M21] * val[M33] - val[M01] * val[M22] * val[M33];
67 		tmp[M02] = val[M02] * val[M13] * val[M31] - val[M03] * val[M12] * val[M31] + val[M03] * val[M11] * val[M32] - val[M01]
68 			* val[M13] * val[M32] - val[M02] * val[M11] * val[M33] + val[M01] * val[M12] * val[M33];
69 		tmp[M03] = val[M03] * val[M12] * val[M21] - val[M02] * val[M13] * val[M21] - val[M03] * val[M11] * val[M22] + val[M01]
70 			* val[M13] * val[M22] + val[M02] * val[M11] * val[M23] - val[M01] * val[M12] * val[M23];
71 		tmp[M10] = val[M13] * val[M22] * val[M30] - val[M12] * val[M23] * val[M30] - val[M13] * val[M20] * val[M32] + val[M10]
72 			* val[M23] * val[M32] + val[M12] * val[M20] * val[M33] - val[M10] * val[M22] * val[M33];
73 		tmp[M11] = val[M02] * val[M23] * val[M30] - val[M03] * val[M22] * val[M30] + val[M03] * val[M20] * val[M32] - val[M00]
74 			* val[M23] * val[M32] - val[M02] * val[M20] * val[M33] + val[M00] * val[M22] * val[M33];
75 		tmp[M12] = val[M03] * val[M12] * val[M30] - val[M02] * val[M13] * val[M30] - val[M03] * val[M10] * val[M32] + val[M00]
76 			* val[M13] * val[M32] + val[M02] * val[M10] * val[M33] - val[M00] * val[M12] * val[M33];
77 		tmp[M13] = val[M02] * val[M13] * val[M20] - val[M03] * val[M12] * val[M20] + val[M03] * val[M10] * val[M22] - val[M00]
78 			* val[M13] * val[M22] - val[M02] * val[M10] * val[M23] + val[M00] * val[M12] * val[M23];
79 		tmp[M20] = val[M11] * val[M23] * val[M30] - val[M13] * val[M21] * val[M30] + val[M13] * val[M20] * val[M31] - val[M10]
80 			* val[M23] * val[M31] - val[M11] * val[M20] * val[M33] + val[M10] * val[M21] * val[M33];
81 		tmp[M21] = val[M03] * val[M21] * val[M30] - val[M01] * val[M23] * val[M30] - val[M03] * val[M20] * val[M31] + val[M00]
82 			* val[M23] * val[M31] + val[M01] * val[M20] * val[M33] - val[M00] * val[M21] * val[M33];
83 		tmp[M22] = val[M01] * val[M13] * val[M30] - val[M03] * val[M11] * val[M30] + val[M03] * val[M10] * val[M31] - val[M00]
84 			* val[M13] * val[M31] - val[M01] * val[M10] * val[M33] + val[M00] * val[M11] * val[M33];
85 		tmp[M23] = val[M03] * val[M11] * val[M20] - val[M01] * val[M13] * val[M20] - val[M03] * val[M10] * val[M21] + val[M00]
86 			* val[M13] * val[M21] + val[M01] * val[M10] * val[M23] - val[M00] * val[M11] * val[M23];
87 		tmp[M30] = val[M12] * val[M21] * val[M30] - val[M11] * val[M22] * val[M30] - val[M12] * val[M20] * val[M31] + val[M10]
88 			* val[M22] * val[M31] + val[M11] * val[M20] * val[M32] - val[M10] * val[M21] * val[M32];
89 		tmp[M31] = val[M01] * val[M22] * val[M30] - val[M02] * val[M21] * val[M30] + val[M02] * val[M20] * val[M31] - val[M00]
90 			* val[M22] * val[M31] - val[M01] * val[M20] * val[M32] + val[M00] * val[M21] * val[M32];
91 		tmp[M32] = val[M02] * val[M11] * val[M30] - val[M01] * val[M12] * val[M30] - val[M02] * val[M10] * val[M31] + val[M00]
92 			* val[M12] * val[M31] + val[M01] * val[M10] * val[M32] - val[M00] * val[M11] * val[M32];
93 		tmp[M33] = val[M01] * val[M12] * val[M20] - val[M02] * val[M11] * val[M20] + val[M02] * val[M10] * val[M21] - val[M00]
94 			* val[M12] * val[M21] - val[M01] * val[M10] * val[M22] + val[M00] * val[M11] * val[M22];
95 
96 		float inv_det = 1.0f / l_det;
97 		val[M00] = tmp[M00] * inv_det;
98 		val[M01] = tmp[M01] * inv_det;
99 		val[M02] = tmp[M02] * inv_det;
100 		val[M03] = tmp[M03] * inv_det;
101 		val[M10] = tmp[M10] * inv_det;
102 		val[M11] = tmp[M11] * inv_det;
103 		val[M12] = tmp[M12] * inv_det;
104 		val[M13] = tmp[M13] * inv_det;
105 		val[M20] = tmp[M20] * inv_det;
106 		val[M21] = tmp[M21] * inv_det;
107 		val[M22] = tmp[M22] * inv_det;
108 		val[M23] = tmp[M23] * inv_det;
109 		val[M30] = tmp[M30] * inv_det;
110 		val[M31] = tmp[M31] * inv_det;
111 		val[M32] = tmp[M32] * inv_det;
112 		val[M33] = tmp[M33] * inv_det;
113 		return true;
114 	}
115 
matrix4_mulVec(float * mat,float * vec)116 	static inline void matrix4_mulVec(float* mat, float* vec) {
117 		float x = vec[0] * mat[M00] + vec[1] * mat[M01] + vec[2] * mat[M02] + mat[M03];
118 		float y = vec[0] * mat[M10] + vec[1] * mat[M11] + vec[2] * mat[M12] + mat[M13];
119 		float z = vec[0] * mat[M20] + vec[1] * mat[M21] + vec[2] * mat[M22] + mat[M23];
120 		vec[0] = x;
121 		vec[1] = y;
122 		vec[2] = z;
123 	}
124 
matrix4_proj(float * mat,float * vec)125 	static inline void matrix4_proj(float* mat, float* vec) {
126 		float inv_w = 1.0f / (vec[0] * mat[M30] + vec[1] * mat[M31] + vec[2] * mat[M32] + mat[M33]);
127 		float x = (vec[0] * mat[M00] + vec[1] * mat[M01] + vec[2] * mat[M02] + mat[M03]) * inv_w;
128 		float y = (vec[0] * mat[M10] + vec[1] * mat[M11] + vec[2] * mat[M12] + mat[M13]) * inv_w;
129 		float z = (vec[0] * mat[M20] + vec[1] * mat[M21] + vec[2] * mat[M22] + mat[M23]) * inv_w;
130 		vec[0] = x;
131 		vec[1] = y;
132 		vec[2] = z;
133 	}
134 
matrix4_rot(float * mat,float * vec)135 	static inline void matrix4_rot(float* mat, float* vec) {
136 		float x = vec[0] * mat[M00] + vec[1] * mat[M01] + vec[2] * mat[M02];
137 		float y = vec[0] * mat[M10] + vec[1] * mat[M11] + vec[2] * mat[M12];
138 		float z = vec[0] * mat[M20] + vec[1] * mat[M21] + vec[2] * mat[M22];
139 		vec[0] = x;
140 		vec[1] = y;
141 		vec[2] = z;
142 	}
Java_com_badlogic_gdx_math_Matrix4_mul(JNIEnv * env,jclass clazz,jfloatArray obj_mata,jfloatArray obj_matb)143 	 JNIEXPORT void JNICALL Java_com_badlogic_gdx_math_Matrix4_mul(JNIEnv* env, jclass clazz, jfloatArray obj_mata, jfloatArray obj_matb) {
144 	float* mata = (float*)env->GetPrimitiveArrayCritical(obj_mata, 0);
145 	float* matb = (float*)env->GetPrimitiveArrayCritical(obj_matb, 0);
146 
147 
148 //@line:1303
149 
150 		matrix4_mul(mata, matb);
151 
152 	env->ReleasePrimitiveArrayCritical(obj_mata, mata, 0);
153 	env->ReleasePrimitiveArrayCritical(obj_matb, matb, 0);
154 
155 }
156 
Java_com_badlogic_gdx_math_Matrix4_mulVec___3F_3F(JNIEnv * env,jclass clazz,jfloatArray obj_mat,jfloatArray obj_vec)157 JNIEXPORT void JNICALL Java_com_badlogic_gdx_math_Matrix4_mulVec___3F_3F(JNIEnv* env, jclass clazz, jfloatArray obj_mat, jfloatArray obj_vec) {
158 	float* mat = (float*)env->GetPrimitiveArrayCritical(obj_mat, 0);
159 	float* vec = (float*)env->GetPrimitiveArrayCritical(obj_vec, 0);
160 
161 
162 //@line:1313
163 
164 		matrix4_mulVec(mat, vec);
165 
166 	env->ReleasePrimitiveArrayCritical(obj_mat, mat, 0);
167 	env->ReleasePrimitiveArrayCritical(obj_vec, vec, 0);
168 
169 }
170 
Java_com_badlogic_gdx_math_Matrix4_mulVec___3F_3FIII(JNIEnv * env,jclass clazz,jfloatArray obj_mat,jfloatArray obj_vecs,jint offset,jint numVecs,jint stride)171 JNIEXPORT void JNICALL Java_com_badlogic_gdx_math_Matrix4_mulVec___3F_3FIII(JNIEnv* env, jclass clazz, jfloatArray obj_mat, jfloatArray obj_vecs, jint offset, jint numVecs, jint stride) {
172 	float* mat = (float*)env->GetPrimitiveArrayCritical(obj_mat, 0);
173 	float* vecs = (float*)env->GetPrimitiveArrayCritical(obj_vecs, 0);
174 
175 
176 //@line:1328
177 
178 		float* vecPtr = vecs + offset;
179 		for(int i = 0; i < numVecs; i++) {
180 			matrix4_mulVec(mat, vecPtr);
181 			vecPtr += stride;
182 		}
183 
184 	env->ReleasePrimitiveArrayCritical(obj_mat, mat, 0);
185 	env->ReleasePrimitiveArrayCritical(obj_vecs, vecs, 0);
186 
187 }
188 
Java_com_badlogic_gdx_math_Matrix4_prj___3F_3F(JNIEnv * env,jclass clazz,jfloatArray obj_mat,jfloatArray obj_vec)189 JNIEXPORT void JNICALL Java_com_badlogic_gdx_math_Matrix4_prj___3F_3F(JNIEnv* env, jclass clazz, jfloatArray obj_mat, jfloatArray obj_vec) {
190 	float* mat = (float*)env->GetPrimitiveArrayCritical(obj_mat, 0);
191 	float* vec = (float*)env->GetPrimitiveArrayCritical(obj_vec, 0);
192 
193 
194 //@line:1342
195 
196 		matrix4_proj(mat, vec);
197 
198 	env->ReleasePrimitiveArrayCritical(obj_mat, mat, 0);
199 	env->ReleasePrimitiveArrayCritical(obj_vec, vec, 0);
200 
201 }
202 
Java_com_badlogic_gdx_math_Matrix4_prj___3F_3FIII(JNIEnv * env,jclass clazz,jfloatArray obj_mat,jfloatArray obj_vecs,jint offset,jint numVecs,jint stride)203 JNIEXPORT void JNICALL Java_com_badlogic_gdx_math_Matrix4_prj___3F_3FIII(JNIEnv* env, jclass clazz, jfloatArray obj_mat, jfloatArray obj_vecs, jint offset, jint numVecs, jint stride) {
204 	float* mat = (float*)env->GetPrimitiveArrayCritical(obj_mat, 0);
205 	float* vecs = (float*)env->GetPrimitiveArrayCritical(obj_vecs, 0);
206 
207 
208 //@line:1357
209 
210 		float* vecPtr = vecs + offset;
211 		for(int i = 0; i < numVecs; i++) {
212 			matrix4_proj(mat, vecPtr);
213 			vecPtr += stride;
214 		}
215 
216 	env->ReleasePrimitiveArrayCritical(obj_mat, mat, 0);
217 	env->ReleasePrimitiveArrayCritical(obj_vecs, vecs, 0);
218 
219 }
220 
Java_com_badlogic_gdx_math_Matrix4_rot___3F_3F(JNIEnv * env,jclass clazz,jfloatArray obj_mat,jfloatArray obj_vec)221 JNIEXPORT void JNICALL Java_com_badlogic_gdx_math_Matrix4_rot___3F_3F(JNIEnv* env, jclass clazz, jfloatArray obj_mat, jfloatArray obj_vec) {
222 	float* mat = (float*)env->GetPrimitiveArrayCritical(obj_mat, 0);
223 	float* vec = (float*)env->GetPrimitiveArrayCritical(obj_vec, 0);
224 
225 
226 //@line:1371
227 
228 		matrix4_rot(mat, vec);
229 
230 	env->ReleasePrimitiveArrayCritical(obj_mat, mat, 0);
231 	env->ReleasePrimitiveArrayCritical(obj_vec, vec, 0);
232 
233 }
234 
Java_com_badlogic_gdx_math_Matrix4_rot___3F_3FIII(JNIEnv * env,jclass clazz,jfloatArray obj_mat,jfloatArray obj_vecs,jint offset,jint numVecs,jint stride)235 JNIEXPORT void JNICALL Java_com_badlogic_gdx_math_Matrix4_rot___3F_3FIII(JNIEnv* env, jclass clazz, jfloatArray obj_mat, jfloatArray obj_vecs, jint offset, jint numVecs, jint stride) {
236 	float* mat = (float*)env->GetPrimitiveArrayCritical(obj_mat, 0);
237 	float* vecs = (float*)env->GetPrimitiveArrayCritical(obj_vecs, 0);
238 
239 
240 //@line:1386
241 
242 		float* vecPtr = vecs + offset;
243 		for(int i = 0; i < numVecs; i++) {
244 			matrix4_rot(mat, vecPtr);
245 			vecPtr += stride;
246 		}
247 
248 	env->ReleasePrimitiveArrayCritical(obj_mat, mat, 0);
249 	env->ReleasePrimitiveArrayCritical(obj_vecs, vecs, 0);
250 
251 }
252 
wrapped_Java_com_badlogic_gdx_math_Matrix4_inv(JNIEnv * env,jclass clazz,jfloatArray obj_values,float * values)253 static inline jboolean wrapped_Java_com_badlogic_gdx_math_Matrix4_inv
254 (JNIEnv* env, jclass clazz, jfloatArray obj_values, float* values) {
255 
256 //@line:1398
257 
258 		return matrix4_inv(values);
259 
260 }
261 
Java_com_badlogic_gdx_math_Matrix4_inv(JNIEnv * env,jclass clazz,jfloatArray obj_values)262 JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_math_Matrix4_inv(JNIEnv* env, jclass clazz, jfloatArray obj_values) {
263 	float* values = (float*)env->GetPrimitiveArrayCritical(obj_values, 0);
264 
265 	jboolean JNI_returnValue = wrapped_Java_com_badlogic_gdx_math_Matrix4_inv(env, clazz, obj_values, values);
266 
267 	env->ReleasePrimitiveArrayCritical(obj_values, values, 0);
268 
269 	return JNI_returnValue;
270 }
271 
wrapped_Java_com_badlogic_gdx_math_Matrix4_det(JNIEnv * env,jclass clazz,jfloatArray obj_values,float * values)272 static inline jfloat wrapped_Java_com_badlogic_gdx_math_Matrix4_det
273 (JNIEnv* env, jclass clazz, jfloatArray obj_values, float* values) {
274 
275 //@line:1406
276 
277 		return matrix4_det(values);
278 
279 }
280 
Java_com_badlogic_gdx_math_Matrix4_det(JNIEnv * env,jclass clazz,jfloatArray obj_values)281 JNIEXPORT jfloat JNICALL Java_com_badlogic_gdx_math_Matrix4_det(JNIEnv* env, jclass clazz, jfloatArray obj_values) {
282 	float* values = (float*)env->GetPrimitiveArrayCritical(obj_values, 0);
283 
284 	jfloat JNI_returnValue = wrapped_Java_com_badlogic_gdx_math_Matrix4_det(env, clazz, obj_values, values);
285 
286 	env->ReleasePrimitiveArrayCritical(obj_values, values, 0);
287 
288 	return JNI_returnValue;
289 }
290 
291