/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.modelviewer; import java.io.Writer; import java.util.Map; import java.util.Vector; import android.content.res.Resources; import android.renderscript.*; import android.renderscript.Element.Builder; import android.renderscript.ProgramStore.DepthFunc; import android.util.Log; enum TransformType { NONE(0), TRANSLATE(1), ROTATE(2), SCALE(3); int mID; TransformType(int id) { mID = id; } } public class SgTransform { ScriptField_SgTransform mTransformField; ScriptField_SgTransform mChildField; public ScriptField_SgTransform.Item mTransformData; RenderScript mRS; Vector mChildren; SgTransform mParent; int mIndexInParentGroup; public void setParent(SgTransform parent, int parentIndex) { mParent = parent; mIndexInParentGroup = parentIndex; } public void addChild(SgTransform child) { mChildren.add(child); child.setParent(this, mChildren.size() - 1); } public void setTransform(int index, Float4 value, TransformType type) { mTransformData.transforms[index] = value; mTransformData.transformTypes[index] = type.mID; } void initData() { int numElements = mTransformData.transforms.length; mTransformData.transformTypes = new int[numElements]; for (int i = 0; i < numElements; i ++) { mTransformData.transforms[i] = new Float4(0, 0, 0, 0); mTransformData.transformTypes[i] = TransformType.NONE.mID; } mTransformData.isDirty = 1; mTransformData.children = null; } public SgTransform(RenderScript rs) { mRS = rs; mTransformData = new ScriptField_SgTransform.Item(); mChildren = new Vector(); initData(); } public ScriptField_SgTransform.Item getData() { if (mChildren.size() != 0) { mChildField = new ScriptField_SgTransform(mRS, mChildren.size()); mTransformData.children = mChildField.getAllocation(); for (int i = 0; i < mChildren.size(); i ++) { SgTransform child = (SgTransform)mChildren.get(i); mChildField.set(child.getData(), i, false); } mChildField.copyAll(); } return mTransformData; } public ScriptField_SgTransform getField() { mTransformField = new ScriptField_SgTransform(mRS, 1); mTransformField.set(getData(), 0, true); return mTransformField; } }