EXT_shader_texture_lod 扩展

EXT_shader_texture_lod 扩展是 WebGL API 的一部分,它向 OpenGL ES 着色语言添加了额外的纹理函数,使着色器编写者能够显式控制 LOD(细节层次)。

可以使用 WebGLRenderingContext.getExtension() 方法获得 WebGL 扩展。有关更多信息,请参阅 使用扩展(位于 WebGL 教程 中)。

注意:此扩展仅适用于 WebGL1 上下文。在 WebGL2 中,此扩展的功能默认在 WebGL2 上下文中可用。它需要 GLSL #version 300 es

GLSL 内置函数

如果启用了此扩展,则可以在 GLSL 着色器代码中使用以下新函数

cpp
vec4 texture2DLodEXT(sampler2D sampler, vec2 coord, float lod)
vec4 texture2DProjLodEXT(sampler2D sampler, vec3 coord, float lod)
vec4 texture2DProjLodEXT(sampler2D sampler, vec4 coord, float lod)
vec4 textureCubeLodEXT(samplerCube sampler, vec3 coord, float lod)
vec4 texture2DGradEXT(sampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy)
vec4 texture2DProjGradEXT(sampler2D sampler, vec3 P, vec2 dPdx, vec2 dPdy)
vec4 texture2DProjGradEXT(sampler2D sampler, vec4 P, vec2 dPdx, vec2 dPdy)
vec4 textureCubeGradEXT(samplerCube sampler, vec3 P, vec3 dPdx, vec3 dPdy)

示例

启用扩展

js
gl.getExtension("EXT_shader_texture_lod");

避免纹理坐标环绕时出现伪影的着色器代码

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>

规范

规范
WebGL EXT_shader_texture_lod Khronos 批准扩展规范

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅