CarouselRS.java revision a3cb716626b477c98ba912698c765eab20f27286
15ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller/* 25ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Copyright (C) 2010 The Android Open Source Project 35ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * 45ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Licensed under the Apache License, Version 2.0 (the "License"); 55ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * you may not use this file except in compliance with the License. 65ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * You may obtain a copy of the License at 75ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * 85ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * http://www.apache.org/licenses/LICENSE-2.0 95ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * 105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Unless required by applicable law or agreed to in writing, software 115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * distributed under the License is distributed on an "AS IS" BASIS, 125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * See the License for the specific language governing permissions and 145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * limitations under the License. 155ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 175ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerpackage com.android.ex.carousel; 185ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.content.res.Resources; 205ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.graphics.Bitmap; 215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.renderscript.*; 225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.renderscript.RenderScript.RSMessage; 235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.renderscript.Sampler.Value; 245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.renderscript.ProgramRaster.CullMode; 255ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport android.util.Log; 265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport com.android.internal.R; 285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport static android.renderscript.Element.*; 305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport static android.renderscript.Sampler.Value.LINEAR; 315ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport static android.renderscript.Sampler.Value.WRAP; 325ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerimport static android.renderscript.Sampler.Value.CLAMP; 335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 347cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller/** 357cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * This is a support class for Carousel renderscript. It handles most of the low-level interactions 367cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * with Renderscript as well as dispatching events. 377cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * 387cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 395ce730797a8a7278dfe19dac8a9460b25675fed0Jim Millerpublic class CarouselRS { 405ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final int DEFAULT_VISIBLE_SLOTS = 1; 415ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final int DEFAULT_CARD_COUNT = 1; 425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 435ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller // Client messages *** THIS LIST MUST MATCH THOSE IN carousel.rs *** 445ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public static final int CMD_CARD_SELECTED = 100; 455ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public static final int CMD_REQUEST_TEXTURE = 200; 465ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public static final int CMD_INVALIDATE_TEXTURE = 210; 475ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public static final int CMD_REQUEST_GEOMETRY = 300; 485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public static final int CMD_INVALIDATE_GEOMETRY = 310; 495ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public static final int CMD_ANIMATION_STARTED = 400; 505ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public static final int CMD_ANIMATION_FINISHED = 500; 517cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller public static final int CMD_REQUEST_DETAIL_TEXTURE = 600; 527cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller public static final int CMD_INVALIDATE_DETAIL_TEXTURE = 610; 537cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller public static final int CMD_REPORT_FIRST_CARD_POSITION = 700; 547cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller public static final int CMD_PING = 1000; // for debugging 555ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 565ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final String TAG = "CarouselRS"; 575ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final int DEFAULT_SLOT_COUNT = 10; 585ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private static final boolean MIPMAP = false; 597cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller private static final boolean DBG = false; 605ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 615ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private RenderScriptGL mRS; 625ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private Resources mRes; 631126aa8ba186b42baf5b14c66d44b59f43888b70Stephen Hines private ScriptC_carousel mScript; 645ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private ScriptField_Card mCards; 655ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private Sampler mSampler; 665ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private ProgramStore mProgramStore; 675ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private ProgramFragment mFragmentProgram; 685ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private ProgramVertex mVertexProgram; 695ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private ProgramRaster mRasterProgram; 705ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private CarouselCallback mCallback; 715ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private float[] mEyePoint = new float[3]; 725ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private float[] mAtPoint = new float[3]; 735ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private float[] mUp = new float[3]; 745ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 755ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public static interface CarouselCallback { 765ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 775ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Called when a card is selected 785ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @param n the id of the card 795ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 805ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller void onCardSelected(int n); 815ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 825ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 835ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Called when texture is needed for card n. This happens when the given card becomes 845ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * visible. 855ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @param n the id of the card 865ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 875ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller void onRequestTexture(int n); 885ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 895ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 905ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Called when a texture is no longer needed for card n. This happens when the card 915ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * goes out of view. 925ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @param n the id of the card 935ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 945ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller void onInvalidateTexture(int n); 955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 977cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Called when detail texture is needed for card n. This happens when the given card 987cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * becomes visible. 997cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param n the id of the card 1007cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 1017cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller void onRequestDetailTexture(int n); 1027cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller 1037cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 1047cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * Called when a detail texture is no longer needed for card n. This happens when the card 1057cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * goes out of view. 1067cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller * @param n the id of the card 1077cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller */ 1087cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller void onInvalidateDetailTexture(int n); 1097cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller 1107cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller /** 1115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Called when geometry is needed for card n. 1125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @param n the id of the card. 1135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 1145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller void onRequestGeometry(int n); 1155ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 1179afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller * Called when geometry is no longer needed for card n. This happens when the card goes 1185ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * out of view. 1195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * @param n the id of the card 1205ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 1215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller void onInvalidateGeometry(int n); 1225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 1245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Called when card animation (e.g. a fling) has started. 1255ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 1265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller void onAnimationStarted(); 1275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller /** 1295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller * Called when card animation has stopped. 1305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller */ 1315ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller void onAnimationFinished(); 132198a060d650bc849ef0f25b597888fac9546803bJack Palevich 133198a060d650bc849ef0f25b597888fac9546803bJack Palevich /** 134198a060d650bc849ef0f25b597888fac9546803bJack Palevich * Called when the current position has been requested. 135198a060d650bc849ef0f25b597888fac9546803bJack Palevich */ 136198a060d650bc849ef0f25b597888fac9546803bJack Palevich void onReportFirstCardPosition(int n); 1375ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller }; 1385ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1395ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private RSMessage mRsMessage = new RSMessage() { 1405ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void run() { 1415ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (mCallback == null) return; 1425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller switch (mID) { 1435ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case CMD_CARD_SELECTED: 1445ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mCallback.onCardSelected(mData[0]); 1455ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 1465ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1475ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case CMD_REQUEST_TEXTURE: 1485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mCallback.onRequestTexture(mData[0]); 1495ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 1505ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1515ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case CMD_INVALIDATE_TEXTURE: 152c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller setTexture(mData[0], null); 1535ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mCallback.onInvalidateTexture(mData[0]); 1545ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 1555ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1567cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller case CMD_REQUEST_DETAIL_TEXTURE: 1577cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller mCallback.onRequestDetailTexture(mData[0]); 1587cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller break; 1597cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller 1607cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller case CMD_INVALIDATE_DETAIL_TEXTURE: 161c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller setDetailTexture(mData[0], 0, 0, null); 1627cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller mCallback.onInvalidateDetailTexture(mData[0]); 1637cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller break; 1647cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller 1655ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case CMD_REQUEST_GEOMETRY: 1665ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mCallback.onRequestGeometry(mData[0]); 1675ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 1685ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1695ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case CMD_INVALIDATE_GEOMETRY: 170c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller setGeometry(mData[0], null); 1715ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mCallback.onInvalidateGeometry(mData[0]); 1725ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 1735ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1745ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case CMD_ANIMATION_STARTED: 1755ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mCallback.onAnimationStarted(); 1765ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 1775ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1785ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case CMD_ANIMATION_FINISHED: 1795ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mCallback.onAnimationFinished(); 1805ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 1815ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 182198a060d650bc849ef0f25b597888fac9546803bJack Palevich case CMD_REPORT_FIRST_CARD_POSITION: 183198a060d650bc849ef0f25b597888fac9546803bJack Palevich mCallback.onReportFirstCardPosition(mData[0]); 184198a060d650bc849ef0f25b597888fac9546803bJack Palevich break; 185198a060d650bc849ef0f25b597888fac9546803bJack Palevich 1865ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller case CMD_PING: 1877cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (DBG) Log.v(TAG, "PING..."); 1885ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller break; 1895ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1905ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller default: 1915ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Log.e(TAG, "Unknown RSMessage: " + mID); 1925ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1935ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 1945ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller }; 1955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 1965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void init(RenderScriptGL rs, Resources res, int resId) { 1975ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRS = rs; 1985ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRes = res; 1995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller // create the script object 2011126aa8ba186b42baf5b14c66d44b59f43888b70Stephen Hines mScript = new ScriptC_carousel(mRS, mRes, resId, true); 2025ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRS.mMessageCallback = mRsMessage; 2035ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2045ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller initProgramStore(); 2055ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller initFragmentProgram(); 2065ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller initRasterProgram(); 2075ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller initVertexProgram(); 2085ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2095ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setSlotCount(DEFAULT_SLOT_COUNT); 2105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setVisibleSlots(DEFAULT_VISIBLE_SLOTS); 2115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller createCards(DEFAULT_CARD_COUNT); 2125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setStartAngle(0.0f); 2145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setRadius(1.0f); 2155ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller // update the camera 2175ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller boolean pcam = true; 2185ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (pcam) { 2195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller float eye[] = { 20.6829f, 2.77081f, 16.7314f }; 2205ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller float at[] = { 14.7255f, -3.40001f, -1.30184f }; 2215ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller float up[] = { 0.0f, 1.0f, 0.0f }; 2225ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setLookAt(eye, at, up); 2235ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setRadius(20.0f); 2245ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller // Fov: 25 2255ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } else { 2265ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.invoke_lookAt(2.5f, 2.0f, 2.5f, 0.0f, -0.75f, 0.0f, 0.0f, 1.0f, 0.0f); 2275ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_cardRotation(0.0f); 2285ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller setRadius(1.5f); 2295ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2305ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2315ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller resumeRendering(); 2325ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2345ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setLookAt(float[] eye, float[] at, float[] up) { 2355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller for (int i = 0; i < 3; i++) { 2365ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mEyePoint[i] = eye[i]; 2375ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mAtPoint[i] = at[i]; 2385ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mUp[i] = up[i]; 2395ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2405ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.invoke_lookAt(eye[0], eye[1], eye[2], at[0], at[1], at[2], up[0], up[1], up[2]); 2415ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2435ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setRadius(float radius) { 2445ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_radius(radius); 2455ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2465ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 247c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setCardRotation(float cardRotation) { 248c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mScript.set_cardRotation(cardRotation); 249c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 250c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 251c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setSwaySensitivity(float swaySensitivity) { 252c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mScript.set_swaySensitivity(swaySensitivity); 253c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 254c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 255c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setFrictionCoefficient(float frictionCoeff) { 256c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mScript.set_frictionCoeff(frictionCoeff); 257c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 258c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 259c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma public void setDragFactor(float dragFactor) { 260c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma mScript.set_dragFactor(dragFactor); 261c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma } 262c0bb8af58ae15674178f2db240283719918c6f28Jim Shuma 2635ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private void initVertexProgram() { 2645ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ProgramVertex.Builder pvb = new ProgramVertex.Builder(mRS, null, null); 2655ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mVertexProgram = pvb.create(); 2665ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ProgramVertex.MatrixAllocation pva = new ProgramVertex.MatrixAllocation(mRS); 2675ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mVertexProgram.bindAllocation(pva); 2685ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller pva.setupProjectionNormalized(1, 1); 2695ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_vertexProgram(mVertexProgram); 2705ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2715ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2725ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private void initRasterProgram() { 2735ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ProgramRaster.Builder programRasterBuilder = new ProgramRaster.Builder(mRS); 2745ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRasterProgram = programRasterBuilder.create(); 2755ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller //mRasterProgram.setCullMode(CullMode.NONE); 2765ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_rasterProgram(mRasterProgram); 2775ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2785ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2795ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private void initFragmentProgram() { 2805ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller Sampler.Builder sampleBuilder = new Sampler.Builder(mRS); 2813e919976d4eb87384c1be0ab82caf985f786aa47Jim Miller sampleBuilder.setMin(Value.LINEAR); 2825ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller sampleBuilder.setMag(LINEAR); 2835ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller sampleBuilder.setWrapS(CLAMP); 2845ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller sampleBuilder.setWrapT(CLAMP); 2855ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mSampler = sampleBuilder.create(); 2865ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ProgramFragment.Builder fragmentBuilder = new ProgramFragment.Builder(mRS); 2875ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller fragmentBuilder.setTexture(ProgramFragment.Builder.EnvMode.DECAL, 2885ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ProgramFragment.Builder.Format.RGBA, 0); 2895ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mFragmentProgram = fragmentBuilder.create(); 2905ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mFragmentProgram.bindSampler(mSampler, 0); 2915ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_fragmentProgram(mFragmentProgram); 2925ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 2935ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 2945ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private void initProgramStore() { 2955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ProgramStore.Builder programStoreBuilder = new ProgramStore.Builder(mRS, null, null); 2965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller programStoreBuilder.setDepthFunc(ProgramStore.DepthFunc.LESS); 2979afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller programStoreBuilder.setBlendFunc(ProgramStore.BlendSrcFunc.SRC_ALPHA, 2985ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller ProgramStore.BlendDstFunc.ONE_MINUS_SRC_ALPHA); 299a3cb716626b477c98ba912698c765eab20f27286Jim Miller programStoreBuilder.setDitherEnable(true); 3005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller programStoreBuilder.setDepthMask(true); 3015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mProgramStore = programStoreBuilder.create(); 3025ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_programStore(mProgramStore); 3035ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3045ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3055ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void createCards(int count) 3065ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 3073df59346f395434454d310b070fff195089fbaf1Jim Miller // Because RenderScript can't have allocations with 0 dimensions, we always create 3083df59346f395434454d310b070fff195089fbaf1Jim Miller // an allocation of at least one card. This relies on invoke_createCards() to keep 3093df59346f395434454d310b070fff195089fbaf1Jim Miller // track of when the allocation is not valid. 3103df59346f395434454d310b070fff195089fbaf1Jim Miller mCards = new ScriptField_Card(mRS, count > 0 ? count : 1); 3115ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.bind_cards(mCards); 3125ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.invoke_createCards(count); 3135ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3145ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3155ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setVisibleSlots(int count) 3165ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 3175ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_visibleSlotCount(count); 3185ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3195ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3207c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma public void setVisibleDetails(int count) { 3217c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mScript.set_visibleDetailCount(count); 3227c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 3237c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma 3247c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma public void setDrawDetailBelowCard(boolean below) { 3257c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mScript.set_drawDetailBelowCard(below); 3267c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 3277c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma 3287c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma public void setDrawRuler(boolean drawRuler) { 3297c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma mScript.set_drawRuler(drawRuler); 3307c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma } 3317c09ccce478100d75e4427d87866ff19d758ae7aJim Shuma 3325ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setDefaultBitmap(Bitmap bitmap) 3335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 3345ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_defaultTexture(allocationFromBitmap(bitmap, MIPMAP)); 3355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3365ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3375ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setLoadingBitmap(Bitmap bitmap) 3385ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 3395ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_loadingTexture(allocationFromBitmap(bitmap, MIPMAP)); 3405ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3415ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3425ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setDefaultGeometry(Mesh mesh) 3435ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 3445ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_defaultGeometry(mesh); 3455ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3465ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3475ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setLoadingGeometry(Mesh mesh) 3485ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 3495ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_loadingGeometry(mesh); 3505ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3515ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3525ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setStartAngle(float theta) 3535ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 3545ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_startAngle(theta); 3555ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3565ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3575ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setCallback(CarouselCallback callback) 3585ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 3595ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mCallback = callback; 3605ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3615ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3625ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller private Allocation allocationFromBitmap(Bitmap bitmap, boolean mipmap) 3635ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 3645ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller if (bitmap == null) return null; 365e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich Allocation allocation = Allocation.createFromBitmap(mRS, bitmap, 366a3cb716626b477c98ba912698c765eab20f27286Jim Miller elementForBitmap(bitmap, Bitmap.Config.ARGB_4444), mipmap); 3675ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller allocation.uploadToTexture(0); 3685ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller return allocation; 3695ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 3705ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 3715ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setTexture(int n, Bitmap bitmap) 3725ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 3733df59346f395434454d310b070fff195089fbaf1Jim Miller if (n < 0) throw new IllegalArgumentException("Index cannot be negative"); 3743df59346f395434454d310b070fff195089fbaf1Jim Miller 375c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller synchronized(this) { 376c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller ScriptField_Card.Item item = mCards.get(n); 377c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (item == null) { 378c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (DBG) Log.v(TAG, "setTexture(): no item at index " + n); 379c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller item = new ScriptField_Card.Item(); 3805ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 381c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (bitmap != null) { 382c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (DBG) Log.v(TAG, "creating new bitmap"); 383a3cb716626b477c98ba912698c765eab20f27286Jim Miller item.texture = Allocation.createFromBitmap(mRS, bitmap, 384a3cb716626b477c98ba912698c765eab20f27286Jim Miller elementForBitmap(bitmap, Bitmap.Config.ARGB_4444), MIPMAP); 385c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (DBG) Log.v(TAG, "uploadToTexture(" + n + ")"); 386c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller item.texture.uploadToTexture(0); 387c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (DBG) Log.v(TAG, "done..."); 388c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller } else { 389c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (item.texture != null) { 390c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (DBG) Log.v(TAG, "unloading texture " + n); 391c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller // Don't wait for GC to free native memory. 392c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller // Only works if textures are not shared. 393c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller item.texture.destroy(); 394c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller item.texture = null; 395c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller } 396c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller } 397c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller mCards.set(item, n, false); // This is primarily used for reference counting. 398c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller mScript.invoke_setTexture(n, item.texture); 3995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 4027cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller void setDetailTexture(int n, float offx, float offy, Bitmap bitmap) 4037cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller { 4043df59346f395434454d310b070fff195089fbaf1Jim Miller if (n < 0) throw new IllegalArgumentException("Index cannot be negative"); 4053df59346f395434454d310b070fff195089fbaf1Jim Miller 406c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller synchronized(this) { 407c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller ScriptField_Card.Item item = mCards.get(n); 408c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (item == null) { 409c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (DBG) Log.v(TAG, "setDetailTexture(): no item at index " + n); 410c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller item = new ScriptField_Card.Item(); 411c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller } 412c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller float width = 0.0f; 413c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller float height = 0.0f; 414c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (bitmap != null) { 415e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich item.detailTexture = Allocation.createFromBitmap(mRS, bitmap, 416e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich elementForBitmap(bitmap, Bitmap.Config.ARGB_4444), MIPMAP); 417c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller item.detailTexture.uploadToTexture(0); 418c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller width = bitmap.getWidth(); 419c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller height = bitmap.getHeight(); 420c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller } else { 421c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (item.detailTexture != null) { 422c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (DBG) Log.v(TAG, "unloading texture " + n); 423c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller // Don't wait for GC to free native memory. 424c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller // Only works if textures are not shared. 425c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller item.detailTexture.destroy(); 426c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller item.detailTexture = null; 427c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller } 4287cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 429c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller mCards.set(item, n, false); // This is primarily used for reference counting. 430c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller mScript.invoke_setDetailTexture(n, offx, offy, item.detailTexture); 4317cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 4327cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 4337cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller 4345ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setGeometry(int n, Mesh geometry) 4355ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller { 4363df59346f395434454d310b070fff195089fbaf1Jim Miller if (n < 0) throw new IllegalArgumentException("Index cannot be negative"); 4373df59346f395434454d310b070fff195089fbaf1Jim Miller 438c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller synchronized(this) { 439c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller final boolean mipmap = false; 440c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller ScriptField_Card.Item item = mCards.get(n); 441c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (item == null) { 442c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (DBG) Log.v(TAG, "setGeometry(): no item at index " + n); 443c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller item = new ScriptField_Card.Item(); 444c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller } 445c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (geometry != null) { 446c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller item.geometry = geometry; 447c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller } else { 448c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (DBG) Log.v(TAG, "unloading geometry " + n); 449c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller if (item.geometry != null) { 450c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller // item.geometry.destroy(); 451c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller item.geometry = null; 452c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller } 4535ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 454c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller mCards.set(item, n, false); 455c4c6f38bf410af40e10c63b152befd5a39df87c8Jim Miller mScript.invoke_setGeometry(n, item.geometry); 4565ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4575ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4585ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 459b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller public void setBackgroundColor(Float4 color) { 460b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller mScript.set_backgroundColor(color); 461b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller } 462b0f070636c29ad178f4e21306f301fe3d20c183bJim Miller 4639afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller public void setBackgroundTexture(Bitmap bitmap) { 4649afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller Allocation texture = null; 4659afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller if (bitmap != null) { 466e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich texture = Allocation.createFromBitmap(mRS, bitmap, 467e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich elementForBitmap(bitmap, Bitmap.Config.RGB_565), MIPMAP); 4689afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller texture.uploadToTexture(0); 4699afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller } 4709afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller mScript.set_backgroundTexture(texture); 4719afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller } 4729afba8c61f6aff94c68acbfaae1cc58bd28c13eaJim Miller 4737cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller public void setDetailLineTexture(Bitmap bitmap) { 4747cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller Allocation texture = null; 4757cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller if (bitmap != null) { 476e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich texture = Allocation.createFromBitmap(mRS, bitmap, 477e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich elementForBitmap(bitmap, Bitmap.Config.ARGB_4444), MIPMAP); 4787cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller texture.uploadToTexture(0); 4797cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 4807cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller mScript.set_detailLineTexture(texture); 4817cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller } 4827cb0068e59dde61ef0e649735199e5ba31c9c6afJim Miller 4835ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void pauseRendering() { 4845ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller // Used to update multiple states at once w/o redrawing for each. 4855ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRS.contextBindRootScript(null); 4865ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4875ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 4885ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void resumeRendering() { 4895ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mRS.contextBindRootScript(mScript); 4905ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4915ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 4925ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void doMotion(float x, float y) { 4935ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.invoke_doMotion(x,y); 4945ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4955ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 4965ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void doSelection(float x, float y) { 4975ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.invoke_doSelection(x, y); 4985ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 4995ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 5005ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void doStart(float x, float y) { 5015ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.invoke_doStart(x, y); 5025ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 5035ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 5045ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void doStop(float x, float y) { 5055ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.invoke_doStop(x, y); 5065ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 5075ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller 5085ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller public void setSlotCount(int n) { 5095ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller mScript.set_slotCount(n); 5105ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller } 511198a060d650bc849ef0f25b597888fac9546803bJack Palevich 512198a060d650bc849ef0f25b597888fac9546803bJack Palevich public void requestFirstCardPosition() { 513198a060d650bc849ef0f25b597888fac9546803bJack Palevich mScript.invoke_requestFirstCardPosition(); 514198a060d650bc849ef0f25b597888fac9546803bJack Palevich } 515e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich 516e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich private Element elementForBitmap(Bitmap bitmap, Bitmap.Config defaultConfig) { 517e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich Bitmap.Config config = bitmap.getConfig(); 518e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich if (config == null) { 519e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich config = defaultConfig; 520e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich } 521e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich if (config == Bitmap.Config.ALPHA_8) { 522e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich return A_8(mRS); 523e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich } else if (config == Bitmap.Config.RGB_565) { 524e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich return RGB_565(mRS); 525e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich } else if (config == Bitmap.Config.ARGB_4444) { 526e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich return RGBA_4444(mRS); 527e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich } else if (config == Bitmap.Config.ARGB_8888) { 528e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich return RGBA_8888(mRS); 529e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich } else { 530e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich throw new IllegalArgumentException("Unknown configuration"); 531e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich } 532e0103cfd1a72197454e522834d2e8f600f798073Jack Palevich } 5335ce730797a8a7278dfe19dac8a9460b25675fed0Jim Miller} 534