OSDN Git Service

Add utility functions.
authorKazuhiko Kobayashi <chototsu_moushinp@yahoo.co.jp>
Tue, 12 Jun 2012 22:38:42 +0000 (07:38 +0900)
committerkobayasi <kobayasi@pscnet.co.jp>
Sat, 6 Jul 2013 01:36:59 +0000 (10:36 +0900)
engine/src/bullet/native/projectkyoto_jme3_mmd_nativelib_SkinUtil.cpp [new file with mode: 0644]
engine/src/bullet/native/projectkyoto_jme3_mmd_nativelib_SkinUtil.h [new file with mode: 0644]
engine/src/bullet/projectkyoto/jme3/mmd/nativelib/SkinUtil.java [new file with mode: 0644]

diff --git a/engine/src/bullet/native/projectkyoto_jme3_mmd_nativelib_SkinUtil.cpp b/engine/src/bullet/native/projectkyoto_jme3_mmd_nativelib_SkinUtil.cpp
new file mode 100644 (file)
index 0000000..18b78d1
--- /dev/null
@@ -0,0 +1,62 @@
+#include "projectkyoto_jme3_mmd_nativelib_SkinUtil.h"
+#include <memory.h>
+#include <string.h>
+#include <math.h>
+/*
+ * Class:     projectkyoto_jme3_mmd_SkinUtil
+ * Method:    copy
+ * Signature: (Ljava/nio/Buffer;Ljava/nio/Buffer;I)V
+ */
+JNIEXPORT void JNICALL Java_projectkyoto_jme3_mmd_nativelib_SkinUtil_copy
+  (JNIEnv *env, jclass clazz, jobject src, jobject dist, jint size) {
+    memcpy(env->GetDirectBufferAddress(dist), env->GetDirectBufferAddress(src), size);
+}
+
+/*
+ * Class:     projectkyoto_jme3_mmd_nativelib_SkinUtil
+ * Method:    setSkin
+ * Signature: (Ljava/nio/FloatBuffer;Ljava/nio/ShortBuffer;Ljava/nio/FloatBuffer;F)V
+ */
+JNIEXPORT void JNICALL Java_projectkyoto_jme3_mmd_nativelib_SkinUtil_setSkin
+  (JNIEnv *env, jclass clazz, jobject buf, jobject indexBuf, jobject skinBuf, jfloat weight) {
+    jfloat *dist = (jfloat *)env->GetDirectBufferAddress(buf);
+    jshort *ip = (jshort *)env->GetDirectBufferAddress(indexBuf);
+    jfloat *skin = (jfloat *)env->GetDirectBufferAddress(skinBuf);
+    jlong size = env->GetDirectBufferCapacity(indexBuf);
+    for(int i=0;i<size;i++) {
+        int index = ip[i];
+        jfloat *p1 = &dist[index * 3];
+        jfloat *p2 = &skin[i * 3];
+        *p1 = *p1 + *p2 * weight;
+        p1++;
+        p2++;
+        *p1 = *p1 + *p2 * weight;
+        p1++;
+        p2++;
+        *p1 = *p1 + *p2 * weight;
+    }
+}
+JNIEXPORT void JNICALL Java_projectkyoto_jme3_mmd_nativelib_SkinUtil_copyBoneMatrix
+  (JNIEnv *env, jclass clazz, jobject srcBuf, jobject distBuf, jobject indexBuf) {
+    jfloat *src = (jfloat *)env->GetDirectBufferAddress(srcBuf);
+    jfloat *dist = (jfloat *)env->GetDirectBufferAddress(distBuf);
+    jshort *index = (jshort *)env->GetDirectBufferAddress(indexBuf);
+    jlong size = env->GetDirectBufferCapacity(indexBuf);
+    jfloat *p = dist;
+    for(int i=0;i<size;i++) {
+        memcpy(p, src + index[i] * 16, sizeof(jfloat) * 16);
+        p += 16;
+    }
+}
+/*
+ * Class:     projectkyoto_jme3_mmd_nativelib_SkinUtil
+ * Method:    clear
+ * Signature: (Ljava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_projectkyoto_jme3_mmd_nativelib_SkinUtil_clear
+  (JNIEnv *env, jclass clazz, jobject buf) {
+    jfloat *src = (jfloat *)env->GetDirectBufferAddress(buf);
+    jlong size = env->GetDirectBufferCapacity(buf);
+    memset(src, 0, size);
+}
+
diff --git a/engine/src/bullet/native/projectkyoto_jme3_mmd_nativelib_SkinUtil.h b/engine/src/bullet/native/projectkyoto_jme3_mmd_nativelib_SkinUtil.h
new file mode 100644 (file)
index 0000000..00f600e
--- /dev/null
@@ -0,0 +1,45 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class projectkyoto_jme3_mmd_nativelib_SkinUtil */
+
+#ifndef _Included_projectkyoto_jme3_mmd_nativelib_SkinUtil
+#define _Included_projectkyoto_jme3_mmd_nativelib_SkinUtil
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     projectkyoto_jme3_mmd_nativelib_SkinUtil
+ * Method:    copy
+ * Signature: (Ljava/nio/Buffer;Ljava/nio/Buffer;I)V
+ */
+JNIEXPORT void JNICALL Java_projectkyoto_jme3_mmd_nativelib_SkinUtil_copy
+  (JNIEnv *, jclass, jobject, jobject, jint);
+
+/*
+ * Class:     projectkyoto_jme3_mmd_nativelib_SkinUtil
+ * Method:    setSkin
+ * Signature: (Ljava/nio/FloatBuffer;Ljava/nio/ShortBuffer;Ljava/nio/FloatBuffer;F)V
+ */
+JNIEXPORT void JNICALL Java_projectkyoto_jme3_mmd_nativelib_SkinUtil_setSkin
+  (JNIEnv *, jclass, jobject, jobject, jobject, jfloat);
+
+/*
+ * Class:     projectkyoto_jme3_mmd_nativelib_SkinUtil
+ * Method:    copyBoneMatrix
+ * Signature: (Ljava/nio/FloatBuffer;Ljava/nio/FloatBuffer;Ljava/nio/ShortBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_projectkyoto_jme3_mmd_nativelib_SkinUtil_copyBoneMatrix
+  (JNIEnv *, jclass, jobject, jobject, jobject);
+
+/*
+ * Class:     projectkyoto_jme3_mmd_nativelib_SkinUtil
+ * Method:    clear
+ * Signature: (Ljava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_projectkyoto_jme3_mmd_nativelib_SkinUtil_clear
+  (JNIEnv *, jclass, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/engine/src/bullet/projectkyoto/jme3/mmd/nativelib/SkinUtil.java b/engine/src/bullet/projectkyoto/jme3/mmd/nativelib/SkinUtil.java
new file mode 100644 (file)
index 0000000..7a45376
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package projectkyoto.jme3.mmd.nativelib;
+
+import java.nio.Buffer;
+import java.nio.FloatBuffer;
+import java.nio.ShortBuffer;
+
+/**
+ *
+ * @author kobayasi
+ */
+public class SkinUtil {
+    public static native void copy(Buffer src, Buffer dist, int size);
+    public static native void setSkin(FloatBuffer buf, ShortBuffer indexBuf, FloatBuffer skinBuf, float weight);
+    public static native void copyBoneMatrix(FloatBuffer src, FloatBuffer dist, ShortBuffer indexBuffer);
+    public static native void clear(Buffer buf);
+}