|
1 | 1 | /* |
2 | | -Copyright (c) 2024-2025 Stephen Gold |
| 2 | +Copyright (c) 2024-2026 Stephen Gold |
3 | 3 |
|
4 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy |
5 | 5 | of this software and associated documentation files (the "Software"), to deal |
@@ -132,20 +132,18 @@ JNIEXPORT jint JNICALL Java_com_github_stephengold_joltjni_Character_getBodyId |
132 | 132 | /* |
133 | 133 | * Class: com_github_stephengold_joltjni_Character |
134 | 134 | * Method: getCenterOfMassPosition |
135 | | - * Signature: (J[DZ)V |
| 135 | + * Signature: (JLjava/nio/DoubleBuffer;Z)V |
136 | 136 | */ |
137 | 137 | JNIEXPORT void JNICALL Java_com_github_stephengold_joltjni_Character_getCenterOfMassPosition |
138 | | - (JNIEnv *pEnv, jclass, jlong characterVa, jdoubleArray storeDoubles, jboolean lockBodies) { |
| 138 | + (JNIEnv *pEnv, jclass, jlong characterVa, jobject storeDoubles, jboolean lockBodies) { |
139 | 139 | const Character * const pCharacter |
140 | 140 | = reinterpret_cast<Character *> (characterVa); |
141 | 141 | const RVec3 location = pCharacter->GetCenterOfMassPosition(lockBodies); |
142 | | - jboolean isCopy; |
143 | | - jdouble * const pStoreDoubles |
144 | | - = pEnv->GetDoubleArrayElements(storeDoubles, &isCopy); |
| 142 | + DIRECT_DOUBLE_BUFFER(pEnv, storeDoubles, pStoreDoubles, capacityDoubles); |
| 143 | + JPH_ASSERT(capacityDoubles >= 3); |
145 | 144 | pStoreDoubles[0] = location.GetX(); |
146 | 145 | pStoreDoubles[1] = location.GetY(); |
147 | 146 | pStoreDoubles[2] = location.GetZ(); |
148 | | - pEnv->ReleaseDoubleArrayElements(storeDoubles, pStoreDoubles, 0); |
149 | 147 | } |
150 | 148 |
|
151 | 149 | /* |
@@ -179,88 +177,79 @@ JNIEXPORT jint JNICALL Java_com_github_stephengold_joltjni_Character_getLayer |
179 | 177 | /* |
180 | 178 | * Class: com_github_stephengold_joltjni_Character |
181 | 179 | * Method: getLinearVelocity |
182 | | - * Signature: (J[FZ)V |
| 180 | + * Signature: (JLjava/nio/FloatBuffer;Z)V |
183 | 181 | */ |
184 | 182 | JNIEXPORT void JNICALL Java_com_github_stephengold_joltjni_Character_getLinearVelocity |
185 | | - (JNIEnv *pEnv, jclass, jlong characterVa, jfloatArray storeFloats, jboolean lockBodies) { |
| 183 | + (JNIEnv *pEnv, jclass, jlong characterVa, jobject storeFloats, jboolean lockBodies) { |
186 | 184 | const Character * const pCharacter |
187 | 185 | = reinterpret_cast<Character *> (characterVa); |
188 | 186 | const Vec3 velocity = pCharacter->GetLinearVelocity(lockBodies); |
189 | | - jboolean isCopy; |
190 | | - jfloat * const pStoreFloats |
191 | | - = pEnv->GetFloatArrayElements(storeFloats, &isCopy); |
| 187 | + DIRECT_FLOAT_BUFFER(pEnv, storeFloats, pStoreFloats, capacityFloats); |
| 188 | + JPH_ASSERT(capacityFloats >= 3); |
192 | 189 | pStoreFloats[0] = velocity.GetX(); |
193 | 190 | pStoreFloats[1] = velocity.GetY(); |
194 | 191 | pStoreFloats[2] = velocity.GetZ(); |
195 | | - pEnv->ReleaseFloatArrayElements(storeFloats, pStoreFloats, 0); |
196 | 192 | } |
197 | 193 |
|
198 | 194 | /* |
199 | 195 | * Class: com_github_stephengold_joltjni_Character |
200 | 196 | * Method: getPosition |
201 | | - * Signature: (J[DZ)V |
| 197 | + * Signature: (JLjava/nio/DoubleBuffer;Z)V |
202 | 198 | */ |
203 | 199 | JNIEXPORT void JNICALL Java_com_github_stephengold_joltjni_Character_getPosition |
204 | | - (JNIEnv *pEnv, jclass, jlong characterVa, jdoubleArray storeDoubles, jboolean lockBodies) { |
| 200 | + (JNIEnv *pEnv, jclass, jlong characterVa, jobject storeDoubles, jboolean lockBodies) { |
205 | 201 | const Character * const pCharacter |
206 | 202 | = reinterpret_cast<Character *> (characterVa); |
207 | 203 | const RVec3 location = pCharacter->GetPosition(lockBodies); |
208 | | - jboolean isCopy; |
209 | | - jdouble * const pStoreDoubles |
210 | | - = pEnv->GetDoubleArrayElements(storeDoubles, &isCopy); |
| 204 | + DIRECT_DOUBLE_BUFFER(pEnv, storeDoubles, pStoreDoubles, capacityDoubles); |
| 205 | + JPH_ASSERT(capacityDoubles >= 3); |
211 | 206 | pStoreDoubles[0] = location.GetX(); |
212 | 207 | pStoreDoubles[1] = location.GetY(); |
213 | 208 | pStoreDoubles[2] = location.GetZ(); |
214 | | - pEnv->ReleaseDoubleArrayElements(storeDoubles, pStoreDoubles, 0); |
215 | 209 | } |
216 | 210 |
|
217 | 211 | /* |
218 | 212 | * Class: com_github_stephengold_joltjni_Character |
219 | 213 | * Method: getPositionAndRotation |
220 | | - * Signature: (J[D[FZ)V |
| 214 | + * Signature: (JLjava/nio/DoubleBuffer;Ljava/nio/FloatBuffer;Z)V |
221 | 215 | */ |
222 | 216 | JNIEXPORT void JNICALL Java_com_github_stephengold_joltjni_Character_getPositionAndRotation |
223 | | - (JNIEnv *pEnv, jclass, jlong characterVa, jdoubleArray storeDoubles, |
224 | | - jfloatArray storeFloats, jboolean lockBodies) { |
| 217 | + (JNIEnv *pEnv, jclass, jlong characterVa, jobject storeDoubles, |
| 218 | + jobject storeFloats, jboolean lockBodies) { |
225 | 219 | const Character * const pCharacter |
226 | 220 | = reinterpret_cast<Character *> (characterVa); |
227 | 221 | RVec3 location; |
228 | 222 | Quat orientation; |
229 | 223 | pCharacter->GetPositionAndRotation(location, orientation, lockBodies); |
230 | | - jboolean isCopy; |
231 | | - jdouble * const pStoreDoubles |
232 | | - = pEnv->GetDoubleArrayElements(storeDoubles, &isCopy); |
| 224 | + DIRECT_DOUBLE_BUFFER(pEnv, storeDoubles, pStoreDoubles, capacityDoubles); |
| 225 | + JPH_ASSERT(capacityDoubles >= 3); |
233 | 226 | pStoreDoubles[0] = location.GetX(); |
234 | 227 | pStoreDoubles[1] = location.GetY(); |
235 | 228 | pStoreDoubles[2] = location.GetZ(); |
236 | | - pEnv->ReleaseDoubleArrayElements(storeDoubles, pStoreDoubles, 0); |
237 | | - jfloat * const pStoreFloats |
238 | | - = pEnv->GetFloatArrayElements(storeFloats, &isCopy); |
| 229 | + DIRECT_FLOAT_BUFFER(pEnv, storeFloats, pStoreFloats, capacityFloats); |
| 230 | + JPH_ASSERT(capacityFloats >= 4); |
239 | 231 | pStoreFloats[0] = orientation.GetX(); |
240 | 232 | pStoreFloats[1] = orientation.GetY(); |
241 | 233 | pStoreFloats[2] = orientation.GetZ(); |
242 | 234 | pStoreFloats[3] = orientation.GetW(); |
243 | | - pEnv->ReleaseFloatArrayElements(storeFloats, pStoreFloats, 0); |
244 | 235 | } |
245 | 236 |
|
246 | 237 | /* |
247 | 238 | * Class: com_github_stephengold_joltjni_Character |
248 | 239 | * Method: getRotation |
249 | | - * Signature: (J[FZ)V |
| 240 | + * Signature: (JLjava/nio/FloatBuffer;Z)V |
250 | 241 | */ |
251 | 242 | JNIEXPORT void JNICALL Java_com_github_stephengold_joltjni_Character_getRotation |
252 | | - (JNIEnv *pEnv, jclass, jlong characterVa, jfloatArray storeFloats, jboolean lockBodies) { |
| 243 | + (JNIEnv *pEnv, jclass, jlong characterVa, jobject storeFloats, jboolean lockBodies) { |
253 | 244 | const Character * const pCharacter |
254 | 245 | = reinterpret_cast<Character *> (characterVa); |
255 | 246 | const Quat orientation = pCharacter->GetRotation(lockBodies); |
256 | | - jboolean isCopy; |
257 | | - jfloat * const pStoreFloats |
258 | | - = pEnv->GetFloatArrayElements(storeFloats, &isCopy); |
| 247 | + DIRECT_FLOAT_BUFFER(pEnv, storeFloats, pStoreFloats, capacityFloats); |
| 248 | + JPH_ASSERT(capacityFloats >= 4); |
259 | 249 | pStoreFloats[0] = orientation.GetX(); |
260 | 250 | pStoreFloats[1] = orientation.GetY(); |
261 | 251 | pStoreFloats[2] = orientation.GetZ(); |
262 | 252 | pStoreFloats[3] = orientation.GetW(); |
263 | | - pEnv->ReleaseFloatArrayElements(storeFloats, pStoreFloats, 0); |
264 | 253 | } |
265 | 254 |
|
266 | 255 | /* |
|
0 commit comments