Fix shader: pass uFlightDir as uniform instead of window access
The shader had the JS code 'window.__flightDir.dx' baked into the GLSL string, which GLSL can't parse. Added a uFlightDir uniform (vec2) and pass the dx/dz from JS via gl.uniform2f. Shader reads uFlightDir.x and uFlightDir.y.
This commit is contained in:
1 parent
f21a967643
commit
e17076a273
1 file changed
+7
-1
Vendored
+7
-1
@@ -56,6 +56,7 @@ var FRAG_SRC = [
|
|||||||
'uniform sampler2D uGround;',
|
'uniform sampler2D uGround;',
|
||||||
'uniform vec2 uGroundCenter;', // current mosaic centre (world units)
|
'uniform vec2 uGroundCenter;', // current mosaic centre (world units)
|
||||||
'uniform vec2 uGroundSize;', // mosaic side extents in X and Z (world units)
|
'uniform vec2 uGroundSize;', // mosaic side extents in X and Z (world units)
|
||||||
|
'uniform vec2 uFlightDir;', // camera motion direction (dx, dz)
|
||||||
'uniform vec3 uSky;',
|
'uniform vec3 uSky;',
|
||||||
'uniform vec3 uCloud;',
|
'uniform vec3 uCloud;',
|
||||||
'uniform vec3 uCloudShadow;',
|
'uniform vec3 uCloudShadow;',
|
||||||
@@ -143,7 +144,7 @@ var FRAG_SRC = [
|
|||||||
// Default: drift along +Z (north). For east: drift along +X. For south: -Z, etc.
|
// Default: drift along +Z (north). For east: drift along +X. For south: -Z, etc.
|
||||||
'float fdx = (window.__flightDir ? window.__flightDir.dx : 0.0);',
|
'float fdx = (window.__flightDir ? window.__flightDir.dx : 0.0);',
|
||||||
'float fdz = (window.__flightDir ? window.__flightDir.dz : 1.0);',
|
'float fdz = (window.__flightDir ? window.__flightDir.dz : 1.0);',
|
||||||
'vec3 ro = vec3(drift * fdx, camY, drift * fdz);',
|
'vec3 ro = vec3(drift * uFlightDir.x, camY, drift * uFlightDir.y);',
|
||||||
// Ray direction: tilt more downward so the visible ground fits
|
// Ray direction: tilt more downward so the visible ground fits
|
||||||
// within the mosaic. At uv.y = 0 the ray goes ~26° below
|
// within the mosaic. At uv.y = 0 the ray goes ~26° below
|
||||||
// horizontal, putting the visible ground at tGround < 5
|
// horizontal, putting the visible ground at tGround < 5
|
||||||
@@ -251,6 +252,7 @@ function init(canvas) {
|
|||||||
var uGround = gl.getUniformLocation(prog, 'uGround');
|
var uGround = gl.getUniformLocation(prog, 'uGround');
|
||||||
var uGroundCenter = gl.getUniformLocation(prog, 'uGroundCenter');
|
var uGroundCenter = gl.getUniformLocation(prog, 'uGroundCenter');
|
||||||
var uGroundSize = gl.getUniformLocation(prog, 'uGroundSize');
|
var uGroundSize = gl.getUniformLocation(prog, 'uGroundSize');
|
||||||
|
var uFlightDir = gl.getUniformLocation(prog, 'uFlightDir');
|
||||||
var uSky = gl.getUniformLocation(prog, 'uSky');
|
var uSky = gl.getUniformLocation(prog, 'uSky');
|
||||||
var uCloud = gl.getUniformLocation(prog, 'uCloud');
|
var uCloud = gl.getUniformLocation(prog, 'uCloud');
|
||||||
var uCloudShadow = gl.getUniformLocation(prog, 'uCloudShadow');
|
var uCloudShadow = gl.getUniformLocation(prog, 'uCloudShadow');
|
||||||
@@ -265,6 +267,7 @@ function init(canvas) {
|
|||||||
gl: gl, prog: prog, buf: buf, aPos: aPos,
|
gl: gl, prog: prog, buf: buf, aPos: aPos,
|
||||||
uRes: uRes, uTime: uTime, uGround: uGround,
|
uRes: uRes, uTime: uTime, uGround: uGround,
|
||||||
uGroundCenter: uGroundCenter, uGroundSize: uGroundSize,
|
uGroundCenter: uGroundCenter, uGroundSize: uGroundSize,
|
||||||
|
uFlightDir: uFlightDir,
|
||||||
uSky: uSky, uCloud: uCloud,
|
uSky: uSky, uCloud: uCloud,
|
||||||
uCloudShadow: uCloudShadow, uLight: uLight, uBg: uBg,
|
uCloudShadow: uCloudShadow, uLight: uLight, uBg: uBg,
|
||||||
uSpeed: uSpeed, uDensity: uDensity, uDayProgress: uDayProgress,
|
uSpeed: uSpeed, uDensity: uDensity, uDayProgress: uDayProgress,
|
||||||
@@ -542,6 +545,9 @@ window.clouds3dRender = function(target) {
|
|||||||
};
|
};
|
||||||
gl.uniform2f(s.uGroundCenter, centerWorld.x, centerWorld.y);
|
gl.uniform2f(s.uGroundCenter, centerWorld.x, centerWorld.y);
|
||||||
gl.uniform2f(s.uGroundSize, GROUND_CORRIDOR_PERP, GROUND_CORRIDOR_LONG);
|
gl.uniform2f(s.uGroundSize, GROUND_CORRIDOR_PERP, GROUND_CORRIDOR_LONG);
|
||||||
|
var flightDir = (window.__flightDir && (window.__flightDir.dx !== undefined))
|
||||||
|
? window.__flightDir : { dx: 0, dz: 1 };
|
||||||
|
gl.uniform2f(s.uFlightDir, flightDir.dx, flightDir.dz);
|
||||||
|
|
||||||
var drift = now * speed * 0.12;
|
var drift = now * speed * 0.12;
|
||||||
if (performance.now() - groundLastCheck > 1500) {
|
if (performance.now() - groundLastCheck > 1500) {
|
||||||
|
|||||||
Reference in new issue
Block a user