Skip to content

Commit c525ac9

Browse files
committed
Ragdoll: refactor 2 getters to use direct buffers (missing piece)
1 parent 0c124cd commit c525ac9

1 file changed

Lines changed: 11 additions & 16 deletions

File tree

src/main/native/glue/ra/Ragdoll.cpp

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -164,22 +164,20 @@ JNIEXPORT jint JNICALL Java_com_github_stephengold_joltjni_Ragdoll_getConstraint
164164
/*
165165
* Class: com_github_stephengold_joltjni_Ragdoll
166166
* Method: getPose
167-
* Signature: (J[DJZ)V
167+
* Signature: (JLjava/nio/DoubleBuffer;JZ)V
168168
*/
169169
JNIEXPORT void JNICALL Java_com_github_stephengold_joltjni_Ragdoll_getPose
170-
(JNIEnv *pEnv, jclass, jlong ragdollVa, jdoubleArray storeDoubles,
170+
(JNIEnv *pEnv, jclass, jlong ragdollVa, jobject storeDoubles,
171171
jlong storeMatsVa, jboolean lockBodies) {
172172
Ragdoll * const pRagdoll = reinterpret_cast<Ragdoll *> (ragdollVa);
173173
RVec3 rootOffset;
174174
Mat44 * const pMatrices = reinterpret_cast<Mat44 *> (storeMatsVa);
175175
pRagdoll->GetPose(rootOffset, pMatrices, lockBodies);
176-
jboolean isCopy;
177-
jdouble * const pStoreDoubles
178-
= pEnv->GetDoubleArrayElements(storeDoubles, &isCopy);
176+
DIRECT_DOUBLE_BUFFER(pEnv, storeDoubles, pStoreDoubles, capacityDoubles);
177+
JPH_ASSERT(capacityDoubles >= 3);
179178
pStoreDoubles[0] = rootOffset.GetX();
180179
pStoreDoubles[1] = rootOffset.GetY();
181180
pStoreDoubles[2] = rootOffset.GetZ();
182-
pEnv->ReleaseDoubleArrayElements(storeDoubles, pStoreDoubles, 0);
183181
}
184182

185183
/*
@@ -209,29 +207,26 @@ JNIEXPORT jint JNICALL Java_com_github_stephengold_joltjni_Ragdoll_getRefCount
209207
/*
210208
* Class: com_github_stephengold_joltjni_Ragdoll
211209
* Method: getRootTransform
212-
* Signature: (J[D[FZ)V
210+
* Signature: (JLjava/nio/DoubleBuffer;Ljava/nio/FloatBuffer;Z)V
213211
*/
214212
JNIEXPORT void JNICALL Java_com_github_stephengold_joltjni_Ragdoll_getRootTransform
215-
(JNIEnv *pEnv, jclass, jlong ragdollVa, jdoubleArray storeDoubles,
216-
jfloatArray storeFloats, jboolean lockBodies) {
213+
(JNIEnv *pEnv, jclass, jlong ragdollVa, jobject storeDoubles,
214+
jobject storeFloats, jboolean lockBodies) {
217215
const Ragdoll * const pRagdoll = reinterpret_cast<Ragdoll *> (ragdollVa);
218216
RVec3 outPosition;
219217
Quat outRotation;
220218
pRagdoll->GetRootTransform(outPosition, outRotation, lockBodies);
221-
jboolean isCopy;
222-
jdouble * const pStoreDoubles
223-
= pEnv->GetDoubleArrayElements(storeDoubles, &isCopy);
219+
DIRECT_DOUBLE_BUFFER(pEnv, storeDoubles, pStoreDoubles, capacityDoubles);
220+
JPH_ASSERT(capacityDoubles >= 3);
224221
pStoreDoubles[0] = outPosition.GetX();
225222
pStoreDoubles[1] = outPosition.GetY();
226223
pStoreDoubles[2] = outPosition.GetZ();
227-
pEnv->ReleaseDoubleArrayElements(storeDoubles, pStoreDoubles, 0);
228-
jfloat * const pStoreFloats
229-
= pEnv->GetFloatArrayElements(storeFloats, &isCopy);
224+
DIRECT_FLOAT_BUFFER(pEnv, storeFloats, pStoreFloats, capacityFloats);
225+
JPH_ASSERT(capacityFloats >= 4);
230226
pStoreFloats[0] = outRotation.GetX();
231227
pStoreFloats[1] = outRotation.GetY();
232228
pStoreFloats[2] = outRotation.GetZ();
233229
pStoreFloats[3] = outRotation.GetW();
234-
pEnv->ReleaseFloatArrayElements(storeFloats, pStoreFloats, 0);
235230
}
236231

237232
/*

0 commit comments

Comments
 (0)