--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/m3g_qt/javasrc/javax/microedition/m3g/MorphingMesh.java Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+package javax.microedition.m3g;
+
+public class MorphingMesh extends Mesh
+{
+ //------------------------------------------------------------------
+ // Instance data
+ //------------------------------------------------------------------
+
+ private VertexBuffer[] targets;
+
+ static private IndexBuffer[] tempTrianglesArray;
+ static private Appearance[] tempAppearanceArray;
+
+ static private IndexBuffer tempTriangles;
+ static private Appearance tempAppearance;
+
+ //------------------------------------------------------------------
+ // Constructor(s)
+ //------------------------------------------------------------------
+
+ public MorphingMesh(
+ VertexBuffer base,
+ VertexBuffer[] targets,
+ IndexBuffer triangles,
+ Appearance appearance)
+ {
+ super(createHandle(base, targets, triangles, appearance));
+ this.targets = new VertexBuffer[targets.length];
+ System.arraycopy(targets, 0, this.targets, 0, targets.length);
+ }
+
+ public MorphingMesh(
+ VertexBuffer base,
+ VertexBuffer[] targets,
+ IndexBuffer[] triangles,
+ Appearance[] appearances)
+ {
+ super(createHandle(base, targets, triangles, appearances));
+ this.targets = new VertexBuffer[targets.length];
+ System.arraycopy(targets, 0, this.targets, 0, targets.length);
+ }
+
+ /**
+ */
+ MorphingMesh(int handle)
+ {
+ super(handle);
+ targets = new VertexBuffer[_getMorphTargetCount(handle)];
+ for (int i = 0; i < targets.length; i++)
+ {
+ targets[i] = (VertexBuffer)getInstance(_getMorphTarget(handle, i));
+ }
+ }
+
+ public VertexBuffer getMorphTarget(int index)
+ {
+ return targets[index];
+ }
+
+ public int getMorphTargetCount()
+ {
+ return _getMorphTargetCount(handle);
+ }
+
+ public void setWeights(float[] weights)
+ {
+ _setWeights(handle, weights);
+ }
+
+ public void getWeights(float[] weights)
+ {
+ _getWeights(handle, weights);
+ }
+
+ //------------------------------------------------------------------
+ // Private methods
+ //------------------------------------------------------------------
+
+ static int createHandle(VertexBuffer base,
+ VertexBuffer[] targets,
+ IndexBuffer triangles,
+ Appearance appearance)
+ {
+
+ tempTriangles = triangles;
+ tempAppearance = appearance;
+
+ verifyParams(base, triangles);
+
+ int[] hTargets = new int[targets.length];
+ int[] hTriangles = null;
+ int[] hAppearances = null;
+
+ for (int i = 0; i < targets.length; i++)
+ {
+ hTargets[i] = targets[i].handle;
+ }
+
+ hTriangles = new int[1];
+ hTriangles[0] = triangles.handle;
+
+ if (appearance != null)
+ {
+ hAppearances = new int[1];
+ hAppearances[0] = appearance.handle;
+ }
+
+ int ret = _ctor(Interface.getHandle(),
+ base.handle,
+ hTargets,
+ hTriangles,
+ hAppearances);
+
+ tempTriangles = null;
+ tempAppearance = null;
+
+ return ret;
+ }
+
+ static int createHandle(VertexBuffer base,
+ VertexBuffer[] targets,
+ IndexBuffer[] triangles,
+ Appearance[] appearances)
+ {
+
+ tempTrianglesArray = triangles;
+ tempAppearanceArray = appearances;
+
+
+ verifyParams(base, triangles, appearances);
+
+ int[] hTargets = new int[targets.length];
+ int[] hTriangles = null;
+ int[] hAppearances = null;
+
+ for (int i = 0; i < targets.length; i++)
+ {
+ hTargets[i] = targets[i].handle;
+ }
+
+ hTriangles = new int[triangles.length];
+
+ if (appearances != null)
+ {
+ hAppearances = new int[appearances.length];
+ }
+
+ for (int i = 0; i < triangles.length; i++)
+ {
+ hTriangles[i] = triangles[i].handle;
+
+ if (hAppearances != null)
+ {
+ hAppearances[i] = appearances[i] != null ? appearances[i].handle : 0;
+ }
+ }
+
+ int ret = _ctor(Interface.getHandle(),
+ base.handle,
+ hTargets,
+ hTriangles,
+ hAppearances);
+
+ tempTrianglesArray = null;
+ tempAppearanceArray = null;
+
+ return ret;
+
+ }
+
+ // Native methods
+ private static native int _ctor(int hInstance,
+ int handle,
+ int[] hTargets,
+ int[] hTriangles,
+ int[] hAppearances);
+ private static native void _setWeights(int handle, float[] weights);
+ private static native void _getWeights(int handle, float[] weights);
+ private static native int _getMorphTarget(int handle, int index);
+ private static native int _getMorphTargetCount(int handle);
+}