StdLibShaderDerivative top-level constant
String
const StdLibShaderDerivative
Implementation
const String StdLibShaderDerivative = """
vec2 dHdxy_fwd(vec2 uv, float scale, sampler2D map) {
float H = texture(map, uv).x;
float dHx = texture(map, uv + dFdx(uv)).x - H;
float dHy = texture(map, uv + dFdy(uv)).x - H;
return vec2(dHx, dHy) * scale;
}
vec3 perturbNormalArb(vec3 surf_pos, vec3 surf_norm, vec2 dHdxy) {
vec3 vSigmaX = dFdx(surf_pos);
vec3 vSigmaY = dFdy(surf_pos);
vec3 vN = surf_norm;
vec3 R1 = cross(vSigmaY, vN);
vec3 R2 = cross(vN, vSigmaX);
float fDet = dot(vSigmaX, R1);
// *= gl_FrontFacing ? 1.0 : -1.0
fDet *= (float(gl_FrontFacing) * 2.0 - 1.0);
vec3 vGrad = sign(fDet) * (dHdxy.x * R1 + dHdxy.y * R2);
return normalize(abs(fDet) * surf_norm - vGrad);
}
""";