OES_standard_derivatives-Erweiterung

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Die OES_standard_derivatives-Erweiterung ist Teil der WebGL-API und fügt die GLSL-Ableitungsfunktionen dFdx, dFdy und fwidth hinzu.

WebGL-Erweiterungen sind über die Methode WebGLRenderingContext.getExtension() verfügbar. Weitere Informationen finden Sie auch unter Verwendung von Erweiterungen im WebGL-Leitfaden.

Hinweis: Diese Erweiterung ist nur für WebGL1-Kontexte verfügbar. In WebGL2 ist die Funktionalität dieser Erweiterung im WebGL2-Kontext standardmäßig verfügbar. In WebGL 2 ist die Konstante als gl.FRAGMENT_SHADER_DERIVATIVE_HINT verfügbar, und sie erfordert GLSL #version 300 es.

Konstanten

Diese Erweiterung stellt eine neue Konstante bereit, die in den Methoden hint() und getParameter() verwendet werden kann.

ext.FRAGMENT_SHADER_DERIVATIVE_HINT_OES

Ein GLenum, das die Genauigkeit der Ableitungsberechnung für die eingebauten GLSL-Funktionen dFdx, dFdy und fwidth angibt.

Eingebaute GLSL-Funktionen

Die folgenden neuen Funktionen können im GLSL-Shadercode verwendet werden, wenn diese Erweiterung aktiviert ist:

cpp
genType dFdx(genType p)
genType dFdy(genType p)
genType fwidth(genType p)
dFdx()

Gibt die Ableitung in x zurück, wobei lokale Differenzierung für das Eingabeargument p verwendet wird.

dFdy()

Gibt die Ableitung in y zurück, wobei lokale Differenzierung für das Eingabeargument p verwendet wird.

fwidth()

Gibt die Summe der absoluten Ableitung in x und y zurück, wobei lokale Differenzierung für das Eingabeargument p verwendet wird. Das heißt, abs(dFdx(p)) + abs(dFdy(p)).

dFdx() und dFdy() werden häufig verwendet, um die Filterbreite abzuschätzen, die zur Kantenglättung prozeduraler Texturen genutzt wird.

Beispiele

Aktivieren der Erweiterungen:

js
gl.getExtension("OES_standard_derivatives");
gl.getExtension("EXT_shader_texture_lod");

Shader-Code, der Artefakte vermeidet, wenn Texturkoordinaten umgebrochen werden:

html
<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>

Spezifikationen

Specification
WebGL OES_standard_derivatives Khronos Ratified Extension Specification

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
OES_standard_derivatives

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch