2023-01-20 339
我希望能够在我的Android应用程序中添加一个本机的C代码.我有一个intbuffer,用作OpenGL的GlcolorPointer方法的参数.这是填充/使用这样的东西:
private IntBuffer mColourBuffer;
int[] colours = new int[10 * 4]; // 10 dots, 4 colour components per dot
ByteBuffer vbb3 = ByteBuffer.allocateDirect(10 * 4 * 4);
vbb3.order(ByteOrder.nativeOrder());
mColourBuffer = vbb3.asIntBuffer();
mColourBuffer.put(colours);
mColourBuffer.position(0);
gl.glColorPointer(4, GL10.GL_FIXED, 0, mColourBuffer);
我想对此缓冲区进行更改,但与Java相比太慢了,所以我想用本机代码进行操作.我一直在寻找一个简单的例子,但是我找不到任何可以理解或有效的东西.我看过的很多文档都谈论传递元素,但我想要的只是指针.传递指针并在指向其指向的内存上操作应该非常有效;在Java和C之间传递内存负载将杀死C.
的内存,可能会杀死任何速度的改进.
到目前为止,我想出了这个:
void Java_com_poldie_myTouch2_myclass_mymethod( JNIEnv* env, jobject thiz, jintArray arr, int n )
{
jint *c_array;
c_array = (*env)->GetIntArrayElements(env, arr, NULL);
(*env)->ReleaseIntArrayElements(env, arr, c_array, 0);
return;
}
我可以这样称呼:
public native void mymethod(IntBuffer intbuf, int n);
mymethod(mColourBuffer , n);
至少可以运行并似乎打电话,但是任何尝试在C_Array上操作的尝试(无论是作为重新推荐的指针还是数组)都会导致程序立即退出.
我在正确的轨道上吗?我可以将指针传递给McOlourBuffer后面的内存到我的C代码并在返回我的Java代码时操作吗?
在这里回答我自己的问题,似乎答案是将您的顶点数组(您使用Java操纵每个帧)并将其写入直接缓冲区.
在上面的示例中,我想以某种方式用本地阵列”颜色”中的任何内容填充直接的缓冲区mcolourbuffer.事实证明,您需要类似的东西:
JNIfastPutf(mfColourBuffer, colours, nCount);
ncount是要复制的字节数. (本机,c)函数jnifastputf看起来像这样:
void Java_com_a_b_c_JNIfastPutf(JNIEnv* env, jobject thiz, jobject jo, jfloatArray jfa, int n)
{
float* pDst = (float*) (*env)->GetDirectBufferAddress(env, jo);
float* pSrc = (float*) (*env)->GetPrimitiveArrayCritical(env, jfa, 0);
memcpy( pDst, pSrc, n );
(*env)->ReleasePrimitiveArrayCritical(env, jfa, pSrc, 0);
}
我发现以下链接非常有用(我的功能是其C ++示例的稍微修改的C版本):
http://www.badlogicgames.com/wiki/wiki/index.php/direct_bulk_floatbuffer.put_is_is_slow” rel=” rel=” rel =”rel =”rel =”rel = htttp://wwwwwwwwwwwwwwwwwwwwwww.badlogicgame.com.com.com.phiki/indindex.phpp/direct_bulk_floatbuffer.put_is_slow
他们解释说,如果您正在使用浮子,您确实需要这种方法;据说使用ints要快得多,尽管那是我开始的地方,无论如何,它们的本机代码在20-> 100%速度的区域中显示出比”快速” INT版本的速度,因此似乎几乎没有原因不这样做!
以上所述是小编给大家介绍的在Android游戏中向C函数传递java.nio.IntBuffer,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25919.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态