扩展EXT_shader_texture_lod在OpenGL ES 3.0 iOS上不起作用

时间:2017-02-01 18:04:46

标签: ios opengl-es opengl-es-2.0 opengl-es-3.0

即使glGetString (GL_EXTENSIONS)来电显示扩展名存在

GL version:   OpenGL ES 3.0 Apple A8 GPU - 95.58
GL vendor:    Apple Inc.
GL renderer:  Apple A8 GPU
GLSL version: OpenGL ES GLSL ES 3.00
GLSL extensions:
  1 > GL_OES_standard_derivatives
  2 > GL_KHR_texture_compression_astc_ldr
  3 > GL_EXT_color_buffer_half_float
  4 > GL_EXT_debug_label
  5 > GL_EXT_debug_marker
  6 > GL_EXT_pvrtc_sRGB
  7 > GL_EXT_read_format_bgra
  8 > GL_EXT_separate_shader_objects
  9 > GL_EXT_shader_framebuffer_fetch
 10 > GL_EXT_shader_texture_lod <--------------------
 11 > GL_EXT_shadow_samplers
 12 > GL_EXT_texture_filter_anisotropic
 13 > GL_APPLE_clip_distance
 14 > GL_APPLE_color_buffer_packed_float
 15 > GL_APPLE_copy_texture_levels
 16 > GL_APPLE_rgb_422
 17 > GL_APPLE_texture_format_BGRA8888
 18 > GL_IMG_read_format
 19 > GL_IMG_texture_compression_pvrtc

着色器似乎忽略了level调用中的textureLod参数。视觉结果与texture相同。我用 renderdoc 检查了它,纹理生成了mipmap。 mag过滤mod也使用LINEAR_MIPMAP_LINEAR。另外,我确定level参数是正确的。

此外,当我在开头#extension GL_EXT_shader_texture_lod : require(带#version 300 es)中插入此语句时,着色器编译失败。使用#version 100并且扩展编译成功。

我没有尝试完全切换到#version 100,我不确定它是否有效。

我的问题是为什么我无法使用texture_lod扩展名编译300 es着色器,即使它存在于设备上?

2 个答案:

答案 0 :(得分:1)

  

我的问题是为什么我无法使用texture_lod编译300个es着色器   扩展,即使它存在于设备上?

...因为它是专门针对OpenGL ES ES 2.x着色器(#version 100)的扩展程序。

支持textureLod()是OpenGL ES 3.x ESSL #version 300的核心配置文件,因此您不需要扩展程序...

答案 1 :(得分:0)

您可以尝试将 #extension GL_EXT_shader_texture_lod : enable 放入着色器中, 它在这里工作。