/** * Copyright (c) 2003-2009, Xith3D Project Group all rights reserved. * * Portions based on the Java3D interface, Copyright by Sun Microsystems. * Many thanks to the developers of Java3D and Sun Microsystems for their * innovation and design. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the 'Xith3D Project Group' nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) A * RISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE */ package org.xith3d.scenegraph; /** * Created on Jul 7, 2006 by florian for project 'xith3d_glsl_shader_support' * * @author Florian Hofmann (aka Goliat) * @author Marvin Froehlich (aka Qudus) */ public class GLSLVertexShader extends GLSLShader { private String[] vertexAttribsMap = null; private int[] vertexAttribIndices = null; private static final int findIndex( int[] array, int value ) { for ( int i = 0; i < array.length; i++ ) { if ( array[ i ] == value ) return ( i ); } return ( -1 ); } public void setVertexAttributeMapping( int index, String name ) { if ( name == null ) { throw new NullPointerException( "name must not be null" ); } if ( vertexAttribIndices == null ) { vertexAttribIndices = new int[] { index }; vertexAttribsMap = new String[ index + 1 ]; vertexAttribsMap[ index ] = name; } else { final int arrayIndex = findIndex( vertexAttribIndices, index ); if ( arrayIndex >= 0 ) { vertexAttribsMap[ arrayIndex ] = name; } else { if ( index >= vertexAttribsMap.length ) { String[] vertexAttribsMap2 = new String[ index + 1 ]; System.arraycopy( vertexAttribsMap, 0, vertexAttribsMap2, 0, vertexAttribsMap.length ); vertexAttribsMap = vertexAttribsMap2; } vertexAttribsMap[ index ] = name; int[] vertexAttribIndices2 = new int[ vertexAttribIndices.length + 1 ]; System.arraycopy( vertexAttribIndices, 0, vertexAttribIndices2, 0, vertexAttribIndices.length ); vertexAttribIndices = vertexAttribIndices2; vertexAttribIndices[ vertexAttribIndices.length - 1 ] = index; } } } public int getVertexAttributesCount() { if ( vertexAttribIndices == null ) return ( 0 ); return ( vertexAttribIndices.length ); } public int getNthVertexAttributeIndex( int n ) { return ( vertexAttribIndices[ n ] ); } public String getVertexAttributeMapping( int index ) { return ( vertexAttribsMap[ index ] ); } public GLSLVertexShader( String source ) { super( GLSLShader.ShaderType.VERTEX, source ); } public GLSLVertexShader() { this( null ); } }