18e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk/* 28e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project 38e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * 48e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 58e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * you may not use this file except in compliance with the License. 68e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * You may obtain a copy of the License at 78e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * 88e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 98e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * 108e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 118e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 128e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * See the License for the specific language governing permissions and 148e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * limitations under the License. 158e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk */ 168e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 178e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukpackage com.android.fbotest; 188e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 198e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukimport java.io.Writer; 208e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 218e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukimport android.content.res.Resources; 228e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukimport android.renderscript.*; 238e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukimport android.renderscript.Element.DataType; 248e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukimport android.renderscript.Element.DataKind; 258e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukimport android.renderscript.ProgramStore.DepthFunc; 268e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukimport android.renderscript.Type.Builder; 278e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukimport android.util.Log; 288e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 298e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 308e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukpublic class FBOTestRS { 318e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 328e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk public FBOTestRS() { 338e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 348e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 358e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk public void init(RenderScriptGL rs, Resources res) { 368e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mRS = rs; 378e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mRes = res; 388e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk initRS(); 398e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 408e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 418e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk public void surfaceChanged() { 428e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mRS.getWidth(); 438e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mRS.getHeight(); 448e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 458e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 468e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private Resources mRes; 478e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private RenderScriptGL mRS; 488e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private Sampler mSampler; 498e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private ProgramStore mPSBackground; 508e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private ProgramFragment mPFBackground; 518e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private ProgramVertex mPVBackground; 528e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private ProgramVertexFixedFunction.Constants mPVA; 538e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 548e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private Allocation mGridImage; 558e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private Allocation mOffscreen; 568e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private Allocation mOffscreenDepth; 578e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private Allocation mAllocPV; 588e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 598e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private Font mItalic; 608e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private Allocation mTextAlloc; 618e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 628e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private ScriptField_MeshInfo mMeshes; 638e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private ScriptC_fbotest mScript; 648e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 658e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 668e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk public void onActionDown(float x, float y) { 678e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.invoke_onActionDown(x, y); 688e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 698e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 708e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk public void onActionScale(float scale) { 718e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.invoke_onActionScale(scale); 728e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 738e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 748e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk public void onActionMove(float x, float y) { 758e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.invoke_onActionMove(x, y); 768e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 778e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 788e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private void initPFS() { 798e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk ProgramStore.Builder b = new ProgramStore.Builder(mRS); 808e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 818e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk b.setDepthFunc(ProgramStore.DepthFunc.LESS); 828e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk b.setDitherEnabled(false); 838e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk b.setDepthMaskEnabled(true); 848e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mPSBackground = b.create(); 858e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 868e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.set_gPFSBackground(mPSBackground); 878e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 888e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 898e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private void initPF() { 908e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Sampler.Builder bs = new Sampler.Builder(mRS); 918e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk bs.setMinification(Sampler.Value.LINEAR); 928e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk bs.setMagnification(Sampler.Value.LINEAR); 938e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk bs.setWrapS(Sampler.Value.CLAMP); 948e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk bs.setWrapT(Sampler.Value.CLAMP); 958e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mSampler = bs.create(); 968e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 978e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk ProgramFragmentFixedFunction.Builder b = new ProgramFragmentFixedFunction.Builder(mRS); 988e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk b.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE, 998e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk ProgramFragmentFixedFunction.Builder.Format.RGBA, 0); 1008e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mPFBackground = b.create(); 1018e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mPFBackground.bindSampler(mSampler, 0); 1028e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1038e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.set_gPFBackground(mPFBackground); 1048e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 1058e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1068e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private void initPV() { 1078e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS); 1088e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mPVBackground = pvb.create(); 1098e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1108e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mPVA = new ProgramVertexFixedFunction.Constants(mRS); 1118e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk ((ProgramVertexFixedFunction)mPVBackground).bindConstants(mPVA); 1128e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1138e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.set_gPVBackground(mPVBackground); 1148e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 1158e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1168e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private void loadImage() { 1178e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mGridImage = Allocation.createFromBitmapResource(mRS, mRes, R.drawable.robot, 1188e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, 1198e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE); 1208e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.set_gTGrid(mGridImage); 1218e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 1228e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1238e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private void initTextAllocation(String fileName) { 1248e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk String allocString = "Displaying file: " + fileName; 1258e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mTextAlloc = Allocation.createFromString(mRS, allocString, Allocation.USAGE_SCRIPT); 1268e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.set_gTextAlloc(mTextAlloc); 1278e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 1288e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1298e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private void initMeshes(FileA3D model) { 1308e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk int numEntries = model.getIndexEntryCount(); 1318e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk int numMeshes = 0; 1328e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk for (int i = 0; i < numEntries; i ++) { 1338e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk FileA3D.IndexEntry entry = model.getIndexEntry(i); 1348e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk if (entry != null && entry.getEntryType() == FileA3D.EntryType.MESH) { 1358e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk numMeshes ++; 1368e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 1378e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 1388e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1398e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk if (numMeshes > 0) { 1408e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mMeshes = new ScriptField_MeshInfo(mRS, numMeshes); 1418e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1428e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk for (int i = 0; i < numEntries; i ++) { 1438e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk FileA3D.IndexEntry entry = model.getIndexEntry(i); 1448e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk if (entry != null && entry.getEntryType() == FileA3D.EntryType.MESH) { 1458e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Mesh mesh = entry.getMesh(); 1468e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mMeshes.set_mMesh(i, mesh, false); 1478e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mMeshes.set_mNumIndexSets(i, mesh.getPrimitiveCount(), false); 1488e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 1498e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 1508e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mMeshes.copyAll(); 1518e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } else { 1528e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk throw new RSRuntimeException("No valid meshes in file"); 1538e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 1548e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1558e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.bind_gMeshes(mMeshes); 1568e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.invoke_updateMeshInfo(); 1578e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 1588e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1598e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk public void loadA3DFile(String path) { 1608e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk FileA3D model = FileA3D.createFromFile(mRS, path); 1618e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk initMeshes(model); 1628e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk initTextAllocation(path); 1638e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 1648e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1658e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk private void initRS() { 1668e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1678e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript = new ScriptC_fbotest(mRS, mRes, R.raw.fbotest); 1688e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1698e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk initPFS(); 1708e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk initPF(); 1718e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk initPV(); 1728e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1738e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk loadImage(); 1748e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1758e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Type.Builder b = new Type.Builder(mRS, Element.RGBA_8888(mRS)); 1768e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk b.setX(512).setY(512); 1778e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mOffscreen = Allocation.createTyped(mRS, 1788e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk b.create(), 1798e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE | 1808e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Allocation.USAGE_GRAPHICS_RENDER_TARGET); 1818e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.set_gOffscreen(mOffscreen); 1828e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1838e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk b = new Type.Builder(mRS, 1848e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Element.createPixel(mRS, DataType.UNSIGNED_16, 1858e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk DataKind.PIXEL_DEPTH)); 1868e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk b.setX(512).setY(512); 1878e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mOffscreenDepth = Allocation.createTyped(mRS, 1888e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk b.create(), 1898e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk Allocation.USAGE_GRAPHICS_RENDER_TARGET); 1908e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.set_gOffscreenDepth(mOffscreenDepth); 1918e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1928e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk FileA3D model = FileA3D.createFromResource(mRS, mRes, R.raw.robot); 1938e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk initMeshes(model); 1948e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1958e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mItalic = Font.create(mRS, mRes, "serif", Font.Style.ITALIC, 8); 1968e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mScript.set_gItalic(mItalic); 1978e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 1988e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk initTextAllocation("R.raw.robot"); 1998e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 2008e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk mRS.bindRootScript(mScript); 2018e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 2028e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk} 2038e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 2048e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 2058e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk 206