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);
}
""";