javauis/m3g_qt/javasrc/javax/microedition/m3g/MorphingMesh.java
branchRCL_3
changeset 19 04becd199f91
--- /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);
+}