1e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams/* 2e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * Copyright (C) 2008 The Android Open Source Project 3e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * 4e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * you may not use this file except in compliance with the License. 6e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * You may obtain a copy of the License at 7e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * 8e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * 10e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * Unless required by applicable law or agreed to in writing, software 11e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * See the License for the specific language governing permissions and 14e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams * limitations under the License. 15e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams */ 16e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 17e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samspackage com.example.android.rs.miscsamples; 18e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 19e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.content.res.Resources; 20e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.graphics.Bitmap; 21e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.graphics.BitmapFactory; 22e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.renderscript.*; 23e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.renderscript.Font.Style; 24e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.renderscript.Program.TextureType; 25e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.renderscript.ProgramStore.DepthFunc; 26e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.renderscript.ProgramStore.BlendSrcFunc; 27e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.renderscript.ProgramStore.BlendDstFunc; 28e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.renderscript.Sampler.Value; 29e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samsimport android.util.Log; 30e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 31e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 32e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Samspublic class RsRenderStatesRS { 33e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 34e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams int mWidth; 35e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams int mHeight; 36e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 37e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams public RsRenderStatesRS() { 38e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 39e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 40e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams public void init(RenderScriptGL rs, Resources res) { 41e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mRS = rs; 42e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mWidth = mRS.getWidth(); 43e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mHeight = mRS.getHeight(); 44e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mRes = res; 45e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mOptionsARGB.inScaled = false; 46e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mOptionsARGB.inPreferredConfig = Bitmap.Config.ARGB_8888; 47e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mMode = 0; 48e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mMaxModes = 0; 49e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams initRS(); 50e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 51e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 52e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams public void surfaceChanged() { 53e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mWidth = mRS.getWidth(); 54e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mHeight = mRS.getHeight(); 55e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 56e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Matrix4f proj = new Matrix4f(); 57e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams proj.loadOrthoWindow(mWidth, mHeight); 58e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mPVA.setProjection(proj); 59e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 60e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 61e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Resources mRes; 62e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private RenderScriptGL mRS; 63e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 64e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Sampler mLinearClamp; 65e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Sampler mLinearWrap; 66e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Sampler mMipLinearWrap; 67e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Sampler mNearestClamp; 68e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Sampler mMipLinearAniso8; 69e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Sampler mMipLinearAniso15; 70e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 71e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramStore mProgStoreBlendNoneDepth; 72e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramStore mProgStoreBlendNone; 73e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramStore mProgStoreBlendAlpha; 74e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramStore mProgStoreBlendAdd; 75e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 76e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramFragment mProgFragmentTexture; 77e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramFragment mProgFragmentColor; 78e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 79e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramVertex mProgVertex; 80e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramVertexFixedFunction.Constants mPVA; 81e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 82e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Custom shaders 83e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramVertex mProgVertexCustom; 84e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramFragment mProgFragmentCustom; 85e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramFragment mProgFragmentMultitex; 86e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ScriptField_VertexShaderConstants_s mVSConst; 87e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ScriptField_VertexShaderConstants2_s mVSConst2; 88e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ScriptField_FragentShaderConstants_s mFSConst; 89e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ScriptField_FragentShaderConstants2_s mFSConst2; 90e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 91e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramVertex mProgVertexCustom2; 92e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramFragment mProgFragmentCustom2; 93e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 94e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramVertex mProgVertexCube; 95e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramFragment mProgFragmentCube; 96e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 97e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramRaster mCullBack; 98e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramRaster mCullFront; 99e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ProgramRaster mCullNone; 100e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 101e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Allocation mTexTorus; 102e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Allocation mTexOpaque; 103e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Allocation mTexTransparent; 104e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Allocation mTexChecker; 105e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Allocation mTexCube; 106e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 107e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Mesh mMbyNMesh; 108e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Mesh mTorus; 109e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 110e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Font mFontSans; 111e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Font mFontSerif; 112e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Font mFontSerifBold; 113e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Font mFontSerifItalic; 114e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Font mFontSerifBoldItalic; 115e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Font mFontMono; 116e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Allocation mTextAlloc; 117e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 118e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private ScriptC_rsrenderstates mScript; 119e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 120e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private final BitmapFactory.Options mOptionsARGB = new BitmapFactory.Options(); 121e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 122e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams int mMode; 123e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams int mMaxModes; 124e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 125e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams public void onActionDown(int x, int y) { 126e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mMode ++; 127e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mMode = mMode % mMaxModes; 128e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gDisplayMode(mMode); 129e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 130e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 131e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ProgramStore BLEND_ADD_DEPTH_NONE(RenderScript rs) { 132e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ProgramStore.Builder builder = new ProgramStore.Builder(rs); 133e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS); 134e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ONE); 135e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams builder.setDitherEnabled(false); 136e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams builder.setDepthMaskEnabled(false); 137e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams return builder.create(); 138e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 139e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 140e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Mesh getMbyNMesh(float width, float height, int wResolution, int hResolution) { 141e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 142e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Mesh.TriangleMeshBuilder tmb = new Mesh.TriangleMeshBuilder(mRS, 143e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 2, Mesh.TriangleMeshBuilder.TEXTURE_0); 144e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 145e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams for (int y = 0; y <= hResolution; y++) { 146e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams final float normalizedY = (float)y / hResolution; 147e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams final float yOffset = (normalizedY - 0.5f) * height; 148e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams for (int x = 0; x <= wResolution; x++) { 149e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams float normalizedX = (float)x / wResolution; 150e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams float xOffset = (normalizedX - 0.5f) * width; 151e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams tmb.setTexture(normalizedX, normalizedY); 152e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams tmb.addVertex(xOffset, yOffset); 153e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 154e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 155e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 156e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams for (int y = 0; y < hResolution; y++) { 157e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams final int curY = y * (wResolution + 1); 158e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams final int belowY = (y + 1) * (wResolution + 1); 159e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams for (int x = 0; x < wResolution; x++) { 160e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams int curV = curY + x; 161e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams int belowV = belowY + x; 162e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams tmb.addTriangle(curV, belowV, curV + 1); 163e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams tmb.addTriangle(belowV, belowV + 1, curV + 1); 164e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 165e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 166e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 167e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams return tmb.create(true); 168e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 169e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 170e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private void initProgramStore() { 171e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Use stock the stock program store object 172e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgStoreBlendNoneDepth = ProgramStore.BLEND_NONE_DEPTH_TEST(mRS); 173e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgStoreBlendNone = ProgramStore.BLEND_NONE_DEPTH_NONE(mRS); 174e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 175e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Create a custom program store 176e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ProgramStore.Builder builder = new ProgramStore.Builder(mRS); 177e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS); 178e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams builder.setBlendFunc(ProgramStore.BlendSrcFunc.SRC_ALPHA, 179e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ProgramStore.BlendDstFunc.ONE_MINUS_SRC_ALPHA); 180e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams builder.setDitherEnabled(false); 181e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams builder.setDepthMaskEnabled(false); 182e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgStoreBlendAlpha = builder.create(); 183e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 184e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgStoreBlendAdd = BLEND_ADD_DEPTH_NONE(mRS); 185e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 186e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgStoreBlendNoneDepth(mProgStoreBlendNoneDepth); 187e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgStoreBlendNone(mProgStoreBlendNone); 188e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgStoreBlendAlpha(mProgStoreBlendAlpha); 189e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgStoreBlendAdd(mProgStoreBlendAdd); 190e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 191e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 192e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private void initProgramFragment() { 193e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 194e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ProgramFragmentFixedFunction.Builder texBuilder = new ProgramFragmentFixedFunction.Builder(mRS); 195e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams texBuilder.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE, 196e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ProgramFragmentFixedFunction.Builder.Format.RGBA, 0); 197e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgFragmentTexture = texBuilder.create(); 198e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgFragmentTexture.bindSampler(mLinearClamp, 0); 199e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 200e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ProgramFragmentFixedFunction.Builder colBuilder = new ProgramFragmentFixedFunction.Builder(mRS); 201e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams colBuilder.setVaryingColor(false); 202e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgFragmentColor = colBuilder.create(); 203e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 204e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgFragmentColor(mProgFragmentColor); 205e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgFragmentTexture(mProgFragmentTexture); 206e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 207e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 208e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private void initProgramVertex() { 209e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS); 210e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgVertex = pvb.create(); 211e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 212e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mPVA = new ProgramVertexFixedFunction.Constants(mRS); 213e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ((ProgramVertexFixedFunction)mProgVertex).bindConstants(mPVA); 214e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Matrix4f proj = new Matrix4f(); 215e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams proj.loadOrthoWindow(mWidth, mHeight); 216e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mPVA.setProjection(proj); 217e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 218e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgVertex(mProgVertex); 219e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 220e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 221e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private void initCustomShaders() { 222e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mVSConst = new ScriptField_VertexShaderConstants_s(mRS, 1); 223e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mVSConst2 = new ScriptField_VertexShaderConstants2_s(mRS, 1); 224e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mFSConst = new ScriptField_FragentShaderConstants_s(mRS, 1); 225e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mFSConst2 = new ScriptField_FragentShaderConstants2_s(mRS, 1); 226e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 227e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.bind_gVSConstants(mVSConst); 228e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.bind_gVSConstants2(mVSConst2); 229e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.bind_gFSConstants(mFSConst); 230e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.bind_gFSConstants2(mFSConst2); 231e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 232e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Initialize the shader builder 233e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ProgramVertex.Builder pvbCustom = new ProgramVertex.Builder(mRS); 234e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Specify the resource that contains the shader string 235e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pvbCustom.setShader(mRes, R.raw.shaderv); 236e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Use a script field to spcify the input layout 237e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pvbCustom.addInput(ScriptField_VertexShaderInputs_s.createElement(mRS)); 238e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Define the constant input layout 239e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pvbCustom.addConstant(mVSConst.getAllocation().getType()); 240e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgVertexCustom = pvbCustom.create(); 241e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Bind the source of constant data 242e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgVertexCustom.bindConstants(mVSConst.getAllocation(), 0); 243e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 244e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams ProgramFragment.Builder pfbCustom = new ProgramFragment.Builder(mRS); 245e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Specify the resource that contains the shader string 246e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom.setShader(mRes, R.raw.shaderf); 247e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams //Tell the builder how many textures we have 248e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom.addTexture(Program.TextureType.TEXTURE_2D); 249e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Define the constant input layout 250e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom.addConstant(mFSConst.getAllocation().getType()); 251e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgFragmentCustom = pfbCustom.create(); 252e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Bind the source of constant data 253e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgFragmentCustom.bindConstants(mFSConst.getAllocation(), 0); 254e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 255e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pvbCustom = new ProgramVertex.Builder(mRS); 256e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pvbCustom.setShader(mRes, R.raw.shaderarrayv); 257e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pvbCustom.addInput(ScriptField_VertexShaderInputs_s.createElement(mRS)); 258e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pvbCustom.addConstant(mVSConst2.getAllocation().getType()); 259e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgVertexCustom2 = pvbCustom.create(); 260e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgVertexCustom2.bindConstants(mVSConst2.getAllocation(), 0); 261e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 262e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom = new ProgramFragment.Builder(mRS); 263e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom.setShader(mRes, R.raw.shaderarrayf); 264e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom.addTexture(Program.TextureType.TEXTURE_2D); 265e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom.addConstant(mFSConst2.getAllocation().getType()); 266e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgFragmentCustom2 = pfbCustom.create(); 267e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgFragmentCustom2.bindConstants(mFSConst2.getAllocation(), 0); 268e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 269e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Cubemap test shaders 270e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pvbCustom = new ProgramVertex.Builder(mRS); 271e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pvbCustom.setShader(mRes, R.raw.shadercubev); 272e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pvbCustom.addInput(ScriptField_VertexShaderInputs_s.createElement(mRS)); 273e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pvbCustom.addConstant(mVSConst.getAllocation().getType()); 274e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgVertexCube = pvbCustom.create(); 275e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgVertexCube.bindConstants(mVSConst.getAllocation(), 0); 276e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 277e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom = new ProgramFragment.Builder(mRS); 278e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom.setShader(mRes, R.raw.shadercubef); 279e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom.addTexture(Program.TextureType.TEXTURE_CUBE); 280e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgFragmentCube = pfbCustom.create(); 281e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 282e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom = new ProgramFragment.Builder(mRS); 283e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom.setShader(mRes, R.raw.multitexf); 284e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams for (int texCount = 0; texCount < 3; texCount ++) { 285e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams pfbCustom.addTexture(Program.TextureType.TEXTURE_2D); 286e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 287e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mProgFragmentMultitex = pfbCustom.create(); 288e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 289e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgVertexCustom(mProgVertexCustom); 290e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgFragmentCustom(mProgFragmentCustom); 291e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgVertexCustom2(mProgVertexCustom2); 292e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgFragmentCustom2(mProgFragmentCustom2); 293e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgVertexCube(mProgVertexCube); 294e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgFragmentCube(mProgFragmentCube); 295e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gProgFragmentMultitex(mProgFragmentMultitex); 296e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 297e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 298e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Allocation loadTextureRGB(int id) { 299e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams return Allocation.createFromBitmapResource(mRS, mRes, id, 300e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, 301e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Allocation.USAGE_GRAPHICS_TEXTURE); 302e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 303e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 304e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private Allocation loadTextureARGB(int id) { 305e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Bitmap b = BitmapFactory.decodeResource(mRes, id, mOptionsARGB); 306e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams return Allocation.createFromBitmap(mRS, b, 307e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, 308e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Allocation.USAGE_GRAPHICS_TEXTURE); 309e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 310e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 311e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private void loadImages() { 312e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mTexTorus = loadTextureRGB(R.drawable.torusmap); 313e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mTexOpaque = loadTextureRGB(R.drawable.data); 314e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mTexTransparent = loadTextureARGB(R.drawable.leaf); 315e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mTexChecker = loadTextureRGB(R.drawable.checker); 316e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Bitmap b = BitmapFactory.decodeResource(mRes, R.drawable.cubemap_test); 317e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mTexCube = Allocation.createCubemapFromBitmap(mRS, b); 318e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 319e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gTexTorus(mTexTorus); 320e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gTexOpaque(mTexOpaque); 321e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gTexTransparent(mTexTransparent); 322e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gTexChecker(mTexChecker); 323e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gTexCube(mTexCube); 324e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 325e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 326e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private void initFonts() { 327e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Sans font by family name 328e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mFontSans = Font.create(mRS, mRes, "sans-serif", Font.Style.NORMAL, 8); 329e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mFontSerif = Font.create(mRS, mRes, "serif", Font.Style.NORMAL, 8); 330e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams // Create fonts by family and style 331e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mFontSerifBold = Font.create(mRS, mRes, "serif", Font.Style.BOLD, 8); 332e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mFontSerifItalic = Font.create(mRS, mRes, "serif", Font.Style.ITALIC, 8); 333e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mFontSerifBoldItalic = Font.create(mRS, mRes, "serif", Font.Style.BOLD_ITALIC, 8); 334e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mFontMono = Font.create(mRS, mRes, "mono", Font.Style.NORMAL, 8); 335e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 336e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mTextAlloc = Allocation.createFromString(mRS, "String from allocation", Allocation.USAGE_SCRIPT); 337e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 338e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gFontSans(mFontSans); 339e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gFontSerif(mFontSerif); 340e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gFontSerifBold(mFontSerifBold); 341e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gFontSerifItalic(mFontSerifItalic); 342e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gFontSerifBoldItalic(mFontSerifBoldItalic); 343e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gFontMono(mFontMono); 344e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gTextAlloc(mTextAlloc); 345e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 346e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 347e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private void initMesh() { 348e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mMbyNMesh = getMbyNMesh(256, 256, 10, 10); 349e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gMbyNMesh(mMbyNMesh); 350e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 351e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams FileA3D model = FileA3D.createFromResource(mRS, mRes, R.raw.torus); 352e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams FileA3D.IndexEntry entry = model.getIndexEntry(0); 353e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams if (entry == null || entry.getEntryType() != FileA3D.EntryType.MESH) { 354e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Log.e("rs", "could not load model"); 355e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } else { 356e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mTorus = (Mesh)entry.getObject(); 357e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gTorusMesh(mTorus); 358e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 359e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 360e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 361e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private void initSamplers() { 362e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams Sampler.Builder bs = new Sampler.Builder(mRS); 363e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams bs.setMinification(Sampler.Value.LINEAR); 364e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams bs.setMagnification(Sampler.Value.LINEAR); 365e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams bs.setWrapS(Sampler.Value.WRAP); 366e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams bs.setWrapT(Sampler.Value.WRAP); 367e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mLinearWrap = bs.create(); 368e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 369e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mLinearClamp = Sampler.CLAMP_LINEAR(mRS); 370e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mNearestClamp = Sampler.CLAMP_NEAREST(mRS); 371e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mMipLinearWrap = Sampler.WRAP_LINEAR_MIP_LINEAR(mRS); 372e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 373e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams bs = new Sampler.Builder(mRS); 374e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams bs.setMinification(Sampler.Value.LINEAR_MIP_LINEAR); 375e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams bs.setMagnification(Sampler.Value.LINEAR); 376e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams bs.setWrapS(Sampler.Value.WRAP); 377e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams bs.setWrapT(Sampler.Value.WRAP); 378e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams bs.setAnisotropy(8.0f); 379e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mMipLinearAniso8 = bs.create(); 380e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams bs.setAnisotropy(15.0f); 381e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mMipLinearAniso15 = bs.create(); 382e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 383e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gLinearClamp(mLinearClamp); 384e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gLinearWrap(mLinearWrap); 385e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gMipLinearWrap(mMipLinearWrap); 386e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gMipLinearAniso8(mMipLinearAniso8); 387e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gMipLinearAniso15(mMipLinearAniso15); 388e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gNearestClamp(mNearestClamp); 389e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 390e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 391e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private void initProgramRaster() { 392e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mCullBack = ProgramRaster.CULL_BACK(mRS); 393e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mCullFront = ProgramRaster.CULL_FRONT(mRS); 394e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mCullNone = ProgramRaster.CULL_NONE(mRS); 395e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 396e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gCullBack(mCullBack); 397e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gCullFront(mCullFront); 398e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript.set_gCullNone(mCullNone); 399e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 400e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 401e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams private void initRS() { 402e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 403e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mScript = new ScriptC_rsrenderstates(mRS, mRes, R.raw.rsrenderstates); 404e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 405e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mMaxModes = mScript.get_gMaxModes(); 406e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 407e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams initSamplers(); 408e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams initProgramStore(); 409e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams initProgramFragment(); 410e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams initProgramVertex(); 411e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams initFonts(); 412e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams loadImages(); 413e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams initMesh(); 414e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams initProgramRaster(); 415e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams initCustomShaders(); 416e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 417e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams mRS.bindRootScript(mScript); 418e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams } 419e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams} 420e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 421e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 422e5f2f66f8c802d64ecf869081036ae13d4e9e19cJason Sams 423