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 209c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 21a90842283e322b1210e2bea5850b05177e3d87afTim Murray * @hide 2265c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 23df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * ProgramVertexFixedFunction is a helper class that provides a 24df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * simple way to create a fixed function emulation vertex shader 25df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * without writing any GLSL code. 26b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk * 27b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk **/ 28b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchoukpublic class ProgramVertexFixedFunction extends ProgramVertex { 29b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 30460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray ProgramVertexFixedFunction(long id, RenderScript rs) { 31b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk super(id, rs); 32b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 33b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 349c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 3565c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 36df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Binds the constant buffer containing fixed function emulation 37df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * matrices 38df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 39df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * @param va allocation containing fixed function matrices 40df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 41b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void bindConstants(Constants va) { 42b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mRS.validate(); 43b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk bindConstants(va.getAllocation(), 0); 44b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 45b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 46b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk static class InternalBuilder extends BaseProgramBuilder { 4765c80f824711f084c4ece9204f543a7809534294Jason Sams /** 4865c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 4965c80f824711f084c4ece9204f543a7809534294Jason Sams */ 50b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public InternalBuilder(RenderScript rs) { 51b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk super(rs); 52b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 53b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 5465c80f824711f084c4ece9204f543a7809534294Jason Sams /** 5565c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 5665c80f824711f084c4ece9204f543a7809534294Jason Sams */ 57b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public InternalBuilder addInput(Element e) throws IllegalStateException { 58b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk // Should check for consistant and non-conflicting names... 59b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk if(mInputCount >= MAX_INPUT) { 60b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk throw new RSIllegalArgumentException("Max input count exceeded."); 61b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 62b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk if (e.isComplex()) { 63b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk throw new RSIllegalArgumentException("Complex elements not allowed."); 64b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 65b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mInputs[mInputCount++] = e; 66b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk return this; 67b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 68b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 699c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 7065c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 71df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Creates ProgramVertexFixedFunction from the current state of 72df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * the builder 73df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 74df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * @return ProgramVertexFixedFunction 75df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 76b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public ProgramVertexFixedFunction create() { 77b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mRS.validate(); 789807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat long[] tmp = new long[(mInputCount + mOutputCount + mConstantCount + mTextureCount) * 2]; 792123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk String[] texNames = new String[mTextureCount]; 80b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk int idx = 0; 81b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 82b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk for (int i=0; i < mInputCount; i++) { 83b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk tmp[idx++] = ProgramParam.INPUT.mID; 849807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat tmp[idx++] = mInputs[i].getID(mRS); 85b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 86b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk for (int i=0; i < mOutputCount; i++) { 87b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk tmp[idx++] = ProgramParam.OUTPUT.mID; 889807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat tmp[idx++] = mOutputs[i].getID(mRS); 89b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 90b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk for (int i=0; i < mConstantCount; i++) { 91b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk tmp[idx++] = ProgramParam.CONSTANT.mID; 929807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat tmp[idx++] = mConstants[i].getID(mRS); 93b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 94b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk for (int i=0; i < mTextureCount; i++) { 95b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk tmp[idx++] = ProgramParam.TEXTURE_TYPE.mID; 969807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat tmp[idx++] = mTextureTypes[i].mID; 972123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk texNames[i] = mTextureNames[i]; 98b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 99b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 100460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long id = mRS.nProgramVertexCreate(mShader, texNames, tmp); 101b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk ProgramVertexFixedFunction pv = new ProgramVertexFixedFunction(id, mRS); 102b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk initProgram(pv); 103b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk return pv; 104b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 105b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 106b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 10765c80f824711f084c4ece9204f543a7809534294Jason Sams /** 10865c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 10965c80f824711f084c4ece9204f543a7809534294Jason Sams */ 110b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public static class Builder { 111b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk boolean mTextureMatrixEnable; 112b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk String mShader; 113b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk RenderScript mRS; 114b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 1159c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 11665c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 117df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Creates a builder for fixed function vertex program 118df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 119f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the program will belong. 120df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 121b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public Builder(RenderScript rs) { 122b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mRS = rs; 123b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 124b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 1259c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 12665c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 127df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Specifies whether texture matrix calculations are to be added 128df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * to the shader 129df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 130df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 131b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public Builder setTextureMatrixEnable(boolean enable) { 132b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mTextureMatrixEnable = enable; 133b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk return this; 134b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 135b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk static Type getConstantInputType(RenderScript rs) { 136b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Element.Builder b = new Element.Builder(rs); 137b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.MATRIX4X4(rs), "MV"); 138b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.MATRIX4X4(rs), "P"); 139b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.MATRIX4X4(rs), "TexMatrix"); 140b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.MATRIX4X4(rs), "MVP"); 141b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 142b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Type.Builder typeBuilder = new Type.Builder(rs, b.create()); 143b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk typeBuilder.setX(1); 144b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk return typeBuilder.create(); 145b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 146b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 147b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk private void buildShaderString() { 148b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 149b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader = "//rs_shader_internal\n"; 150b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += "varying vec4 varColor;\n"; 151b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += "varying vec2 varTex0;\n"; 152b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 153b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += "void main() {\n"; 154b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += " gl_Position = UNI_MVP * ATTRIB_position;\n"; 155b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += " gl_PointSize = 1.0;\n"; 156b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 157b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += " varColor = ATTRIB_color;\n"; 158b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk if (mTextureMatrixEnable) { 159b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += " varTex0 = (UNI_TexMatrix * vec4(ATTRIB_texture0, 0.0, 1.0)).xy;\n"; 160b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } else { 161b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += " varTex0 = ATTRIB_texture0;\n"; 162b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 163b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mShader += "}\n"; 164b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 165b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 1669c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 16765c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 168df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Creates ProgramVertexFixedFunction from the current state of 169df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * the builder 170df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 171df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * @return Fixed function emulation ProgramVertex 172df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 173b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public ProgramVertexFixedFunction create() { 174b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk buildShaderString(); 175b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 176b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk InternalBuilder sb = new InternalBuilder(mRS); 177b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk sb.setShader(mShader); 178b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk sb.addConstant(getConstantInputType(mRS)); 179b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 180b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Element.Builder b = new Element.Builder(mRS); 181b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.F32_4(mRS), "position"); 182b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.F32_4(mRS), "color"); 183b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.F32_3(mRS), "normal"); 184b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.add(Element.F32_2(mRS), "texture0"); 185b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk sb.addInput(b.create()); 186b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 187b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk return sb.create(); 188b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 189b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 190b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 1919c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 19265c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 193df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Helper class to store modelview, projection and texture 194df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * matrices for ProgramVertexFixedFunction 195df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 196df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 197b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public static class Constants { 198b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk static final int MODELVIEW_OFFSET = 0; 199b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk static final int PROJECTION_OFFSET = 16; 200b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk static final int TEXTURE_OFFSET = 32; 201b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 202b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Matrix4f mModel; 203b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Matrix4f mProjection; 204b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Matrix4f mTexture; 205b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 206b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Allocation mAlloc; 207b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Allocation getAllocation() { 208b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk return mAlloc; 209b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 210b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk private FieldPacker mIOBuffer; 211b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 2129c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 21365c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 214f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Creates a buffer to store fixed function emulation matrices 215df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 216f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the allocation will belong. 217df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk **/ 218b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public Constants(RenderScript rs) { 219b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk Type constInputType = ProgramVertexFixedFunction.Builder.getConstantInputType(rs); 220b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mAlloc = Allocation.createTyped(rs, constInputType); 221918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk int bufferSize = constInputType.getElement().getBytesSize()* 222b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk constInputType.getCount(); 223b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mIOBuffer = new FieldPacker(bufferSize); 224b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mModel = new Matrix4f(); 225b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mProjection = new Matrix4f(); 226b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mTexture = new Matrix4f(); 227b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk setModelview(new Matrix4f()); 228b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk setProjection(new Matrix4f()); 229b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk setTexture(new Matrix4f()); 230b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 231b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 2329c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 23365c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 234df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Forces deallocation of memory backing the contant matrices. 235df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Normally, this is unnecessary and will be garbage collected 236df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 237df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 238b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void destroy() { 239b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mAlloc.destroy(); 240b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mAlloc = null; 241b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 242b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 243b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk private void addToBuffer(int offset, Matrix4f m) { 244b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mIOBuffer.reset(offset); 245b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk for(int i = 0; i < 16; i ++) { 246b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mIOBuffer.addF32(m.mMat[i]); 247b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 248fa1275a6e743c4661cc3d5e05bb89559a8e59727Stephen Hines // Reset the buffer back to the end, since we want to flush all of 249fa1275a6e743c4661cc3d5e05bb89559a8e59727Stephen Hines // the contents back (and not just what we wrote now). 250fa1275a6e743c4661cc3d5e05bb89559a8e59727Stephen Hines mIOBuffer.reset(mIOBuffer.getData().length); 251b97b251c26b801b26f2630e3a2e3f93e4088f2c5Jason Sams mAlloc.setFromFieldPacker(0, mIOBuffer); 252b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 253b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 2549c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 25565c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 256df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Sets the modelview matrix in the fixed function matrix buffer 257df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 258df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * @param m modelview matrix 259df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 260b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setModelview(Matrix4f m) { 261b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mModel.load(m); 262b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk addToBuffer(MODELVIEW_OFFSET*4, m); 263b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 264b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 2659c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 26665c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 267df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Sets the projection matrix in the fixed function matrix buffer 268df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 269df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * @param m projection matrix 270df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 271b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setProjection(Matrix4f m) { 272b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mProjection.load(m); 273b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk addToBuffer(PROJECTION_OFFSET*4, m); 274b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 275b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk 2769c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 27765c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 278df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Sets the texture matrix in the fixed function matrix buffer. 279df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * Texture matrix must be enabled in the 280df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * ProgramVertexFixedFunction builder for the shader to utilize 281df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * it. 282df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * 283df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk * @param m modelview matrix 284df27202debdc2573b7882405010fba31ee4d46e6Alex Sakhartchouk */ 285b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setTexture(Matrix4f m) { 286b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mTexture.load(m); 287b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk addToBuffer(TEXTURE_OFFSET*4, m); 288b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 289b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk } 290b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk} 291