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