summaryrefslogtreecommitdiff
path: root/src/mesa/shader
diff options
context:
space:
mode:
authorMichal Krol <mjkrol@gmail.org>2005-04-13 13:06:57 +0000
committerMichal Krol <mjkrol@gmail.org>2005-04-13 13:06:57 +0000
commit2f951683be5766b7b9537cbb691f662cd1f49b16 (patch)
treee616ea3ea4145e4de0cfc0cc37ee260a703f02be /src/mesa/shader
parent5a382001224df9aad6137c825fbfc2d058b220b1 (diff)
cosmetic changes;
add __fixed_input and __fixed_output qualifiers for built-in variables;
Diffstat (limited to 'src/mesa/shader')
-rwxr-xr-xsrc/mesa/shader/slang/library/slang_fragment_builtin.gc34
-rw-r--r--src/mesa/shader/slang/library/slang_fragment_builtin_gc.h366
-rwxr-xr-xsrc/mesa/shader/slang/library/slang_vertex_builtin.gc36
-rw-r--r--src/mesa/shader/slang/library/slang_vertex_builtin_gc.h262
4 files changed, 663 insertions, 35 deletions
diff --git a/src/mesa/shader/slang/library/slang_fragment_builtin.gc b/src/mesa/shader/slang/library/slang_fragment_builtin.gc
index ec282924ec..b4c5aa3ec2 100755
--- a/src/mesa/shader/slang/library/slang_fragment_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_fragment_builtin.gc
@@ -29,7 +29,7 @@
//
// Writing to gl_FragDepth will establish the depth value for the fragment being processed. If
// depth buffering is enabled, and a shader does not write gl_FragDepth, then the fixed function
-// value for depth will be used as the fragment’s depth value. If a shader statically assigns
+// value for depth will be used as the fragment's depth value. If a shader statically assigns
// a value to gl_FragDepth, and there is an execution path through the shader that does not set
// gl_FragDepth, then the value of the fragment's depth may be undefined for executions of the
// shader that take that path. That is, if a shader statically contains a write gl_FragDepth, then
@@ -56,7 +56,7 @@
// and it holds the window relative coordinates x, y, z, and 1/w values for the fragment. This
// value is the result of the fixed functionality that interpolates primitives after vertex
// processing to generate fragments. The z component is the depth value that would be used for
-// the fragment’s depth if a shader contained no writes to gl_FragDepth. This is useful for
+// the fragment's depth if a shader contained no writes to gl_FragDepth. This is useful for
// invariance if a shader conditionally computes gl_FragDepth but otherwise wants the fixed
// functionality fragment depth.
//
@@ -68,11 +68,11 @@
// as follows:
//
-vec4 gl_FragCoord;
-bool gl_FrontFacing;
-vec4 gl_FragColor;
-vec4 gl_FragData[gl_MaxDrawBuffers];
-float gl_FragDepth;
+__fixed_input vec4 gl_FragCoord;
+__fixed_input bool gl_FrontFacing;
+__fixed_output vec4 gl_FragColor;
+__fixed_output vec4 gl_FragData[gl_MaxDrawBuffers];
+__fixed_output float gl_FragDepth;
//
// However, they do not behave like variables with no qualifier; their behavior is as described
@@ -80,7 +80,7 @@ float gl_FragDepth;
//
//
-// Unlike user-defined varying variables, the built-in varying variables don’t have a strict
+// Unlike user-defined varying variables, the built-in varying variables don't have a strict
// one-to-one correspondence between the vertex language and the fragment language. Two sets are
// provided, one for each language. Their relationship is described below.
//
@@ -116,14 +116,14 @@ varying float gl_FogFragCoord;
//
// The built-in functions basically fall into three categories:
//
-// • They expose some necessary hardware functionality in a convenient way such as accessing
+// * They expose some necessary hardware functionality in a convenient way such as accessing
// a texture map. There is no way in the language for these functions to be emulated by a shader.
//
-// • They represent a trivial operation (clamp, mix, etc.) that is very simple for the user
+// * They represent a trivial operation (clamp, mix, etc.) that is very simple for the user
// to write, but they are very common and may have direct hardware support. It is a very hard
// problem for the compiler to map expressions to complex assembler instructions.
//
-// • They represent an operation graphics hardware is likely to accelerate at some point. The
+// * They represent an operation graphics hardware is likely to accelerate at some point. The
// trigonometry functions fall into this category.
//
// Many of the functions are similar to the same named ones in common C libraries, but they support
@@ -162,13 +162,13 @@ varying float gl_FogFragCoord;
// running in a fragment shader, the LOD computed by the implementation is used to do the texture
// lookup. If it is mip-mapped and running on the vertex shader, then the base texture is used.
//
-// The built-ins suffixed with “Lod” are allowed only in a vertex shader. For the “Lod” functions,
+// The built-ins suffixed with "Lod" are allowed only in a vertex shader. For the "Lod" functions,
// lod is directly used as the level of detail.
//
//
// Use the texture coordinate coord to do a texture lookup in the 1D texture currently bound
-// to sampler. For the projective (“Proj”) versions, the texture coordinate coord.s is divided by
+// to sampler. For the projective ("Proj") versions, the texture coordinate coord.s is divided by
// the last component of coord.
//
// XXX
@@ -184,7 +184,7 @@ vec4 texture1DProj (sampler1D sampler, vec4 coord, float bias) {
//
// Use the texture coordinate coord to do a texture lookup in the 2D texture currently bound
-// to sampler. For the projective (“Proj”) versions, the texture coordinate (coord.s, coord.t) is
+// to sampler. For the projective ("Proj") versions, the texture coordinate (coord.s, coord.t) is
// divided by the last component of coord. The third component of coord is ignored for the vec4
// coord variant.
//
@@ -201,7 +201,7 @@ vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias) {
//
// Use the texture coordinate coord to do a texture lookup in the 3D texture currently bound
-// to sampler. For the projective (“Proj”) versions, the texture coordinate is divided by coord.q.
+// to sampler. For the projective ("Proj") versions, the texture coordinate is divided by coord.q.
//
// XXX
vec4 texture3D (sampler3D sampler, vec3 coord, float bias) {
@@ -226,9 +226,9 @@ vec4 textureCube (samplerCube sampler, vec3 coord, float bias) {
// Use texture coordinate coord to do a depth comparison lookup on the depth texture bound
// to sampler, as described in section 3.8.14 of version 1.4 of the OpenGL specification. The 3rd
// component of coord (coord.p) is used as the R value. The texture bound to sampler must be a
-// depth texture, or results are undefined. For the projective (“Proj”) version of each built-in,
+// depth texture, or results are undefined. For the projective ("Proj") version of each built-in,
// the texture coordinate is divide by coord.q, giving a depth value R of coord.p/coord.q. The
-// second component of coord is ignored for the “1D” variants.
+// second component of coord is ignored for the "1D" variants.
//
// XXX
vec4 shadow1D (sampler1DShadow sampler, vec3 coord, float bias) {
diff --git a/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h b/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h
new file mode 100644
index 0000000000..85f74bda8e
--- /dev/null
+++ b/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h
@@ -0,0 +1,366 @@
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"__fixed_input vec4 gl_FragCoord;\n"
+"__fixed_input bool gl_FrontFacing;\n"
+"__fixed_output vec4 gl_FragColor;\n"
+"__fixed_output vec4 gl_FragData[gl_MaxDrawBuffers];\n"
+"__fixed_output float gl_FragDepth;\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"varying vec4 gl_Color;\n"
+"varying vec4 gl_SecondaryColor;\n"
+"varying vec4 gl_TexCoord[];\n"
+"varying float gl_FogFragCoord;\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"vec4 texture1D (sampler1D sampler, float coord, float bias) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"vec4 texture1DProj (sampler1D sampler, vec2 coord, float bias) {\n"
+" return texture1D (sampler, coord.s / coord.t, bias);\n"
+"}\n"
+"vec4 texture1DProj (sampler1D sampler, vec4 coord, float bias) {\n"
+" return texture1D (sampler, coord.s / coord.q, bias);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"vec4 texture2D (sampler2D sampler, vec2 coord, float bias) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"vec4 texture2DProj (sampler2D sampler, vec3 coord, float bias) {\n"
+" return texture2D (sampler, vec2 (coord.s / coord.p, coord.t / coord.p), bias);\n"
+"}\n"
+"vec4 texture2DProj (sampler2D sampler, vec4 coord, float bias) {\n"
+" return texture2D (sampler, vec2 (coord.s / coord.q, coord.s / coord.q), bias);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"vec4 texture3D (sampler3D sampler, vec3 coord, float bias) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"vec4 texture3DProj (sampler3D sampler, vec4 coord, float bias) {\n"
+" return texture3DProj (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q),\n"
+" bias);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"vec4 textureCube (samplerCube sampler, vec3 coord, float bias) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"vec4 shadow1D (sampler1DShadow sampler, vec3 coord, float bias) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"\n"
+"vec4 shadow2D (sampler2DShadow sampler, vec3 coord, float bias) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"vec4 shadow1DProj (sampler1DShadow sampler, vec4 coord, float bias) {\n"
+" return shadow1D (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), bias);\n"
+"}\n"
+"vec4 shadow2DProj (sampler2DShadow sampler, vec4 coord, float bias) {\n"
+" return shadow2D (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q), bias);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"float dFdx (float p) {\n"
+" return 0.0;\n"
+"}\n"
+"\n"
+"vec2 dFdx (vec2 p) {\n"
+" return vec2 (0.0);\n"
+"}\n"
+"\n"
+"vec3 dFdx (vec3 p) {\n"
+" return vec3 (0.0);\n"
+"}\n"
+"\n"
+"vec4 dFdx (vec4 p) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"float dFdy (float p) {\n"
+" return 0.0;\n"
+"}\n"
+"\n"
+"vec2 dFdy (vec2 p) {\n"
+" return vec2 (0.0);\n"
+"}\n"
+"\n"
+"vec3 dFdy (vec3 p) {\n"
+" return vec3 (0.0);\n"
+"}\n"
+"\n"
+"vec4 dFdy (vec4 p) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"float fwidth (float p) {\n"
+" return abs (dFdx (p)) + abs (dFdy (p));\n"
+"}\n"
+"vec2 fwidth (vec2 p) {\n"
+" return abs (dFdx (p)) + abs (dFdy (p));\n"
+"}\n"
+"vec3 fwidth (vec3 p) {\n"
+" return abs (dFdx (p)) + abs (dFdy (p));\n"
+"}\n"
+"vec4 fwidth (vec4 p) {\n"
+" return abs (dFdx (p)) + abs (dFdy (p));\n"
+"}\n"
+"\n"
diff --git a/src/mesa/shader/slang/library/slang_vertex_builtin.gc b/src/mesa/shader/slang/library/slang_vertex_builtin.gc
index cb04362386..850fd2bb85 100755
--- a/src/mesa/shader/slang/library/slang_vertex_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_vertex_builtin.gc
@@ -36,9 +36,9 @@
// intrinsically declared with the following types:
//
-vec4 gl_Position; // must be written to
-float gl_PointSize; // may be written to
-vec4 gl_ClipVertex; // may be written to
+__fixed_output vec4 gl_Position; // must be written to
+__fixed_output float gl_PointSize; // may be written to
+__fixed_output vec4 gl_ClipVertex; // may be written to
//
// If gl_PointSize or gl_ClipVertex are not written to, their values are undefined. Any of these
@@ -74,7 +74,7 @@ attribute vec4 gl_MultiTexCoord7;
attribute float gl_FogCoord;
//
-// Unlike user-defined varying variables, the built-in varying variables don’t have a strict
+// Unlike user-defined varying variables, the built-in varying variables don't have a strict
// one-to-one correspondence between the vertex language and the fragment language. Two sets are
// provided, one for each language. Their relationship is described below.
//
@@ -91,9 +91,9 @@ varying vec4 gl_TexCoord[]; // at most will be gl_Ma
varying float gl_FogFragCoord;
//
-// For gl_FogFragCoord, the value written will be used as the “c” value on page 160 of the
+// For gl_FogFragCoord, the value written will be used as the "c" value on page 160 of the
// OpenGL 1.4 Specification by the fixed functionality pipeline. For example, if the z-coordinate
-// of the fragment in eye space is desired as “c”, then that's what the vertex shader should write
+// of the fragment in eye space is desired as "c", then that's what the vertex shader should write
// into gl_FogFragCoord.
//
// As with all arrays, indices used to subscript gl_TexCoord must either be an integral constant
@@ -110,14 +110,14 @@ varying float gl_FogFragCoord;
//
// The built-in functions basically fall into three categories:
//
-// • They expose some necessary hardware functionality in a convenient way such as accessing
+// * They expose some necessary hardware functionality in a convenient way such as accessing
// a texture map. There is no way in the language for these functions to be emulated by a shader.
//
-// • They represent a trivial operation (clamp, mix, etc.) that is very simple for the user
+// * They represent a trivial operation (clamp, mix, etc.) that is very simple for the user
// to write, but they are very common and may have direct hardware support. It is a very hard
// problem for the compiler to map expressions to complex assembler instructions.
//
-// • They represent an operation graphics hardware is likely to accelerate at some point. The
+// * They represent an operation graphics hardware is likely to accelerate at some point. The
// trigonometry functions fall into this category.
//
// Many of the functions are similar to the same named ones in common C libraries, but they support
@@ -139,7 +139,7 @@ varying float gl_FogFragCoord;
//
// For vertex shaders only. This function will ensure that the incoming vertex value will be
-// transformed in a way that produces exactly the same result as would be produced by OpenGL’s
+// transformed in a way that produces exactly the same result as would be produced by OpenGL's
// fixed functionality transform. It is intended to be used to compute gl_Position, e.g.,
// gl_Position = ftransform()
// This function should be used, for example, when an application is rendering the same geometry in
@@ -176,13 +176,13 @@ vec4 ftransform () {
// running in a fragment shader, the LOD computed by the implementation is used to do the texture
// lookup. If it is mip-mapped and running on the vertex shader, then the base texture is used.
//
-// The built-ins suffixed with “Lod” are allowed only in a vertex shader. For the “Lod” functions,
+// The built-ins suffixed with "Lod" are allowed only in a vertex shader. For the "Lod" functions,
// lod is directly used as the level of detail.
//
//
// Use the texture coordinate coord to do a texture lookup in the 1D texture currently bound
-// to sampler. For the projective (“Proj”) versions, the texture coordinate coord.s is divided by
+// to sampler. For the projective ("Proj") versions, the texture coordinate coord.s is divided by
// the last component of coord.
//
// XXX
@@ -198,7 +198,7 @@ vec4 texture1DProjLod (sampler1D sampler, vec4 coord, float lod) {
//
// Use the texture coordinate coord to do a texture lookup in the 2D texture currently bound
-// to sampler. For the projective (“Proj”) versions, the texture coordinate (coord.s, coord.t) is
+// to sampler. For the projective ("Proj") versions, the texture coordinate (coord.s, coord.t) is
// divided by the last component of coord. The third component of coord is ignored for the vec4
// coord variant.
//
@@ -215,7 +215,7 @@ vec4 texture2DProjLod (sampler2D sampler, vec4 coord, float lod) {
//
// Use the texture coordinate coord to do a texture lookup in the 3D texture currently bound
-// to sampler. For the projective (“Proj”) versions, the texture coordinate is divided by coord.q.
+// to sampler. For the projective ("Proj") versions, the texture coordinate is divided by coord.q.
//
// XXX
vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod) {
@@ -240,9 +240,9 @@ vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod) {
// Use texture coordinate coord to do a depth comparison lookup on the depth texture bound
// to sampler, as described in section 3.8.14 of version 1.4 of the OpenGL specification. The 3rd
// component of coord (coord.p) is used as the R value. The texture bound to sampler must be a
-// depth texture, or results are undefined. For the projective (“Proj”) version of each built-in,
+// depth texture, or results are undefined. For the projective ("Proj") version of each built-in,
// the texture coordinate is divide by coord.q, giving a depth value R of coord.p/coord.q. The
-// second component of coord is ignored for the “1D” variants.
+// second component of coord is ignored for the "1D" variants.
//
// XXX
vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod) {
@@ -252,10 +252,10 @@ vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod) {
vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod) {
return vec4 (0.0);
}
-vec4 shadow1DProjLod(sampler1DShadow sampler, vec4 coord, float lod) {
+vec4 shadow1DProjLod (sampler1DShadow sampler, vec4 coord, float lod) {
return shadow1DLod (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), lod);
}
-vec4 shadow2DProjLod(sampler2DShadow sampler, vec4 coord, float lod) {
+vec4 shadow2DProjLod (sampler2DShadow sampler, vec4 coord, float lod) {
return shadow2DLod (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q),
lod);
}
diff --git a/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h b/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h
new file mode 100644
index 0000000000..746226180f
--- /dev/null
+++ b/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h
@@ -0,0 +1,262 @@
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"__fixed_output vec4 gl_Position;\n"
+"__fixed_output float gl_PointSize;\n"
+"__fixed_output vec4 gl_ClipVertex;\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"attribute vec4 gl_Color;\n"
+"attribute vec4 gl_SecondaryColor;\n"
+"attribute vec3 gl_Normal;\n"
+"attribute vec4 gl_Vertex;\n"
+"attribute vec4 gl_MultiTexCoord0;\n"
+"attribute vec4 gl_MultiTexCoord1;\n"
+"attribute vec4 gl_MultiTexCoord2;\n"
+"attribute vec4 gl_MultiTexCoord3;\n"
+"attribute vec4 gl_MultiTexCoord4;\n"
+"attribute vec4 gl_MultiTexCoord5;\n"
+"attribute vec4 gl_MultiTexCoord6;\n"
+"attribute vec4 gl_MultiTexCoord7;\n"
+"attribute float gl_FogCoord;\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"varying vec4 gl_FrontColor;\n"
+"varying vec4 gl_BackColor;\n"
+"varying vec4 gl_FrontSecondaryColor;\n"
+"varying vec4 gl_BackSecondaryColor;\n"
+"varying vec4 gl_TexCoord[];\n"
+"varying float gl_FogFragCoord;\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"vec4 ftransform () {\n"
+" return gl_ModelViewProjectionMatrix * gl_Vertex;\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"vec4 texture1DLod (sampler1D sampler, float coord, float lod) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"vec4 texture1DProjLod (sampler1D sampler, vec2 coord, float lod) {\n"
+" return texture1DLod (sampler, coord.s / coord.t, lod);\n"
+"}\n"
+"vec4 texture1DProjLod (sampler1D sampler, vec4 coord, float lod) {\n"
+" return texture1DLod (sampler, coord.s / coord.q, lod);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"vec4 texture2DLod (sampler2D sampler, vec2 coord, float lod) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"vec4 texture2DProjLod (sampler2D sampler, vec3 coord, float lod) {\n"
+" return texture2DLod (sampler, vec2 (coord.s / coord.p, coord.t / coord.p), lod);\n"
+"}\n"
+"vec4 texture2DProjLod (sampler2D sampler, vec4 coord, float lod) {\n"
+" return texture2DLod (sampler, vec2 (coord.s / coord.q, coord.t / coord.q), lod);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"vec4 texture3DLod (sampler3D sampler, vec3 coord, float lod) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"vec4 texture3DProjLod (sampler3D sampler, vec4 coord, float lod) {\n"
+" return texture3DLod (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.s / coord.q),\n"
+" lod);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"vec4 textureCubeLod (samplerCube sampler, vec3 coord, float lod) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"vec4 shadow1DLod (sampler1DShadow sampler, vec3 coord, float lod) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"\n"
+"vec4 shadow2DLod (sampler2DShadow sampler, vec3 coord, float lod) {\n"
+" return vec4 (0.0);\n"
+"}\n"
+"vec4 shadow1DProjLod (sampler1DShadow sampler, vec4 coord, float lod) {\n"
+" return shadow1DLod (sampler, vec3 (coord.s / coord.q, 0.0, coord.p / coord.q), lod);\n"
+"}\n"
+"vec4 shadow2DProjLod (sampler2DShadow sampler, vec4 coord, float lod) {\n"
+" return shadow2DLod (sampler, vec3 (coord.s / coord.q, coord.t / coord.q, coord.p / coord.q),\n"
+" lod);\n"
+"}\n"
+"\n"