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