summaryrefslogtreecommitdiffstats
path: root/src/CgShaderTest/simple_vp.cg
diff options
context:
space:
mode:
Diffstat (limited to 'src/CgShaderTest/simple_vp.cg')
-rw-r--r--src/CgShaderTest/simple_vp.cg167
1 files changed, 167 insertions, 0 deletions
diff --git a/src/CgShaderTest/simple_vp.cg b/src/CgShaderTest/simple_vp.cg
new file mode 100644
index 0000000..cec98ad
--- /dev/null
+++ b/src/CgShaderTest/simple_vp.cg
@@ -0,0 +1,167 @@
+/*
+ * $RCSfile$
+ *
+ * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistribution of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistribution 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 Sun Microsystems, Inc. or the names of
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * This software is provided "AS IS," without a warranty of any
+ * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
+ * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
+ * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
+ * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
+ * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
+ * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
+ * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
+ * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
+ * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
+ * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ *
+ * You acknowledge that this software is not designed, licensed or
+ * intended for use in the design, construction, operation or
+ * maintenance of any nuclear facility.
+ *
+ * $Revision$
+ * $Date$
+ * $State$
+ */
+
+/*********************************************************************NVMH3****
+Path: NVSDK\Common\media\programs
+File: simple.cg
+
+Copyright NVIDIA Corporation 2002
+TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
+*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
+BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
+WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
+BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
+ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
+BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+
+Comments:
+
+******************************************************************************/
+
+// Simple vertex shader, derived from NVIDIA's simple.cg sample
+// shader, that modulates the lit color with a noise pattern based on
+// vertex position.
+
+// define inputs from application
+struct appin
+{
+ float4 Position : POSITION;
+ float4 Normal : NORMAL;
+};
+
+// define outputs from vertex shader
+struct vertout
+{
+ float4 HPosition : POSITION;
+ float4 FragPos : TEXCOORD0;
+ float4 Color0 : COLOR0;
+};
+
+vertout main(appin IN,
+ uniform float4x4 ModelViewProj,
+ uniform float4x4 ModelViewIT,
+ uniform float4 LightVec,
+ uniform float4 LightColor,
+ uniform float4 DiffuseMaterial,
+ uniform float4 SpecularMaterial)
+{
+ vertout OUT;
+
+// Assume that the profile is PROFILE_ARBVP1...
+// #ifdef PROFILE_ARBVP1
+ ModelViewProj = glstate.matrix.mvp;
+ ModelViewIT = glstate.matrix.invtrans.modelview[0];
+ LightVec = glstate.light[0].position;
+ LightColor = glstate.light[0].diffuse;
+ DiffuseMaterial = glstate.material.front.diffuse;
+ SpecularMaterial = glstate.material.front.specular;
+// #endif
+
+ // transform vertex position into homogenous clip-space
+ OUT.HPosition = mul(ModelViewProj, IN.Position);
+
+ // Output the post-perspective-divide position as FragPos
+ float invW = 1.0f / OUT.HPosition.w;
+ OUT.FragPos = OUT.HPosition * invW;
+
+ // transform normal from model-space to view-space
+ float3 normalVec = normalize(mul(ModelViewIT, IN.Normal).xyz);
+
+ // store normalized light vector
+ float3 lightVec = normalize(LightVec.xyz);
+
+ // calculate half angle vector
+ float3 eyeVec = float3(0.0, 0.0, 1.0);
+ float3 halfVec = normalize(lightVec + eyeVec);
+
+ // calculate diffuse component
+ float diffuse = dot(normalVec, lightVec);
+
+ // calculate specular component
+ float specular = dot(normalVec, halfVec);
+
+ // The lit() function is a handy function in the standard library that
+ // can be used to accelerate your lighting calculations.
+ //
+ // This function return a vector containing these values:
+ // result.x = 1.0;
+ // result.y = max(diffuse, 0);
+ // result.z = if (result.y > 0.0) then pow(specular, 32) else 0.0
+ // result.w = 1.0;
+
+ // Use the lit function to compute lighting vector from diffuse and
+ // specular values
+ float4 lighting = lit(diffuse, specular, 32);
+
+ // combine diffuse and specular contributions
+ float3 color0 = (lighting.y * DiffuseMaterial.xyz * LightColor.xyz) +
+ (lighting.z * SpecularMaterial.xyz);
+
+ // Generate a pseudo-random noise pattern
+// float3 xyz = clamp((normalVec.xyz + 1.0) * 0.5, 0.0, 1.0);
+ float3 xyz = clamp((OUT.HPosition.xyz + 1.0) * 0.5, 0.0, 1.0);
+
+ xyz = frac(xyz * 262144.0);
+ float randSeed = frac(3.0 * xyz.x + 5.0 * xyz.y + 7.0 * xyz.z);
+
+ float3 altColor;
+
+ randSeed = frac(37.0 * randSeed);
+ altColor.x = randSeed * 0.5 + 0.5;
+ randSeed = frac(37.0 * randSeed);
+ altColor.y = randSeed * 0.5 + 0.5;
+ randSeed = frac(37.0 * randSeed);
+ altColor.z = randSeed * 0.5 + 0.5;
+ randSeed = frac(37.0 * randSeed);
+ float altAlpha = randSeed * 0.5;
+
+ // Apply noise and output final vertex color
+ OUT.Color0.rgb = lerp(color0, altColor, altAlpha);
+ OUT.Color0.a = 1.0;
+
+ return OUT;
+}