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 着色器代码中使用以下新函数

c
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 批准的扩展规范

浏览器兼容性

另见