1b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk/* 265c80f824711f084c4ece9204f543a7809534294Jason Sams * Copyright (C) 2008-2012 The Android Open Source Project 3b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * 4b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 5b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * you may not use this file except in compliance with the License. 6b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * You may obtain a copy of the License at 7b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * 8b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 9b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * 10b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 11b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 12b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * See the License for the specific language governing permissions and 14b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * limitations under the License. 15b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk */ 16b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 17b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchoukpackage android.renderscript; 18b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 19b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 20b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchoukimport android.graphics.Matrix; 21b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchoukimport android.util.Log; 22b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 23b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 249c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 25a90842283e322b1210e2bea5850b05177e3d87afTim Murray * @hide 2665c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 27df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * ProgramVertexFixedFunction is a helper class that provides a 28df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * simple way to create a fixed function emulation vertex shader 29df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * without writing any GLSL code. 30b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * 31b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk **/ 32b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchoukpublic class ProgramVertexFixedFunction extends ProgramVertex { 33b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 34b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk ProgramVertexFixedFunction(int id, RenderScript rs) { 35b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk super(id, rs); 36b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 37b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 389c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 3965c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 40df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Binds the constant buffer containing fixed function emulation 41df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * matrices 42df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 43df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * @param va allocation containing fixed function matrices 44df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 45b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void bindConstants(Constants va) { 46b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mRS.validate(); 47b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk bindConstants(va.getAllocation(), 0); 48b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 49b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 50b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk static class InternalBuilder extends BaseProgramBuilder { 5165c80f824711f084c4ece9204f543a7809534294Jason Sams /** 5265c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 5365c80f824711f084c4ece9204f543a7809534294Jason Sams */ 54b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public InternalBuilder(RenderScript rs) { 55b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk super(rs); 56b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 57b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 5865c80f824711f084c4ece9204f543a7809534294Jason Sams /** 5965c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 6065c80f824711f084c4ece9204f543a7809534294Jason Sams */ 61b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public InternalBuilder addInput(Element e) throws IllegalStateException { 62b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk // Should check for consistant and non-conflicting names... 63b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk if(mInputCount >= MAX_INPUT) { 64b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk throw new RSIllegalArgumentException("Max input count exceeded."); 65b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 66b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk if (e.isComplex()) { 67b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk throw new RSIllegalArgumentException("Complex elements not allowed."); 68b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 69b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mInputs[mInputCount++] = e; 70b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk return this; 71b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 72b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 739c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 7465c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 75df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Creates ProgramVertexFixedFunction from the current state of 76df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * the builder 77df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 78df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * @return ProgramVertexFixedFunction 79df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 80b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public ProgramVertexFixedFunction create() { 81b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mRS.validate(); 82b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk int[] tmp = new int[(mInputCount + mOutputCount + mConstantCount + mTextureCount) * 2]; 832123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk String[] texNames = new String[mTextureCount]; 84b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk int idx = 0; 85b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 86b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk for (int i=0; i < mInputCount; i++) { 87b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk tmp[idx++] = ProgramParam.INPUT.mID; 88e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams tmp[idx++] = mInputs[i].getID(mRS); 89b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 90b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk for (int i=0; i < mOutputCount; i++) { 91b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk tmp[idx++] = ProgramParam.OUTPUT.mID; 92e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams tmp[idx++] = mOutputs[i].getID(mRS); 93b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 94b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk for (int i=0; i < mConstantCount; i++) { 95b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk tmp[idx++] = ProgramParam.CONSTANT.mID; 96e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams tmp[idx++] = mConstants[i].getID(mRS); 97b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 98b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk for (int i=0; i < mTextureCount; i++) { 99b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk tmp[idx++] = ProgramParam.TEXTURE_TYPE.mID; 100b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk tmp[idx++] = mTextureTypes[i].mID; 1012123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk texNames[i] = mTextureNames[i]; 102b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 103b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 1042123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk int id = mRS.nProgramVertexCreate(mShader, texNames, tmp); 105b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk ProgramVertexFixedFunction pv = new ProgramVertexFixedFunction(id, mRS); 106b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk initProgram(pv); 107b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk return pv; 108b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 109b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 110b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 11165c80f824711f084c4ece9204f543a7809534294Jason Sams /** 11265c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 11365c80f824711f084c4ece9204f543a7809534294Jason Sams */ 114b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public static class Builder { 115b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk boolean mTextureMatrixEnable; 116b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk String mShader; 117b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk RenderScript mRS; 118b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 1199c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 12065c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 121df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Creates a builder for fixed function vertex program 122df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 123f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the program will belong. 124df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 125b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public Builder(RenderScript rs) { 126b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mRS = rs; 127b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 128b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 1299c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 13065c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 131df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Specifies whether texture matrix calculations are to be added 132df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * to the shader 133df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 134df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 135b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public Builder setTextureMatrixEnable(boolean enable) { 136b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mTextureMatrixEnable = enable; 137b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk return this; 138b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 139b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk static Type getConstantInputType(RenderScript rs) { 140b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Element.Builder b = new Element.Builder(rs); 141b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.MATRIX4X4(rs), "MV"); 142b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.MATRIX4X4(rs), "P"); 143b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.MATRIX4X4(rs), "TexMatrix"); 144b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.MATRIX4X4(rs), "MVP"); 145b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 146b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Type.Builder typeBuilder = new Type.Builder(rs, b.create()); 147b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk typeBuilder.setX(1); 148b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk return typeBuilder.create(); 149b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 150b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 151b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk private void buildShaderString() { 152b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 153b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader = "//rs_shader_internal\n"; 154b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += "varying vec4 varColor;\n"; 155b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += "varying vec2 varTex0;\n"; 156b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 157b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += "void main() {\n"; 158b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += " gl_Position = UNI_MVP * ATTRIB_position;\n"; 159b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += " gl_PointSize = 1.0;\n"; 160b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 161b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += " varColor = ATTRIB_color;\n"; 162b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk if (mTextureMatrixEnable) { 163b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += " varTex0 = (UNI_TexMatrix * vec4(ATTRIB_texture0, 0.0, 1.0)).xy;\n"; 164b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } else { 165b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += " varTex0 = ATTRIB_texture0;\n"; 166b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 167b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += "}\n"; 168b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 169b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 1709c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 17165c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 172df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Creates ProgramVertexFixedFunction from the current state of 173df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * the builder 174df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 175df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * @return Fixed function emulation ProgramVertex 176df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 177b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public ProgramVertexFixedFunction create() { 178b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk buildShaderString(); 179b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 180b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk InternalBuilder sb = new InternalBuilder(mRS); 181b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk sb.setShader(mShader); 182b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk sb.addConstant(getConstantInputType(mRS)); 183b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 184b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Element.Builder b = new Element.Builder(mRS); 185b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.F32_4(mRS), "position"); 186b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.F32_4(mRS), "color"); 187b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.F32_3(mRS), "normal"); 188b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.F32_2(mRS), "texture0"); 189b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk sb.addInput(b.create()); 190b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 191b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk return sb.create(); 192b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 193b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 194b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 1959c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 19665c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 197df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Helper class to store modelview, projection and texture 198df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * matrices for ProgramVertexFixedFunction 199df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 200df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 201b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public static class Constants { 202b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk static final int MODELVIEW_OFFSET = 0; 203b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk static final int PROJECTION_OFFSET = 16; 204b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk static final int TEXTURE_OFFSET = 32; 205b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 206b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Matrix4f mModel; 207b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Matrix4f mProjection; 208b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Matrix4f mTexture; 209b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 210b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Allocation mAlloc; 211b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Allocation getAllocation() { 212b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk return mAlloc; 213b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 214b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk private FieldPacker mIOBuffer; 215b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 2169c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 21765c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 218f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Creates a buffer to store fixed function emulation matrices 219df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 220f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the allocation will belong. 221df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk **/ 222b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public Constants(RenderScript rs) { 223b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Type constInputType = ProgramVertexFixedFunction.Builder.getConstantInputType(rs); 224b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mAlloc = Allocation.createTyped(rs, constInputType); 225918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk int bufferSize = constInputType.getElement().getBytesSize()* 226b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk constInputType.getCount(); 227b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mIOBuffer = new FieldPacker(bufferSize); 228b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mModel = new Matrix4f(); 229b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mProjection = new Matrix4f(); 230b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mTexture = new Matrix4f(); 231b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk setModelview(new Matrix4f()); 232b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk setProjection(new Matrix4f()); 233b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk setTexture(new Matrix4f()); 234b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 235b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 2369c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 23765c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 238df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Forces deallocation of memory backing the contant matrices. 239df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Normally, this is unnecessary and will be garbage collected 240df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 241df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 242b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void destroy() { 243b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mAlloc.destroy(); 244b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mAlloc = null; 245b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 246b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 247b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk private void addToBuffer(int offset, Matrix4f m) { 248b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mIOBuffer.reset(offset); 249b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk for(int i = 0; i < 16; i ++) { 250b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mIOBuffer.addF32(m.mMat[i]); 251b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 252b97b251c26b801b26f2630e3a2e3f93e4088f2c5Jason Sams mAlloc.setFromFieldPacker(0, mIOBuffer); 253b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 254b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 2559c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 25665c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 257df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Sets the modelview matrix in the fixed function matrix buffer 258df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 259df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * @param m modelview matrix 260df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 261b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setModelview(Matrix4f m) { 262b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mModel.load(m); 263b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk addToBuffer(MODELVIEW_OFFSET*4, m); 264b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 265b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 2669c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 26765c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 268df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Sets the projection matrix in the fixed function matrix buffer 269df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 270df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * @param m projection matrix 271df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 272b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setProjection(Matrix4f m) { 273b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mProjection.load(m); 274b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk addToBuffer(PROJECTION_OFFSET*4, m); 275b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 276b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 2779c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 27865c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 279df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Sets the texture matrix in the fixed function matrix buffer. 280df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Texture matrix must be enabled in the 281df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * ProgramVertexFixedFunction builder for the shader to utilize 282df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * it. 283df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 284df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * @param m modelview matrix 285df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 286b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setTexture(Matrix4f m) { 287b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mTexture.load(m); 288b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk addToBuffer(TEXTURE_OFFSET*4, m); 289b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 290b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 291b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk} 292