001: /*
002: * $RCSfile: Shader.java,v $
003: *
004: * Copyright 2004-2008 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
006: *
007: * This code is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU General Public License version 2 only, as
009: * published by the Free Software Foundation. Sun designates this
010: * particular file as subject to the "Classpath" exception as provided
011: * by Sun in the LICENSE file that accompanied this code.
012: *
013: * This code is distributed in the hope that it will be useful, but WITHOUT
014: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
015: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
016: * version 2 for more details (a copy is included in the LICENSE file that
017: * accompanied this code).
018: *
019: * You should have received a copy of the GNU General Public License version
020: * 2 along with this work; if not, write to the Free Software Foundation,
021: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
022: *
023: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
024: * CA 95054 USA or visit www.sun.com if you need additional information or
025: * have any questions.
026: *
027: * $Revision: 1.5 $
028: * $Date: 2008/02/28 20:17:29 $
029: * $State: Exp $
030: */
031:
032: package javax.media.j3d;
033:
034: /**
035: * The Shader object is the abstract base class for programmable
036: * shader code. Currently, only text-based source code shaders are
037: * supported, so the only subclass of Shader is SourceCodeShader. We
038: * leave open the possibility for binary (object code) shaders in the
039: * future.
040: *
041: * <p>
042: * Each instance of a Shader object allows an application to specify
043: * the source code used in programming the Graphics Pipeline Unit
044: * (GPU) of the graphics accelerator. A Shader object is constructed
045: * with modes that specify the <i>shading language</i> and the
046: * <i>shader type</i>.
047: *
048: * <p>
049: * The shading language specifies the language and runtime environment
050: * used to program the GPU. The currently defined shading languages
051: * are GLSL (also known as the OpenGL 2.0 shading language) and
052: * Cg. Note that not all shading languages are supported on all
053: * platforms. It is up to the application or utility to query whether
054: * a particular shading language is supported before using it. The
055: * value of the <code>shadingLanguage</code> mode is one of:
056: * <code>SHADING_LANGUAGE_GLSL</code> or
057: * <code>SHADING_LANGUAGE_CG</code>.
058: *
059: *<p>
060: * The shader type specifies whether the shader is a <i>vertex
061: * shader</i> or a <i>fragment shader</i>. A vertex shader replaces
062: * the fixed-function graphics pipeline for vertex operations
063: * (transformation and lighting). A fragment shader replaces the
064: * fixed-function graphics pipeline for fragment shading operations
065: * (texture mapping, texture application, coloring, shading, and so
066: * forth). The value of the <code>shaderType</code> mode is one of:
067: * <code>SHADER_TYPE_VERTEX</code> or
068: * <code>SHADER_TYPE_FRAGMENT</code>.
069: *
070: * <p>
071: * Both the shading language and shader type are immutable modes of
072: * the Shader object.
073: *
074: * <p>
075: * NOTE: Applications should <i>not</i> extend this class.
076: *
077: * @see ShaderProgram
078: * @see Canvas3D#isShadingLanguageSupported
079: *
080: * @since Java 3D 1.4
081: */
082:
083: public abstract class Shader extends NodeComponent {
084:
085: /**
086: * This constant indicates the GLSL shading language. It is one
087: * of the possible values of the shadingLanguage parameter.
088: */
089: public static final int SHADING_LANGUAGE_GLSL = 1;
090:
091: /**
092: * This constant indicates the Cg shading language. It is one
093: * of the possible values of the shadingLanguage parameter.
094: */
095: public static final int SHADING_LANGUAGE_CG = 2;
096:
097: /**
098: * This constant indicates that the shader type is a vertex
099: * shader. It is one of the possible values of the shaderType
100: * parameter.
101: */
102: public static final int SHADER_TYPE_VERTEX = 1;
103:
104: /**
105: * This constant indicates that the shader type is a fragment
106: * shader. It is one of the possible values of the shaderType
107: * parameter.
108: */
109: public static final int SHADER_TYPE_FRAGMENT = 2;
110:
111: /**
112: * Not a public constructor, for internal use
113: */
114: Shader() {
115: }
116:
117: /**
118: * Package scope constructor so it can't be subclassed by classes
119: * outside the javax.media.j3d package.
120: */
121: Shader(int shadingLanguage, int shaderType) {
122: ((ShaderRetained) this .retained).initializeShader(
123: shadingLanguage, shaderType);
124: }
125:
126: /**
127: * Returns the shading language of this shader.
128: *
129: * @return the shading language of this shader, one of:
130: * <code>SHADING_LANGUAGE_GLSL</code> or
131: * <code>SHADING_LANGUAGE_CG</code>.
132: */
133: public int getShadingLanguage() {
134: return ((ShaderRetained) this .retained).getShadingLanguage();
135: }
136:
137: /**
138: * Returns the type of this shader.
139: *
140: * @return the shader type, one of:
141: * <code>SHADER_TYPE_VERTEX</code> or
142: * <code>SHADER_TYPE_FRAGMENT</code>.
143: */
144: public int getShaderType() {
145: return ((ShaderRetained) this.retained).getShaderType();
146: }
147: }
|