1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
/*
* Copyright 2004-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
*/
package javax.media.j3d;
/**
* The Shader object is the abstract base class for programmable
* shader code. Currently, only text-based source code shaders are
* supported, so the only subclass of Shader is SourceCodeShader. We
* leave open the possibility for binary (object code) shaders in the
* future.
*
* <p>
* Each instance of a Shader object allows an application to specify
* the source code used in programming the Graphics Pipeline Unit
* (GPU) of the graphics accelerator. A Shader object is constructed
* with modes that specify the <i>shading language</i> and the
* <i>shader type</i>.
*
* <p>
* The shading language specifies the language and runtime environment
* used to program the GPU. The currently defined shading languages
* are GLSL (also known as the OpenGL 2.0 shading language) and
* Cg. Note that not all shading languages are supported on all
* platforms. It is up to the application or utility to query whether
* a particular shading language is supported before using it. The
* value of the <code>shadingLanguage</code> mode is one of:
* <code>SHADING_LANGUAGE_GLSL</code> or
* <code>SHADING_LANGUAGE_CG</code>.
*
*<p>
* The shader type specifies whether the shader is a <i>vertex
* shader</i> or a <i>fragment shader</i>. A vertex shader replaces
* the fixed-function graphics pipeline for vertex operations
* (transformation and lighting). A fragment shader replaces the
* fixed-function graphics pipeline for fragment shading operations
* (texture mapping, texture application, coloring, shading, and so
* forth). The value of the <code>shaderType</code> mode is one of:
* <code>SHADER_TYPE_VERTEX</code> or
* <code>SHADER_TYPE_FRAGMENT</code>.
*
* <p>
* Both the shading language and shader type are immutable modes of
* the Shader object.
*
* <p>
* NOTE: Applications should <i>not</i> extend this class.
*
* @see ShaderProgram
* @see Canvas3D#isShadingLanguageSupported
*
* @since Java 3D 1.4
*/
public abstract class Shader extends NodeComponent {
/**
* This constant indicates the GLSL shading language. It is one
* of the possible values of the shadingLanguage parameter.
*/
public static final int SHADING_LANGUAGE_GLSL = 1;
/**
* This constant indicates the Cg shading language. It is one
* of the possible values of the shadingLanguage parameter.
*/
public static final int SHADING_LANGUAGE_CG = 2;
/**
* This constant indicates that the shader type is a vertex
* shader. It is one of the possible values of the shaderType
* parameter.
*/
public static final int SHADER_TYPE_VERTEX = 1;
/**
* This constant indicates that the shader type is a fragment
* shader. It is one of the possible values of the shaderType
* parameter.
*/
public static final int SHADER_TYPE_FRAGMENT = 2;
/**
* Not a public constructor, for internal use
*/
Shader() {
}
/**
* Package scope constructor so it can't be subclassed by classes
* outside the javax.media.j3d package.
*/
Shader(int shadingLanguage, int shaderType) {
((ShaderRetained)this.retained).initializeShader(shadingLanguage, shaderType);
}
/**
* Returns the shading language of this shader.
*
* @return the shading language of this shader, one of:
* <code>SHADING_LANGUAGE_GLSL</code> or
* <code>SHADING_LANGUAGE_CG</code>.
*/
public int getShadingLanguage() {
return ((ShaderRetained)this.retained).getShadingLanguage();
}
/**
* Returns the type of this shader.
*
* @return the shader type, one of:
* <code>SHADER_TYPE_VERTEX</code> or
* <code>SHADER_TYPE_FRAGMENT</code>.
*/
public int getShaderType() {
return ((ShaderRetained)this.retained).getShaderType();
}
}
|