簡短版本:我可以使用JNI jdouble將Java中的double值傳遞給C++。但是,當我使用浮動時,C++ jfloat參數始終是NaN。Android:將float值從Java傳遞給JNI始終是NaN
更長版本: 我正在修改VS 2015的hello-gl2 Android樣本,繪製三角形(https://code.msdn.microsoft.com/hello-gl2-android-3b61896c),添加一個簡單的函數來旋轉三角形。
在gl_code.cpp:
extern "C" {
JNIEXPORT void JNICALL Java_com_android_gl2jni_GL2JNILib_updateAngle(JNIEnv * env, jfloat dAngle);
};
JNIEXPORT void JNICALL Java_com_android_gl2jni_GL2JNILib_updateAngle(JNIEnv * env, jfloat dAngle)
{
__android_log_print(ANDROID_LOG_DEBUG, "DEBUG", "updateAngle: %f", dAngle);
rotationAngle += dAngle;
}
而且在GL2JNILib.java:
public class GL2JNILib {
public static native void updateAngle(float dAngle);
}
,這是所有從GL2JNIView.java叫:
GL2JNILib.updateAngle(0.5f);
的VS調試器顯示jfloat dAngle的值爲nan(3b52bc),無論我從Java傳遞什麼值,logcat顯示「nan」和OpenGL co通過畫什麼來證明這一點。
我在Nexus 9硬件設備上運行。當使用Nexus_5_API_22_x86模擬器時,我似乎得到了許多不同的值,有時甚至是NaN,即使我總是以0.5f傳遞。如果我在上面的所有代碼中將「jdlo」和「float」替換爲「double」,那麼在設備和仿真器上一切正常。
我在做什麼錯?謝謝!!
非常感謝!我不知道爲什麼它爲雙打工作,但我確實錯過了第二個參數,現在一切都很好。 – Ian
它適用於雙打,因爲64位參數必須在堆棧上對齊64位。 'classz'參數獲得了32位填充。 – fadden
非常歡迎您! –