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.RenderScript.RSMessageHandler; 29394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.Mesh.Primitive; 30394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.Matrix4f; 31394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.ProgramVertexFixedFunction; 32394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 33394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.util.Log; 34394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 35394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 36394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukpublic class TorusTest implements RsBenchBaseTest{ 37394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 38394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private static final String TAG = "TorusTest"; 39394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private RenderScriptGL mRS; 40394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Resources mRes; 41394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 42394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramStore mProgStoreBlendNoneDepth; 43394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramStore mProgStoreBlendNone; 44394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramStore mProgStoreBlendAlpha; 45394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 46394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramFragment mProgFragmentTexture; 47394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramFragment mProgFragmentColor; 48394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 49394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramVertex mProgVertex; 50394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramVertexFixedFunction.Constants mPVA; 51394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramVertexFixedFunction.Constants mPvProjectionAlloc; 52394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 53394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Custom shaders 54394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramVertex mProgVertexCustom; 55394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramFragment mProgFragmentCustom; 56394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramFragment mProgFragmentMultitex; 57394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramVertex mProgVertexPixelLight; 58394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramVertex mProgVertexPixelLightMove; 59394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramFragment mProgFragmentPixelLight; 60394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ScriptField_VertexShaderConstants_s mVSConst; 61394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ScriptField_FragentShaderConstants_s mFSConst; 62394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ScriptField_VertexShaderConstants3_s mVSConstPixel; 63394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ScriptField_FragentShaderConstants3_s mFSConstPixel; 64394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 65394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Allocation mTexTorus; 66394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Mesh mTorus; 67394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 68394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ScriptC_torus_test mTorusScript; 69394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 70394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private final BitmapFactory.Options mOptionsARGB = new BitmapFactory.Options(); 71394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 72394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_TestScripts_s.Item[] mTests; 73394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 74394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private final String[] mNames = { 75394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 25.6k flat color", 76394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 51.2k flat color", 77394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 204.8k small tries flat color", 78394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 25.6k single texture", 79394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 51.2k single texture", 80394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 204.8k small tries single texture", 81394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 25.6k geo heavy vertex", 82394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 51.2k geo heavy vertex", 83394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 204.8k geo raster load heavy vertex", 84394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 25.6k heavy fragment", 85394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 51.2k heavy fragment", 86394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 204.8k small tries heavy fragment", 87394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 25.6k heavy fragment heavy vertex", 88394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 51.2k heavy fragment heavy vertex", 89394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Geo test 204.8k small tries heavy fragment heavy vertex" 90394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk }; 91394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 92394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk public TorusTest() { 93394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 94394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 95394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk void addTest(int index, int testId, int user1, int user2) { 96394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests[index] = new ScriptField_TestScripts_s.Item(); 97394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests[index].testScript = mTorusScript; 98394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests[index].testName = Allocation.createFromString(mRS, 99394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mNames[index], 100394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.USAGE_SCRIPT); 1015de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk mTests[index].debugName = RsBenchRS.createZeroTerminatedAlloc(mRS, 1025de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk mNames[index], 1035de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk Allocation.USAGE_SCRIPT); 104394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 105394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_TorusTestData_s.Item dataItem = new ScriptField_TorusTestData_s.Item(); 106394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk dataItem.testId = testId; 107394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk dataItem.user1 = user1; 108394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk dataItem.user2 = user2; 109394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_TorusTestData_s testData = new ScriptField_TorusTestData_s(mRS, 1); 110394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk testData.set(dataItem, 0, true); 111394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests[index].testData = testData.getAllocation(); 112394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 113394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 114394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk public boolean init(RenderScriptGL rs, Resources res) { 115394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mRS = rs; 116394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mRes = res; 117394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk initCustomShaders(); 118394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk loadImages(); 119394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk initMesh(); 120394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk initTorusScript(); 121394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests = new ScriptField_TestScripts_s.Item[mNames.length]; 122394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 123394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk int index = 0; 124394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 0, 0 /*useTexture*/, 1 /*numMeshes*/); 125394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 0, 0 /*useTexture*/, 2 /*numMeshes*/); 126394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 0, 0 /*useTexture*/, 8 /*numMeshes*/); 127394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 0, 1 /*useTexture*/, 1 /*numMeshes*/); 128394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 0, 1 /*useTexture*/, 2 /*numMeshes*/); 129394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 0, 1 /*useTexture*/, 8 /*numMeshes*/); 130394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 131394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Secont test 132394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 1, 1 /*numMeshes*/, 0 /*unused*/); 133394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 1, 2 /*numMeshes*/, 0 /*unused*/); 134394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 1, 8 /*numMeshes*/, 0 /*unused*/); 135394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 136394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Third test 137394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 2, 1 /*numMeshes*/, 0 /*heavyVertex*/); 138394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 2, 2 /*numMeshes*/, 0 /*heavyVertex*/); 139394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 2, 8 /*numMeshes*/, 0 /*heavyVertex*/); 140394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 2, 1 /*numMeshes*/, 1 /*heavyVertex*/); 141394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 2, 2 /*numMeshes*/, 1 /*heavyVertex*/); 142394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 2, 8 /*numMeshes*/, 1 /*heavyVertex*/); 143394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 144394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return true; 145394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 146394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 147394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk public ScriptField_TestScripts_s.Item[] getTests() { 148394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return mTests; 149394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 150394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 151394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk public String[] getTestNames() { 152394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return mNames; 153394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 154394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 155394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private void initCustomShaders() { 156394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mVSConst = new ScriptField_VertexShaderConstants_s(mRS, 1); 157394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFSConst = new ScriptField_FragentShaderConstants_s(mRS, 1); 158394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 159394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mVSConstPixel = new ScriptField_VertexShaderConstants3_s(mRS, 1); 160394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFSConstPixel = new ScriptField_FragentShaderConstants3_s(mRS, 1); 161394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 162394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Initialize the shader builder 163394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramVertex.Builder pvbCustom = new ProgramVertex.Builder(mRS); 164394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Specify the resource that contains the shader string 165394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvbCustom.setShader(mRes, R.raw.shaderv); 166394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Use a script field to specify the input layout 167394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvbCustom.addInput(ScriptField_VertexShaderInputs_s.createElement(mRS)); 168394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Define the constant input layout 169394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvbCustom.addConstant(mVSConst.getAllocation().getType()); 170394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgVertexCustom = pvbCustom.create(); 171394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Bind the source of constant data 172394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgVertexCustom.bindConstants(mVSConst.getAllocation(), 0); 173394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 174394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragment.Builder pfbCustom = new ProgramFragment.Builder(mRS); 175394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Specify the resource that contains the shader string 176394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom.setShader(mRes, R.raw.shaderf); 177394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Tell the builder how many textures we have 178394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom.addTexture(Program.TextureType.TEXTURE_2D); 179394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Define the constant input layout 180394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom.addConstant(mFSConst.getAllocation().getType()); 181394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgFragmentCustom = pfbCustom.create(); 182394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Bind the source of constant data 183394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgFragmentCustom.bindConstants(mFSConst.getAllocation(), 0); 184394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 185394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvbCustom = new ProgramVertex.Builder(mRS); 186394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvbCustom.setShader(mRes, R.raw.shader2v); 187394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvbCustom.addInput(ScriptField_VertexShaderInputs_s.createElement(mRS)); 188394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvbCustom.addConstant(mVSConstPixel.getAllocation().getType()); 189394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgVertexPixelLight = pvbCustom.create(); 190394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgVertexPixelLight.bindConstants(mVSConstPixel.getAllocation(), 0); 191394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 192394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvbCustom = new ProgramVertex.Builder(mRS); 193394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvbCustom.setShader(mRes, R.raw.shader2movev); 194394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvbCustom.addInput(ScriptField_VertexShaderInputs_s.createElement(mRS)); 195394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pvbCustom.addConstant(mVSConstPixel.getAllocation().getType()); 196394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgVertexPixelLightMove = pvbCustom.create(); 197394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgVertexPixelLightMove.bindConstants(mVSConstPixel.getAllocation(), 0); 198394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 199394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom = new ProgramFragment.Builder(mRS); 200394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom.setShader(mRes, R.raw.shader2f); 201394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom.addTexture(Program.TextureType.TEXTURE_2D); 202394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom.addConstant(mFSConstPixel.getAllocation().getType()); 203394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgFragmentPixelLight = pfbCustom.create(); 204394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgFragmentPixelLight.bindConstants(mFSConstPixel.getAllocation(), 0); 205394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 206394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom = new ProgramFragment.Builder(mRS); 207394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom.setShader(mRes, R.raw.multitexf); 208394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk for (int texCount = 0; texCount < 3; texCount ++) { 209394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom.addTexture(Program.TextureType.TEXTURE_2D); 210394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 211394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgFragmentMultitex = pfbCustom.create(); 212394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 213394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragmentFixedFunction.Builder colBuilder = new ProgramFragmentFixedFunction.Builder(mRS); 214394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk colBuilder.setVaryingColor(false); 215394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgFragmentColor = colBuilder.create(); 216394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 217394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragmentFixedFunction.Builder texBuilder = new ProgramFragmentFixedFunction.Builder(mRS); 218394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk texBuilder.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE, 219394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragmentFixedFunction.Builder.Format.RGBA, 0); 220394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgFragmentTexture = texBuilder.create(); 221394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 222394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS); 223394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgVertex = pvb.create(); 224394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramVertexFixedFunction.Constants PVA = new ProgramVertexFixedFunction.Constants(mRS); 225394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ((ProgramVertexFixedFunction)mProgVertex).bindConstants(PVA); 226394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Matrix4f proj = new Matrix4f(); 227394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk proj.loadOrthoWindow(1280, 720); 228394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk PVA.setProjection(proj); 229394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 230394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 231394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Allocation loadTextureRGB(int id) { 232394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return Allocation.createFromBitmapResource(mRS, mRes, id, 233394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, 234394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE); 235394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 236394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 237394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private void loadImages() { 238394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTexTorus = loadTextureRGB(R.drawable.torusmap); 239394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 240394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 241394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private void initMesh() { 242394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk FileA3D model = FileA3D.createFromResource(mRS, mRes, R.raw.torus); 243394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk FileA3D.IndexEntry entry = model.getIndexEntry(0); 244394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk if (entry == null || entry.getEntryType() != FileA3D.EntryType.MESH) { 245394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Log.e("rs", "could not load model"); 246394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } else { 247394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorus = (Mesh)entry.getObject(); 248394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 249394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 250394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 251394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk void initTorusScript() { 252394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript = new ScriptC_torus_test(mRS, mRes, R.raw.torus_test); 253394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gCullFront(ProgramRaster.CULL_FRONT(mRS)); 254394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gCullBack(ProgramRaster.CULL_BACK(mRS)); 255394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gLinearClamp(Sampler.CLAMP_LINEAR(mRS)); 256394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gTorusMesh(mTorus); 257394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gTexTorus(mTexTorus); 258394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gProgVertexCustom(mProgVertexCustom); 259394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gProgFragmentCustom(mProgFragmentCustom); 260394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gProgVertexPixelLight(mProgVertexPixelLight); 261394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gProgVertexPixelLightMove(mProgVertexPixelLightMove); 262394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gProgFragmentPixelLight(mProgFragmentPixelLight); 263394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.bind_gVSConstPixel(mVSConstPixel); 264394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.bind_gFSConstPixel(mFSConstPixel); 265394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.bind_gVSConstants(mVSConst); 266394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.bind_gFSConstants(mFSConst); 267394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gProgVertex(mProgVertex); 268394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gProgFragmentTexture(mProgFragmentTexture); 269394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gProgFragmentColor(mProgFragmentColor); 270394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTorusScript.set_gProgStoreBlendNoneDepth(mProgStoreBlendNoneDepth); 271394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 272394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk} 273