forked from brl/citadel
Bruce Leidl
4831a46764
Recipes updated: adwaita-icon-theme 43 --> 46.0 cairomm 1.12.0 --> 1.18 gdm 42.0 --> 45.0 glibmm 2.62.0 --> 2.78.0 gjs 1.77.90 --> 1.80.0 gnome-backgrounds 45.0 --> 46.0 gnome-bluetooth 42.4 --> 46.0 gnome-control-center 45.0 --> 46.0 gnome-disk-utility 42.0 --> 46.0 gnome-session 42.0 --> 46.0 gnome-settings-daemon 45.0 --> 46.0 gnome-shell 45.0 --> 46.0 gnome-system-monitor 42.0 --> 46.0 gsettings-desktop-schemas 45.0 --> 46.0 gtk4 4.12.1 --> 4.14.1 gvfs 1.50.2 --> 1.54.0 libadwaita 1.4.0 --> 1.5.0 libgtop 2.40.0 --> 2.41.3 libgweather4 4.2.0 --> 4.4.2 libwacom 0.26 --> 2.8.0 mutter 45.0 --> 46.0 pangomm 2.46.2 --> 2.50.1 New recipes added: pipewire 1.0.4 wireplumber 0.5.0 doxygen 1.9.3 gcr 4.2.0 rtkit 0.13 libopus 1.5.1 libjxl 0.10.2 wayland gtkmm4 4.14.0
625 lines
17 KiB
Diff
625 lines
17 KiB
Diff
From b695c3a3fa3f4cd48c13aa26542110de27075518 Mon Sep 17 00:00:00 2001
|
|
From: Drew Moseley <drew_moseley@mentor.com>
|
|
Date: Mon, 12 May 2014 15:22:32 -0400
|
|
Subject: [PATCH 1/9] mesa-demos: Add missing data files.
|
|
|
|
Add some data files that are present in the git repository:
|
|
http://cgit.freedesktop.org/mesa/demos/tree/?id=mesa-demos-8.1.0
|
|
but not in the release tarball
|
|
ftp://ftp.freedesktop.org/pub/mesa/demos/8.1.0/mesa-demos-8.1.0.tar.bz2
|
|
|
|
Upstream-Status: Backport
|
|
Signed-off-by: Drew Moseley <drew_moseley@mentor.com>
|
|
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
|
|
---
|
|
src/fpglsl/depth-read.glsl | 4 +
|
|
src/fpglsl/infinite-loop.glsl | 7 +
|
|
src/glsl/CH11-bumpmaptex.frag | 47 +++++++
|
|
src/glsl/blinking-teapot.frag | 31 +++++
|
|
src/glsl/blinking-teapot.vert | 16 +++
|
|
src/glsl/convolution.frag | 21 +++
|
|
src/glsl/simplex-noise.glsl | 279 ++++++++++++++++++++++++++++++++++++++++
|
|
src/glsl/skinning.vert | 24 ++++
|
|
src/perf/glslstateschange1.frag | 19 +++
|
|
src/perf/glslstateschange1.vert | 14 ++
|
|
src/perf/glslstateschange2.frag | 17 +++
|
|
src/perf/glslstateschange2.vert | 14 ++
|
|
src/vpglsl/infinite-loop.glsl | 8 ++
|
|
13 files changed, 501 insertions(+)
|
|
create mode 100644 src/fpglsl/depth-read.glsl
|
|
create mode 100644 src/fpglsl/infinite-loop.glsl
|
|
create mode 100644 src/glsl/CH11-bumpmaptex.frag
|
|
create mode 100644 src/glsl/blinking-teapot.frag
|
|
create mode 100644 src/glsl/blinking-teapot.vert
|
|
create mode 100644 src/glsl/convolution.frag
|
|
create mode 100644 src/glsl/simplex-noise.glsl
|
|
create mode 100644 src/glsl/skinning.vert
|
|
create mode 100644 src/perf/glslstateschange1.frag
|
|
create mode 100644 src/perf/glslstateschange1.vert
|
|
create mode 100644 src/perf/glslstateschange2.frag
|
|
create mode 100644 src/perf/glslstateschange2.vert
|
|
create mode 100644 src/vpglsl/infinite-loop.glsl
|
|
|
|
diff --git a/src/fpglsl/depth-read.glsl b/src/fpglsl/depth-read.glsl
|
|
new file mode 100644
|
|
index 0000000..86d298e
|
|
--- /dev/null
|
|
+++ b/src/fpglsl/depth-read.glsl
|
|
@@ -0,0 +1,4 @@
|
|
+void main()
|
|
+{
|
|
+ gl_FragColor = gl_FragCoord.zzzz;
|
|
+}
|
|
diff --git a/src/fpglsl/infinite-loop.glsl b/src/fpglsl/infinite-loop.glsl
|
|
new file mode 100644
|
|
index 0000000..c6dc6ee
|
|
--- /dev/null
|
|
+++ b/src/fpglsl/infinite-loop.glsl
|
|
@@ -0,0 +1,7 @@
|
|
+void main() {
|
|
+ vec4 sum = vec4(0);
|
|
+ for (int i = 1; i != 2; i += 2) {
|
|
+ sum += vec4(0.1, 0.1, 0.1, 0.1);
|
|
+ }
|
|
+ gl_FragColor = sum;
|
|
+}
|
|
diff --git a/src/glsl/CH11-bumpmaptex.frag b/src/glsl/CH11-bumpmaptex.frag
|
|
new file mode 100644
|
|
index 0000000..b5dabb4
|
|
--- /dev/null
|
|
+++ b/src/glsl/CH11-bumpmaptex.frag
|
|
@@ -0,0 +1,47 @@
|
|
+//
|
|
+// Fragment shader for procedural bumps
|
|
+//
|
|
+// Authors: John Kessenich, Randi Rost
|
|
+//
|
|
+// Copyright (c) 2002-2006 3Dlabs Inc. Ltd.
|
|
+//
|
|
+// See 3Dlabs-License.txt for license information
|
|
+//
|
|
+// Texture mapping/modulation added by Brian Paul
|
|
+//
|
|
+
|
|
+varying vec3 LightDir;
|
|
+varying vec3 EyeDir;
|
|
+
|
|
+uniform float BumpDensity; // = 16.0
|
|
+uniform float BumpSize; // = 0.15
|
|
+uniform float SpecularFactor; // = 0.5
|
|
+
|
|
+uniform sampler2D Tex;
|
|
+
|
|
+void main()
|
|
+{
|
|
+ vec3 ambient = vec3(0.25);
|
|
+ vec3 litColor;
|
|
+ vec2 c = BumpDensity * gl_TexCoord[0].st;
|
|
+ vec2 p = fract(c) - vec2(0.5);
|
|
+
|
|
+ float d, f;
|
|
+ d = p.x * p.x + p.y * p.y;
|
|
+ f = inversesqrt(d + 1.0);
|
|
+
|
|
+ if (d >= BumpSize)
|
|
+ { p = vec2(0.0); f = 1.0; }
|
|
+
|
|
+ vec3 SurfaceColor = texture2D(Tex, gl_TexCoord[0].st).xyz;
|
|
+
|
|
+ vec3 normDelta = vec3(p.x, p.y, 1.0) * f;
|
|
+ litColor = SurfaceColor * (ambient + max(dot(normDelta, LightDir), 0.0));
|
|
+ vec3 reflectDir = reflect(LightDir, normDelta);
|
|
+
|
|
+ float spec = max(dot(EyeDir, reflectDir), 0.0);
|
|
+ spec *= SpecularFactor;
|
|
+ litColor = min(litColor + spec, vec3(1.0));
|
|
+
|
|
+ gl_FragColor = vec4(litColor, 1.0);
|
|
+}
|
|
diff --git a/src/glsl/blinking-teapot.frag b/src/glsl/blinking-teapot.frag
|
|
new file mode 100644
|
|
index 0000000..0db060b
|
|
--- /dev/null
|
|
+++ b/src/glsl/blinking-teapot.frag
|
|
@@ -0,0 +1,31 @@
|
|
+#extension GL_ARB_uniform_buffer_object : enable
|
|
+
|
|
+layout(std140) uniform colors0
|
|
+{
|
|
+ float DiffuseCool;
|
|
+ float DiffuseWarm;
|
|
+ vec3 SurfaceColor;
|
|
+ vec3 WarmColor;
|
|
+ vec3 CoolColor;
|
|
+ vec4 some[8];
|
|
+};
|
|
+
|
|
+varying float NdotL;
|
|
+varying vec3 ReflectVec;
|
|
+varying vec3 ViewVec;
|
|
+
|
|
+void main (void)
|
|
+{
|
|
+
|
|
+ vec3 kcool = min(CoolColor + DiffuseCool * SurfaceColor, 1.0);
|
|
+ vec3 kwarm = min(WarmColor + DiffuseWarm * SurfaceColor, 1.0);
|
|
+ vec3 kfinal = mix(kcool, kwarm, NdotL);
|
|
+
|
|
+ vec3 nreflect = normalize(ReflectVec);
|
|
+ vec3 nview = normalize(ViewVec);
|
|
+
|
|
+ float spec = max(dot(nreflect, nview), 0.0);
|
|
+ spec = pow(spec, 32.0);
|
|
+
|
|
+ gl_FragColor = vec4 (min(kfinal + spec, 1.0), 1.0);
|
|
+}
|
|
diff --git a/src/glsl/blinking-teapot.vert b/src/glsl/blinking-teapot.vert
|
|
new file mode 100644
|
|
index 0000000..397d733
|
|
--- /dev/null
|
|
+++ b/src/glsl/blinking-teapot.vert
|
|
@@ -0,0 +1,16 @@
|
|
+vec3 LightPosition = vec3(0.0, 10.0, 4.0);
|
|
+
|
|
+varying float NdotL;
|
|
+varying vec3 ReflectVec;
|
|
+varying vec3 ViewVec;
|
|
+
|
|
+void main(void)
|
|
+{
|
|
+ vec3 ecPos = vec3 (gl_ModelViewMatrix * gl_Vertex);
|
|
+ vec3 tnorm = normalize(gl_NormalMatrix * gl_Normal);
|
|
+ vec3 lightVec = normalize(LightPosition - ecPos);
|
|
+ ReflectVec = normalize(reflect(-lightVec, tnorm));
|
|
+ ViewVec = normalize(-ecPos);
|
|
+ NdotL = (dot(lightVec, tnorm) + 1.0) * 0.5;
|
|
+ gl_Position = ftransform();
|
|
+}
|
|
diff --git a/src/glsl/convolution.frag b/src/glsl/convolution.frag
|
|
new file mode 100644
|
|
index 0000000..e49b8ac
|
|
--- /dev/null
|
|
+++ b/src/glsl/convolution.frag
|
|
@@ -0,0 +1,21 @@
|
|
+
|
|
+const int KernelSize = 9;
|
|
+
|
|
+//texture offsets
|
|
+uniform vec2 Offset[KernelSize];
|
|
+//convolution kernel
|
|
+uniform vec4 KernelValue[KernelSize];
|
|
+uniform sampler2D srcTex;
|
|
+uniform vec4 ScaleFactor;
|
|
+uniform vec4 BaseColor;
|
|
+
|
|
+void main(void)
|
|
+{
|
|
+ int i;
|
|
+ vec4 sum = vec4(0.0);
|
|
+ for (i = 0; i < KernelSize; ++i) {
|
|
+ vec4 tmp = texture2D(srcTex, gl_TexCoord[0].st + Offset[i]);
|
|
+ sum += tmp * KernelValue[i];
|
|
+ }
|
|
+ gl_FragColor = sum * ScaleFactor + BaseColor;
|
|
+}
|
|
diff --git a/src/glsl/simplex-noise.glsl b/src/glsl/simplex-noise.glsl
|
|
new file mode 100644
|
|
index 0000000..b6833cb
|
|
--- /dev/null
|
|
+++ b/src/glsl/simplex-noise.glsl
|
|
@@ -0,0 +1,279 @@
|
|
+//
|
|
+// Description : Array and textureless GLSL 2D/3D/4D simplex
|
|
+// noise functions.
|
|
+// Author : Ian McEwan, Ashima Arts.
|
|
+// Maintainer : ijm
|
|
+// Lastmod : 20110223
|
|
+// License : Copyright (C) 2011 Ashima Arts. All rights reserved.
|
|
+// Distributed under the Artistic License 2.0; See LICENCE file.
|
|
+//
|
|
+
|
|
+#define NORMALIZE_GRADIENTS
|
|
+#undef USE_CIRCLE
|
|
+#define COLLAPSE_SORTNET
|
|
+
|
|
+float permute(float x0,vec3 p) {
|
|
+ float x1 = mod(x0 * p.y, p.x);
|
|
+ return floor( mod( (x1 + p.z) *x0, p.x ));
|
|
+ }
|
|
+vec2 permute(vec2 x0,vec3 p) {
|
|
+ vec2 x1 = mod(x0 * p.y, p.x);
|
|
+ return floor( mod( (x1 + p.z) *x0, p.x ));
|
|
+ }
|
|
+vec3 permute(vec3 x0,vec3 p) {
|
|
+ vec3 x1 = mod(x0 * p.y, p.x);
|
|
+ return floor( mod( (x1 + p.z) *x0, p.x ));
|
|
+ }
|
|
+vec4 permute(vec4 x0,vec3 p) {
|
|
+ vec4 x1 = mod(x0 * p.y, p.x);
|
|
+ return floor( mod( (x1 + p.z) *x0, p.x ));
|
|
+ }
|
|
+
|
|
+uniform vec4 pParam;
|
|
+// Example
|
|
+// const vec4 pParam = vec4( 17.* 17., 34., 1., 7.);
|
|
+
|
|
+float taylorInvSqrt(float r)
|
|
+ {
|
|
+ return ( 0.83666002653408 + 0.7*0.85373472095314 - 0.85373472095314 * r );
|
|
+ }
|
|
+
|
|
+float simplexNoise2(vec2 v)
|
|
+ {
|
|
+ const vec2 C = vec2(0.211324865405187134, // (3.0-sqrt(3.0))/6.;
|
|
+ 0.366025403784438597); // 0.5*(sqrt(3.0)-1.);
|
|
+ const vec3 D = vec3( 0., 0.5, 2.0) * 3.14159265358979312;
|
|
+// First corner
|
|
+ vec2 i = floor(v + dot(v, C.yy) );
|
|
+ vec2 x0 = v - i + dot(i, C.xx);
|
|
+
|
|
+// Other corners
|
|
+ vec2 i1 = (x0.x > x0.y) ? vec2(1.,0.) : vec2(0.,1.) ;
|
|
+
|
|
+ // x0 = x0 - 0. + 0. * C
|
|
+ vec2 x1 = x0 - i1 + 1. * C.xx ;
|
|
+ vec2 x2 = x0 - 1. + 2. * C.xx ;
|
|
+
|
|
+// Permutations
|
|
+ i = mod(i, pParam.x);
|
|
+ vec3 p = permute( permute(
|
|
+ i.y + vec3(0., i1.y, 1. ), pParam.xyz)
|
|
+ + i.x + vec3(0., i1.x, 1. ), pParam.xyz);
|
|
+
|
|
+#ifndef USE_CIRCLE
|
|
+// ( N points uniformly over a line, mapped onto a diamond.)
|
|
+ vec3 x = fract(p / pParam.w) ;
|
|
+ vec3 h = 0.5 - abs(x) ;
|
|
+
|
|
+ vec3 sx = vec3(lessThan(x,D.xxx)) *2. -1.;
|
|
+ vec3 sh = vec3(lessThan(h,D.xxx));
|
|
+
|
|
+ vec3 a0 = x + sx*sh;
|
|
+ vec2 p0 = vec2(a0.x,h.x);
|
|
+ vec2 p1 = vec2(a0.y,h.y);
|
|
+ vec2 p2 = vec2(a0.z,h.z);
|
|
+
|
|
+#ifdef NORMALISE_GRADIENTS
|
|
+ p0 *= taylorInvSqrt(dot(p0,p0));
|
|
+ p1 *= taylorInvSqrt(dot(p1,p1));
|
|
+ p2 *= taylorInvSqrt(dot(p2,p2));
|
|
+#endif
|
|
+
|
|
+ vec3 g = 2.0 * vec3( dot(p0, x0), dot(p1, x1), dot(p2, x2) );
|
|
+#else
|
|
+// N points around a unit circle.
|
|
+ vec3 phi = D.z * mod(p,pParam.w) /pParam.w ;
|
|
+ vec4 a0 = sin(phi.xxyy+D.xyxy);
|
|
+ vec2 a1 = sin(phi.zz +D.xy);
|
|
+ vec3 g = vec3( dot(a0.xy, x0), dot(a0.zw, x1), dot(a1.xy, x2) );
|
|
+#endif
|
|
+// mix
|
|
+ vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), 0.);
|
|
+ m = m*m ;
|
|
+ return 1.66666* 70.*dot(m*m, g);
|
|
+ }
|
|
+
|
|
+float simplexNoise3(vec3 v)
|
|
+ {
|
|
+ const vec2 C = vec2(1./6. , 1./3. ) ;
|
|
+ const vec4 D = vec4(0., 0.5, 1.0, 2.0);
|
|
+
|
|
+// First corner
|
|
+ vec3 i = floor(v + dot(v, C.yyy) );
|
|
+ vec3 x0 = v - i + dot(i, C.xxx) ;
|
|
+
|
|
+// Other corners
|
|
+#ifdef COLLAPSE_SORTNET
|
|
+ vec3 g = vec3( greaterThan( x0.xyz, x0.yzx) );
|
|
+ vec3 l = vec3( lessThanEqual( x0.xyz, x0.yzx) );
|
|
+
|
|
+ vec3 i1 = g.xyz * l.zxy;
|
|
+ vec3 i2 = max( g.xyz, l.zxy);
|
|
+#else
|
|
+// Keeping this clean - let the compiler optimize.
|
|
+ vec3 q1;
|
|
+ q1.x = max(x0.x, x0.y);
|
|
+ q1.y = min(x0.x, x0.y);
|
|
+ q1.z = x0.z;
|
|
+
|
|
+ vec3 q2;
|
|
+ q2.x = max(q1.x,q1.z);
|
|
+ q2.z = min(q1.x,q1.z);
|
|
+ q2.y = q1.y;
|
|
+
|
|
+ vec3 q3;
|
|
+ q3.y = max(q2.y, q2.z);
|
|
+ q3.z = min(q2.y, q2.z);
|
|
+ q3.x = q2.x;
|
|
+
|
|
+ vec3 i1 = vec3(equal(q3.xxx, x0));
|
|
+ vec3 i2 = i1 + vec3(equal(q3.yyy, x0));
|
|
+#endif
|
|
+
|
|
+ // x0 = x0 - 0. + 0. * C
|
|
+ vec3 x1 = x0 - i1 + 1. * C.xxx;
|
|
+ vec3 x2 = x0 - i2 + 2. * C.xxx;
|
|
+ vec3 x3 = x0 - 1. + 3. * C.xxx;
|
|
+
|
|
+// Permutations
|
|
+ i = mod(i, pParam.x );
|
|
+ vec4 p = permute( permute( permute(
|
|
+ i.z + vec4(0., i1.z, i2.z, 1. ), pParam.xyz)
|
|
+ + i.y + vec4(0., i1.y, i2.y, 1. ), pParam.xyz)
|
|
+ + i.x + vec4(0., i1.x, i2.x, 1. ), pParam.xyz);
|
|
+
|
|
+// Gradients
|
|
+// ( N*N points uniformly over a square, mapped onto a octohedron.)
|
|
+ float n_ = 1.0/pParam.w ;
|
|
+ vec3 ns = n_ * D.wyz - D.xzx ;
|
|
+
|
|
+ vec4 j = p - pParam.w*pParam.w*floor(p * ns.z *ns.z); // mod(p,N*N)
|
|
+
|
|
+ vec4 x_ = floor(j * ns.z) ;
|
|
+ vec4 y_ = floor(j - pParam.w * x_ ) ; // mod(j,N)
|
|
+
|
|
+ vec4 x = x_ *ns.x + ns.yyyy;
|
|
+ vec4 y = y_ *ns.x + ns.yyyy;
|
|
+ vec4 h = 1. - abs(x) - abs(y);
|
|
+
|
|
+ vec4 b0 = vec4( x.xy, y.xy );
|
|
+ vec4 b1 = vec4( x.zw, y.zw );
|
|
+
|
|
+ vec4 s0 = vec4(lessThan(b0,D.xxxx)) *2. -1.;
|
|
+ vec4 s1 = vec4(lessThan(b1,D.xxxx)) *2. -1.;
|
|
+ vec4 sh = vec4(lessThan(h, D.xxxx));
|
|
+
|
|
+ vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
|
|
+ vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
|
|
+
|
|
+ vec3 p0 = vec3(a0.xy,h.x);
|
|
+ vec3 p1 = vec3(a0.zw,h.y);
|
|
+ vec3 p2 = vec3(a1.xy,h.z);
|
|
+ vec3 p3 = vec3(a1.zw,h.w);
|
|
+
|
|
+#ifdef NORMALISE_GRADIENTS
|
|
+ p0 *= taylorInvSqrt(dot(p0,p0));
|
|
+ p1 *= taylorInvSqrt(dot(p1,p1));
|
|
+ p2 *= taylorInvSqrt(dot(p2,p2));
|
|
+ p3 *= taylorInvSqrt(dot(p3,p3));
|
|
+#endif
|
|
+
|
|
+// Mix
|
|
+ vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.);
|
|
+ m = m * m;
|
|
+//used to be 64.
|
|
+ return 48.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),
|
|
+ dot(p2,x2), dot(p3,x3) ) );
|
|
+ }
|
|
+
|
|
+vec4 grad4(float j, vec4 ip)
|
|
+ {
|
|
+ const vec4 ones = vec4(1.,1.,1.,-1.);
|
|
+ vec4 p,s;
|
|
+
|
|
+ p.xyz = floor( fract (vec3(j) * ip.xyz) *pParam.w) * ip.z -1.0;
|
|
+ p.w = 1.5 - dot(abs(p.xyz), ones.xyz);
|
|
+ s = vec4(lessThan(p,vec4(0.)));
|
|
+ p.xyz = p.xyz + (s.xyz*2.-1.) * s.www;
|
|
+
|
|
+ return p;
|
|
+ }
|
|
+
|
|
+float simplexNoise4(vec4 v)
|
|
+ {
|
|
+ const vec2 C = vec2( 0.138196601125010504, // (5 - sqrt(5))/20 G4
|
|
+ 0.309016994374947451); // (sqrt(5) - 1)/4 F4
|
|
+// First corner
|
|
+ vec4 i = floor(v + dot(v, C.yyyy) );
|
|
+ vec4 x0 = v - i + dot(i, C.xxxx);
|
|
+
|
|
+// Other corners
|
|
+
|
|
+// Force existance of strict total ordering in sort.
|
|
+ vec4 q0 = floor(x0 * 1024.0) + vec4( 0., 1./4., 2./4. , 3./4.);
|
|
+ vec4 q1;
|
|
+ q1.xy = max(q0.xy,q0.zw); // x:z y:w
|
|
+ q1.zw = min(q0.xy,q0.zw);
|
|
+
|
|
+ vec4 q2;
|
|
+ q2.xz = max(q1.xz,q1.yw); // x:y z:w
|
|
+ q2.yw = min(q1.xz,q1.yw);
|
|
+
|
|
+ vec4 q3;
|
|
+ q3.y = max(q2.y,q2.z); // y:z
|
|
+ q3.z = min(q2.y,q2.z);
|
|
+ q3.xw = q2.xw;
|
|
+
|
|
+ vec4 i1 = vec4(lessThanEqual(q3.xxxx, q0));
|
|
+ vec4 i2 = vec4(lessThanEqual(q3.yyyy, q0));
|
|
+ vec4 i3 = vec4(lessThanEqual(q3.zzzz, q0));
|
|
+
|
|
+ // x0 = x0 - 0. + 0. * C
|
|
+ vec4 x1 = x0 - i1 + 1. * C.xxxx;
|
|
+ vec4 x2 = x0 - i2 + 2. * C.xxxx;
|
|
+ vec4 x3 = x0 - i3 + 3. * C.xxxx;
|
|
+ vec4 x4 = x0 - 1. + 4. * C.xxxx;
|
|
+
|
|
+// Permutations
|
|
+ i = mod(i, pParam.x );
|
|
+ float j0 = permute( permute( permute( permute (
|
|
+ i.w, pParam.xyz) + i.z, pParam.xyz)
|
|
+ + i.y, pParam.xyz) + i.x, pParam.xyz);
|
|
+ vec4 j1 = permute( permute( permute( permute (
|
|
+ i.w + vec4(i1.w, i2.w, i3.w, 1. ), pParam.xyz)
|
|
+ + i.z + vec4(i1.z, i2.z, i3.z, 1. ), pParam.xyz)
|
|
+ + i.y + vec4(i1.y, i2.y, i3.y, 1. ), pParam.xyz)
|
|
+ + i.x + vec4(i1.x, i2.x, i3.x, 1. ), pParam.xyz);
|
|
+// Gradients
|
|
+// ( N*N*N points uniformly over a cube, mapped onto a 4-octohedron.)
|
|
+ vec4 ip = pParam ;
|
|
+ ip.xy *= pParam.w ;
|
|
+ ip.x *= pParam.w ;
|
|
+ ip = vec4(1.,1.,1.,2.) / ip ;
|
|
+
|
|
+ vec4 p0 = grad4(j0, ip);
|
|
+ vec4 p1 = grad4(j1.x, ip);
|
|
+ vec4 p2 = grad4(j1.y, ip);
|
|
+ vec4 p3 = grad4(j1.z, ip);
|
|
+ vec4 p4 = grad4(j1.w, ip);
|
|
+
|
|
+#ifdef NORMALISE_GRADIENTS
|
|
+ p0 *= taylorInvSqrt(dot(p0,p0));
|
|
+ p1 *= taylorInvSqrt(dot(p1,p1));
|
|
+ p2 *= taylorInvSqrt(dot(p2,p2));
|
|
+ p3 *= taylorInvSqrt(dot(p3,p3));
|
|
+ p4 *= taylorInvSqrt(dot(p4,p4));
|
|
+#endif
|
|
+
|
|
+// Mix
|
|
+ vec3 m0 = max(0.6 - vec3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), 0.);
|
|
+ vec2 m1 = max(0.6 - vec2(dot(x3,x3), dot(x4,x4) ), 0.);
|
|
+ m0 = m0 * m0;
|
|
+ m1 = m1 * m1;
|
|
+ return 32. * ( dot(m0*m0, vec3( dot( p0, x0 ), dot( p1, x1 ), dot( p2, x2 )))
|
|
+ + dot(m1*m1, vec2( dot( p3, x3 ), dot( p4, x4 ) ) ) ) ;
|
|
+
|
|
+ }
|
|
+
|
|
+
|
|
+
|
|
diff --git a/src/glsl/skinning.vert b/src/glsl/skinning.vert
|
|
new file mode 100644
|
|
index 0000000..28970ee
|
|
--- /dev/null
|
|
+++ b/src/glsl/skinning.vert
|
|
@@ -0,0 +1,24 @@
|
|
+// Vertex weighting/blendin shader
|
|
+// Brian Paul
|
|
+// 4 Nov 2008
|
|
+
|
|
+uniform mat4 mat0, mat1;
|
|
+attribute float weight;
|
|
+
|
|
+void main()
|
|
+{
|
|
+ // simple diffuse shading
|
|
+ // Note that we should really transform the normal vector along with
|
|
+ // the postion below... someday.
|
|
+ vec3 lightVec = vec3(0, 0, 1);
|
|
+ vec3 norm = gl_NormalMatrix * gl_Normal;
|
|
+ float dot = 0.2 + max(0.0, dot(norm, lightVec));
|
|
+ gl_FrontColor = vec4(dot);
|
|
+
|
|
+ // compute sum of weighted transformations
|
|
+ vec4 pos0 = mat0 * gl_Vertex;
|
|
+ vec4 pos1 = mat1 * gl_Vertex;
|
|
+ vec4 pos = mix(pos0, pos1, weight);
|
|
+
|
|
+ gl_Position = gl_ModelViewProjectionMatrix * pos;
|
|
+}
|
|
diff --git a/src/perf/glslstateschange1.frag b/src/perf/glslstateschange1.frag
|
|
new file mode 100644
|
|
index 0000000..0839436
|
|
--- /dev/null
|
|
+++ b/src/perf/glslstateschange1.frag
|
|
@@ -0,0 +1,19 @@
|
|
+// Multi-texture fragment shader
|
|
+// Brian Paul
|
|
+
|
|
+// Composite second texture over first.
|
|
+// We're assuming the 2nd texture has a meaningful alpha channel.
|
|
+
|
|
+uniform sampler2D tex1;
|
|
+uniform sampler2D tex2;
|
|
+uniform vec4 UniV1;
|
|
+uniform vec4 UniV2;
|
|
+
|
|
+void main()
|
|
+{
|
|
+ vec4 t3;
|
|
+ vec4 t1 = texture2D(tex1, gl_TexCoord[0].xy);
|
|
+ vec4 t2 = texture2D(tex2, gl_TexCoord[1].xy);
|
|
+ t3 = mix(t1, t2, t2.w);
|
|
+ gl_FragColor = t3 + UniV1 + UniV2;
|
|
+}
|
|
diff --git a/src/perf/glslstateschange1.vert b/src/perf/glslstateschange1.vert
|
|
new file mode 100644
|
|
index 0000000..cef50db
|
|
--- /dev/null
|
|
+++ b/src/perf/glslstateschange1.vert
|
|
@@ -0,0 +1,14 @@
|
|
+// Multi-texture vertex shader
|
|
+// Brian Paul
|
|
+
|
|
+
|
|
+attribute vec4 TexCoord0, TexCoord1;
|
|
+attribute vec4 VertCoord;
|
|
+
|
|
+void main()
|
|
+{
|
|
+ gl_TexCoord[0] = TexCoord0;
|
|
+ gl_TexCoord[1] = TexCoord1;
|
|
+ // note: may use gl_Vertex or VertCoord here for testing:
|
|
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
|
|
+}
|
|
diff --git a/src/perf/glslstateschange2.frag b/src/perf/glslstateschange2.frag
|
|
new file mode 100644
|
|
index 0000000..0df0319
|
|
--- /dev/null
|
|
+++ b/src/perf/glslstateschange2.frag
|
|
@@ -0,0 +1,17 @@
|
|
+// Multi-texture fragment shader
|
|
+// Brian Paul
|
|
+
|
|
+// Composite second texture over first.
|
|
+// We're assuming the 2nd texture has a meaningful alpha channel.
|
|
+
|
|
+uniform sampler2D tex1;
|
|
+uniform sampler2D tex2;
|
|
+uniform vec4 UniV1;
|
|
+uniform vec4 UniV2;
|
|
+
|
|
+void main()
|
|
+{
|
|
+ vec4 t1 = texture2D(tex1, gl_TexCoord[0].xy);
|
|
+ vec4 t2 = texture2D(tex2, gl_TexCoord[1].xy);
|
|
+ gl_FragColor = t1 + t2 + UniV1 + UniV2;
|
|
+}
|
|
diff --git a/src/perf/glslstateschange2.vert b/src/perf/glslstateschange2.vert
|
|
new file mode 100644
|
|
index 0000000..cef50db
|
|
--- /dev/null
|
|
+++ b/src/perf/glslstateschange2.vert
|
|
@@ -0,0 +1,14 @@
|
|
+// Multi-texture vertex shader
|
|
+// Brian Paul
|
|
+
|
|
+
|
|
+attribute vec4 TexCoord0, TexCoord1;
|
|
+attribute vec4 VertCoord;
|
|
+
|
|
+void main()
|
|
+{
|
|
+ gl_TexCoord[0] = TexCoord0;
|
|
+ gl_TexCoord[1] = TexCoord1;
|
|
+ // note: may use gl_Vertex or VertCoord here for testing:
|
|
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
|
|
+}
|
|
diff --git a/src/vpglsl/infinite-loop.glsl b/src/vpglsl/infinite-loop.glsl
|
|
new file mode 100644
|
|
index 0000000..bc7ae4b
|
|
--- /dev/null
|
|
+++ b/src/vpglsl/infinite-loop.glsl
|
|
@@ -0,0 +1,8 @@
|
|
+void main() {
|
|
+ gl_Position = gl_Vertex;
|
|
+ vec4 sum = vec4(0);
|
|
+ for (int i = 1; i != 2; i += 2) {
|
|
+ sum += vec4(0.1, 0.1, 0.1, 0.1);
|
|
+ }
|
|
+ gl_FrontColor = sum;
|
|
+}
|
|
--
|
|
2.0.0
|
|
|