files/en-us/web/api/oes_standard_derivatives/index.md
{{APIRef("WebGL")}}
The OES_standard_derivatives extension is part of the WebGL API and adds the GLSL derivative functions dFdx, dFdy, and fwidth.
WebGL extensions are available using the {{domxref("WebGLRenderingContext.getExtension()")}} method. For more information, see also Using Extensions in the WebGL tutorial.
[!NOTE] This extension is only available to {{domxref("WebGLRenderingContext", "WebGL1", "", 1)}} contexts. In {{domxref("WebGL2RenderingContext", "WebGL2", "", 1)}}, the functionality of this extension is available on the WebGL2 context by default. In WebGL 2, the constant is available as
gl.FRAGMENT_SHADER_DERIVATIVE_HINTand it requires GLSL#version 300 es.
This extension exposes one new constant, which can be used in the {{domxref("WebGLRenderingContext.hint()", "hint()")}} and {{domxref("WebGLRenderingContext.getParameter()", "getParameter()")}} methods.
ext.FRAGMENT_SHADER_DERIVATIVE_HINT_OES
dFdx, dFdy, and fwidth.The following new functions can be used in GLSL shader code, if this extension is enabled:
genType dFdx(genType p)
genType dFdy(genType p)
genType fwidth(genType p)
dFdx()
x using local differencing for the input argument p.dFdy()
y using local differencing for the input argument p.fwidth()
x and y using local differencing for the input argument p. That is, abs(dFdx(p)) + abs(dFdy(p)).dFdx() and dFdy() are commonly used to estimate the filter width used to anti-alias procedural textures.
Enabling the extensions:
gl.getExtension("OES_standard_derivatives");
gl.getExtension("EXT_shader_texture_lod");
Shader code that avoids artifacts when wrapping texture coordinates:
<script type="x-shader/x-fragment">
#extension GL_EXT_shader_texture_lod : enable
#extension GL_OES_standard_derivatives : enable
uniform sampler2D myTexture;
varying vec2 texCoord;
void main(){
gl_FragColor = texture2DGradEXT(myTexture, mod(texCoord, vec2(0.1, 0.5)),
dFdx(texCoord), dFdy(texCoord));
}
</script>
{{Specifications}}
{{Compat}}