1394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk/* 2394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project 3394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * 4394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 5394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * you may not use this file except in compliance with the License. 6394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * You may obtain a copy of the License at 7394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * 8394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 9394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * 10394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 11394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 12394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * See the License for the specific language governing permissions and 14394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * limitations under the License. 15394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk */ 16394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 17394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukpackage com.android.perftest; 18394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 19394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.os.Environment; 20394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.content.res.Resources; 21394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.graphics.Bitmap; 22394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.graphics.BitmapFactory; 23394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.*; 24394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.Element.DataKind; 25394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.Element.DataType; 26394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.Allocation.MipmapControl; 27394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.Program.TextureType; 28394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.ProgramStore.DepthFunc; 29394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.ProgramStore.BlendSrcFunc; 30394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.ProgramStore.BlendDstFunc; 31394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.RenderScript.RSMessageHandler; 32394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.Mesh.Primitive; 33394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.Matrix4f; 34394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.ProgramVertexFixedFunction; 35394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 36394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.util.Log; 37394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 38394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 39394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukpublic class UiTest implements RsBenchBaseTest{ 40394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 41394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private static final String TAG = "UiTest"; 42394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private static final String SAMPLE_TEXT = "Bench Test"; 43394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private static final String LIST_TEXT = 44394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "This is a sample list of text to show in the list view"; 45394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private static int PARTICLES_COUNT = 12000; 46394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 47394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private RenderScriptGL mRS; 48394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Resources mRes; 49394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 50394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Font mFontSans; 51394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 52394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ScriptField_ListAllocs_s mTextureAllocs; 53394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ScriptField_ListAllocs_s mSampleTextAllocs; 54394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ScriptField_ListAllocs_s mSampleListViewAllocs; 55394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ScriptField_VpConsts mPvStarAlloc; 56394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramVertexFixedFunction.Constants mPvProjectionAlloc; 57394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 58394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Mesh mSingleMesh; 59394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Mesh mParticlesMesh; 60394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 61394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ScriptC_ui_test mUiScript; 62394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 63394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private final BitmapFactory.Options mOptionsARGB = new BitmapFactory.Options(); 64394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 65394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_TestScripts_s.Item[] mTests; 66394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 67394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private final String[] mNames = { 68394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "UI test with icon display 10 by 10", 69394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "UI test with icon display 100 by 100", 70394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "UI test with image and text display 3 pages", 71394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "UI test with image and text display 5 pages", 72394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "UI test with list view", 73394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "UI test with live wallpaper" 74394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk }; 75394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 76394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk public UiTest() { 77394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 78394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 79394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk void addTest(int index, int testId, int user1, int user2, int user3) { 80394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests[index] = new ScriptField_TestScripts_s.Item(); 81394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests[index].testScript = mUiScript; 82394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests[index].testName = Allocation.createFromString(mRS, 83394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mNames[index], 84394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.USAGE_SCRIPT); 855de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk mTests[index].debugName = RsBenchRS.createZeroTerminatedAlloc(mRS, 865de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk mNames[index], 875de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk Allocation.USAGE_SCRIPT); 88394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 89394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_UiTestData_s.Item dataItem = new ScriptField_UiTestData_s.Item(); 90394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk dataItem.testId = testId; 91394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk dataItem.user1 = user1; 92394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk dataItem.user2 = user2; 93394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk dataItem.user3 = user3; 94394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_UiTestData_s testData = new ScriptField_UiTestData_s(mRS, 1); 95394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk testData.set(dataItem, 0, true); 96394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests[index].testData = testData.getAllocation(); 97394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 98394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 99394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk public boolean init(RenderScriptGL rs, Resources res) { 100394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mRS = rs; 101394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mRes = res; 102394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFontSans = Font.create(mRS, mRes, "sans-serif", Font.Style.NORMAL, 8); 103394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mSingleMesh = getSingleMesh(1, 1); // a unit size mesh 104394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 105394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk initUiScript(); 106394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests = new ScriptField_TestScripts_s.Item[mNames.length]; 107394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 108394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk int index = 0; 109394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 110394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 0, 0 /*meshMode*/, 0 /*unused*/, 0 /*unused*/); 111394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 0, 1 /*meshMode*/, 0 /*unused*/, 0 /*unused*/); 112394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 1, 7 /*wResolution*/, 5 /*hResolution*/, 0 /*meshMode*/); 113394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 1, 7 /*wResolution*/, 5 /*hResolution*/, 1 /*meshMode*/); 114394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 2, 0 /*unused*/, 0 /*unused*/, 0 /*unused*/); 115394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 3, 7 /*wResolution*/, 5 /*hResolution*/, 0 /*unused*/); 116394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 117394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return true; 118394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 119394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 120394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk public ScriptField_TestScripts_s.Item[] getTests() { 121394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return mTests; 122394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 123394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 124394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk public String[] getTestNames() { 125394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return mNames; 126394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 127394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 128394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Allocation loadTextureRGB(int id) { 129394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return Allocation.createFromBitmapResource(mRS, mRes, id, 130394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, 131394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE); 132394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 133394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 134394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Allocation loadTextureARGB(int id) { 135394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Bitmap b = BitmapFactory.decodeResource(mRes, id, mOptionsARGB); 136394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return Allocation.createFromBitmap(mRS, b, 137394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, 138394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE); 139394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 140394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 141394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private void createParticlesMesh() { 142394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_Particle p = new ScriptField_Particle(mRS, PARTICLES_COUNT); 143394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 144394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk final Mesh.AllocationBuilder meshBuilder = new Mesh.AllocationBuilder(mRS); 145394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk meshBuilder.addVertexAllocation(p.getAllocation()); 146394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk final int vertexSlot = meshBuilder.getCurrentVertexTypeIndex(); 147394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk meshBuilder.addIndexSetType(Primitive.POINT); 148394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mParticlesMesh = meshBuilder.create(); 149394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 150394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gParticlesMesh(mParticlesMesh); 151394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.bind_Particles(p); 152394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 153394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 154394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk /** 155394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * Create a mesh with a single quad for the given width and height. 156394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk */ 157394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Mesh getSingleMesh(float width, float height) { 158394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Mesh.TriangleMeshBuilder tmb = new Mesh.TriangleMeshBuilder(mRS, 159394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 2, Mesh.TriangleMeshBuilder.TEXTURE_0); 160394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk float xOffset = width/2; 161394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk float yOffset = height/2; 162394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk tmb.setTexture(0, 0); 163394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk tmb.addVertex(-1.0f * xOffset, -1.0f * yOffset); 164394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk tmb.setTexture(1, 0); 165394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk tmb.addVertex(xOffset, -1.0f * yOffset); 166394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk tmb.setTexture(1, 1); 167394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk tmb.addVertex(xOffset, yOffset); 168394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk tmb.setTexture(0, 1); 169394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk tmb.addVertex(-1.0f * xOffset, yOffset); 170394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk tmb.addTriangle(0, 3, 1); 171394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk tmb.addTriangle(1, 3, 2); 172394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return tmb.create(true); 173394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 174394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 175394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Matrix4f getProjectionNormalized(int w, int h) { 176394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // range -1,1 in the narrow axis at z = 0. 177394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Matrix4f m1 = new Matrix4f(); 178394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Matrix4f m2 = new Matrix4f(); 179394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 180394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk if(w > h) { 181394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk float aspect = ((float)w) / h; 182394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk m1.loadFrustum(-aspect,aspect, -1,1, 1,100); 183394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } else { 184394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk float aspect = ((float)h) / w; 185394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk m1.loadFrustum(-1,1, -aspect,aspect, 1,100); 186394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 187394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 188394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk m2.loadRotate(180, 0, 1, 0); 189394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk m1.loadMultiply(m1, m2); 190394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 191394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk m2.loadScale(-2, 2, 1); 192394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk m1.loadMultiply(m1, m2); 193394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 194394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk m2.loadTranslate(0, 0, 2); 195394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk m1.loadMultiply(m1, m2); 196394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return m1; 197394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 198394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 199394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private void updateProjectionMatrices() { 200394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Matrix4f projNorm = getProjectionNormalized(1280, 720); 201394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_VpConsts.Item i = new ScriptField_VpConsts.Item(); 202394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk i.Proj = projNorm; 203394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk i.MVP = projNorm; 204394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mPvStarAlloc.set(i, 0, true); 205394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mPvProjectionAlloc.setProjection(projNorm); 206394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 207394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 208394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk void initUiScript() { 209394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript = new ScriptC_ui_test(mRS, mRes, R.raw.ui_test); 210394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 211394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragmentFixedFunction.Builder colBuilder = new ProgramFragmentFixedFunction.Builder(mRS); 212394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk colBuilder.setVaryingColor(false); 213394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragmentFixedFunction.Builder texBuilder = new ProgramFragmentFixedFunction.Builder(mRS); 214394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk texBuilder.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE, 215394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragmentFixedFunction.Builder.Format.RGBA, 0); 216394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 217394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS); 218394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramVertexFixedFunction progVertex = pvb.create(); 219394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramVertexFixedFunction.Constants PVA = new ProgramVertexFixedFunction.Constants(mRS); 220394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ((ProgramVertexFixedFunction)progVertex).bindConstants(PVA); 221394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Matrix4f proj = new Matrix4f(); 222394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk proj.loadOrthoWindow(1280, 720); 223394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk PVA.setProjection(proj); 224394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 225394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gProgVertex(progVertex); 226394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gProgFragmentColor(colBuilder.create()); 227394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gProgFragmentTexture(texBuilder.create()); 228394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gProgStoreBlendAlpha(ProgramStore.BLEND_ALPHA_DEPTH_NONE(mRS)); 229394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 230394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gLinearClamp(Sampler.CLAMP_LINEAR(mRS)); 231394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 232394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gTexTorus(loadTextureRGB(R.drawable.torusmap)); 233394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gTexOpaque(loadTextureRGB(R.drawable.data)); 234394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gTexGlobe(loadTextureRGB(R.drawable.globe)); 235394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gSingleMesh(mSingleMesh); 236394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 237394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // For GALAXY 238394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramStore.Builder psb = new ProgramStore.Builder(mRS); 239394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk psb.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ZERO); 240394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mRS.bindProgramStore(psb.create()); 241394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 242394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk psb.setBlendFunc(BlendSrcFunc.SRC_ALPHA, BlendDstFunc.ONE); 243394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gPSLights(psb.create()); 244394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 245394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // For Galaxy live wallpaper drawing 246394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragmentFixedFunction.Builder builder = new ProgramFragmentFixedFunction.Builder(mRS); 247394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk builder.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE, 248394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragmentFixedFunction.Builder.Format.RGB, 0); 249394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragment pfb = builder.create(); 250394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfb.bindSampler(Sampler.WRAP_NEAREST(mRS), 0); 251394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gPFBackground(pfb); 252394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 253394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk builder = new ProgramFragmentFixedFunction.Builder(mRS); 254394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk builder.setPointSpriteTexCoordinateReplacement(true); 255394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk builder.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.MODULATE, 256394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragmentFixedFunction.Builder.Format.RGBA, 0); 257394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk builder.setVaryingColor(true); 258394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragment pfs = builder.create(); 259394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfs.bindSampler(Sampler.WRAP_LINEAR_MIP_LINEAR(mRS), 0); 260394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gPFStars(pfs); 261394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 262394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTextureAllocs = new ScriptField_ListAllocs_s(mRS, 100); 263394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk for (int i = 0; i < 100; i++) { 264394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_ListAllocs_s.Item texElem = new ScriptField_ListAllocs_s.Item(); 265394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk texElem.item = loadTextureRGB(R.drawable.globe); 266394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTextureAllocs.set(texElem, i, false); 267394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 268394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTextureAllocs.copyAll(); 269394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.bind_gTexList100(mTextureAllocs); 270394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 271394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mSampleTextAllocs = new ScriptField_ListAllocs_s(mRS, 100); 272394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk for (int i = 0; i < 100; i++) { 273394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_ListAllocs_s.Item textElem = new ScriptField_ListAllocs_s.Item(); 274394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk textElem.item = Allocation.createFromString(mRS, SAMPLE_TEXT, Allocation.USAGE_SCRIPT); 275394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mSampleTextAllocs.set(textElem, i, false); 276394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 277394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mSampleTextAllocs.copyAll(); 278394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.bind_gSampleTextList100(mSampleTextAllocs); 279394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 280394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mSampleListViewAllocs = new ScriptField_ListAllocs_s(mRS, 1000); 281394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk for (int i = 0; i < 1000; i++) { 282394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_ListAllocs_s.Item textElem = new ScriptField_ListAllocs_s.Item(); 283394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk textElem.item = Allocation.createFromString(mRS, LIST_TEXT, Allocation.USAGE_SCRIPT); 284394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mSampleListViewAllocs.set(textElem, i, false); 285394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 286394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mSampleListViewAllocs.copyAll(); 287394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.bind_gListViewText(mSampleListViewAllocs); 288394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 289394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // For galaxy live wallpaper 290394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mPvStarAlloc = new ScriptField_VpConsts(mRS, 1); 291394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.bind_vpConstants(mPvStarAlloc); 292394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mPvProjectionAlloc = new ProgramVertexFixedFunction.Constants(mRS); 293394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk updateProjectionMatrices(); 294394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 295394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvb = new ProgramVertexFixedFunction.Builder(mRS); 296394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramVertex pvbp = pvb.create(); 297394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ((ProgramVertexFixedFunction)pvbp).bindConstants(mPvProjectionAlloc); 298394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gPVBkProj(pvbp); 299394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 300394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk createParticlesMesh(); 301394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 302394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramVertex.Builder sb = new ProgramVertex.Builder(mRS); 303394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk String t = "varying vec4 varColor;\n" + 304394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "varying vec2 varTex0;\n" + 305394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "void main() {\n" + 306394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " float dist = ATTRIB_position.y;\n" + 307394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " float angle = ATTRIB_position.x;\n" + 308394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " float x = dist * sin(angle);\n" + 309394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " float y = dist * cos(angle) * 0.892;\n" + 310394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " float p = dist * 5.5;\n" + 311394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " float s = cos(p);\n" + 312394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " float t = sin(p);\n" + 313394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " vec4 pos;\n" + 314394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " pos.x = t * x + s * y;\n" + 315394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " pos.y = s * x - t * y;\n" + 316394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " pos.z = ATTRIB_position.z;\n" + 317394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " pos.w = 1.0;\n" + 318394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " gl_Position = UNI_MVP * pos;\n" + 319394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " gl_PointSize = ATTRIB_color.a * 10.0;\n" + 320394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " varColor.rgb = ATTRIB_color.rgb;\n" + 321394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk " varColor.a = 1.0;\n" + 322394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "}\n"; 323394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk sb.setShader(t); 324394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk sb.addInput(mParticlesMesh.getVertexAllocation(0).getType().getElement()); 325394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk sb.addConstant(mPvStarAlloc.getType()); 326394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramVertex pvs = sb.create(); 327394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvs.bindConstants(mPvStarAlloc.getAllocation(), 0); 328394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gPVStars(pvs); 329394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 330394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // For Galaxy live wallpaper 331394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gTSpace(loadTextureRGB(R.drawable.space)); 332394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gTLight1(loadTextureRGB(R.drawable.light1)); 333394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gTFlares(loadTextureARGB(R.drawable.flares)); 334394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 335394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mUiScript.set_gFontSans(mFontSans); 336394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 337394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk} 338