iPad缺少OpenGL扩展字符串GL_APPLE_texture_2D_limited_npot

时间:2012-04-22 07:15:32

标签: ios ipad opengl-es

在我的iOS游戏中,我想使用GL_APPLE_texture_2D_limited_npot扩展名来节省内存(游戏中有NPOT纹理,在我目前的实现中我添加了一些填充以使这些功能为2)。

我正在我的iPad(第一代)进行测试。到目前为止我读过的所有东西都说支持OpenGLES2(包括iPad)的所有iOS设备也支持GL_APPLE_texture_2D_limited_npot(非常好,因为我的游戏使用OpenGLES2)。我已经在我的iPad上进行了测试,它确实支持(如果我将包装设置为GL_CLAMP_TO_EDGE,我删除了填充和图像工作),但是当我调用glGetString(GL_EXTENSIONS)时,扩展名没有显示。代码:

const char *extensions = (const char *)glGetString(GL_EXTENSIONS);
std::cout << extensions << "\n";

结果:

GL_OES_depth_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_texture_float GL_OES_texture_half_float GL_OES_vertex_array_object GL_EXT_blend_minmax GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_EXT_separate_shader_objects GL_EXT_shader_texture_lod GL_EXT_texture_filter_anisotropic GL_APPLE_framebuffer_multisample GL_APPLE_rgb_422 GL_APPLE_texture_format_BGRA8888 GL_APPLE_texture_max_level GL_IMG_read_format GL_IMG_texture_compression_pvrtc

为什么这个扩展名没有用glGetString(GL_EXTENSIONS)显示?检查它的正确方法是什么?所有OpenGLES2 iOS设备是否真的支持它?

1 个答案:

答案 0 :(得分:5)

OpenGL ES 2.0在规范中支持2个纹理的非幂。没有必要延期。以下是规范:http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.25.pdf(页69):

  

如果wt和ht是指定的图像宽度和高度,并且如果wt或ht是   小于零,则生成错误INVALID_VALUE。   二维纹理图像的最大允许宽度和高度   对于0到k级的图像阵列,必须至少为2k-lod,其中k是对数   MAX_TEXTURE_SIZE的基数为2。而lod是图像阵列的细节层次。   对于任何大于k的细节水平的图像阵列,它可能为零。错误   如果指定的图像太大而无法存储,则生成INVALID_VALUE   任何条件。

关于两个限制的强大功能(即OpenGL ES 1.x标准)。

如果您阅读了扩展名的说明 - http://www.khronos.org/registry/gles/extensions/APPLE/APPLE_texture_2D_limited_npot.txt,那么您会注意到它是OpenGL ES 1.1规范的再次编写。