// This is the list of alternatives for +-/, * is special due to the vector/matrix multiplication private static GLSLFunctionType[] getBasicArithmeticOperatorAlternatives(String name) { List<GLSLFunctionType> dest = new ArrayList<GLSLFunctionType>(); getCommonArithmeticOperatorAlternatives(name, dest); for (int cols = 2; cols <= 4; cols++) { for (int rows = 2; rows <= 4; rows++) { GLSLMatrixType mat = GLSLMatrixType.getType(cols, rows); dest.add(new GLSLBasicFunctionType(name, mat, mat, mat)); } } return dest.toArray(new GLSLFunctionType[dest.size()]); }
private static GLSLFunctionType[] getMultiplicationOperatorAlternatives() { List<GLSLFunctionType> dest = new ArrayList<GLSLFunctionType>(); getCommonArithmeticOperatorAlternatives("*", dest); // matrix-matrix AND matrix-vector for (int M = 2; M <= 4; M++) { for (int N = 2; N <= 4; N++) { GLSLMatrixType matMxN = GLSLMatrixType.getType(M, N); GLSLVectorType vecM = GLSLVectorType.getType(M, GLSLTypes.FLOAT); GLSLVectorType vecN = GLSLVectorType.getType(N, GLSLTypes.FLOAT); dest.add(new GLSLBasicFunctionType("*", vecM, matMxN, vecN)); dest.add(new GLSLBasicFunctionType("*", vecN, vecM, matMxN)); for (int I = 2; I <= 4; I++) { GLSLMatrixType matIxM = GLSLMatrixType.getType(I, M); GLSLMatrixType matIxN = GLSLMatrixType.getType(I, N); dest.add(new GLSLBasicFunctionType("*", matIxN, matMxN, matIxM)); } } } return dest.toArray(new GLSLFunctionType[dest.size()]); }
private static GLSLFunctionType[] getUnaryArithmeticOperatorAlternatives(String name) { List<GLSLFunctionType> dest = new ArrayList<GLSLFunctionType>(); dest.add(new GLSLBasicFunctionType(name, GLSLTypes.INT, GLSLTypes.INT)); dest.add(new GLSLBasicFunctionType(name, GLSLTypes.FLOAT, GLSLTypes.FLOAT)); for (int i = 2; i <= 4; i++) { GLSLType vec = GLSLVectorType.getType(i, GLSLTypes.FLOAT); GLSLType ivec = GLSLVectorType.getType(i, GLSLTypes.INT); dest.add(new GLSLBasicFunctionType(name, vec, vec)); dest.add(new GLSLBasicFunctionType(name, ivec, ivec)); for (int j = 2; j <= 4; j++) { GLSLType mat = GLSLMatrixType.getType(i, j); dest.add(new GLSLBasicFunctionType(name, mat, mat)); } } return dest.toArray(new GLSLFunctionType[dest.size()]); }