全屏纹理iPhone OpenGL ES

Ben*_*ves 5 iphone opengl-es

我知道iphone上的OpenGL纹理需要2的强大功能,OpenGL 2.0也是如此吗?如果我有一个尺寸为320 x 480的图像并想要全屏绘制,那么使用OpenGL可以做到这一点.

谢谢

小智 9

NPOT纹理支持的PowerVR SGX硬件,但有限制.NPOT纹理不能使用mipmap,必须是2D(没有立方体贴图或3D纹理),并且必须GL_CLAMP_TO_EDGE在两个维度中使用纹理包装; 默认情况下,OpenGL ES 2.0和ES 1.1下的扩展支持此功能GL_APPLE_texture_2D_limited_npot

对于ES 1.1,您可以在运行时检查此代码是否存在此扩展:

const char* extensions = (char*) glGetString(GL_EXTENSIONS);
bool npot = strstr(extensions, "GL_APPLE_texture_2D_limited_npot") != 0;
Run Code Online (Sandbox Code Playgroud)

由于这只出现在SGX而不是MBX上,请注意依赖NPOT纹理支持将限制您使用较新的SGX设备.当然,依赖ES 2.0也会这样做,所以如果这是你的预期目标,NPOT支持是一个没有实际意义的点,你可以继续使用NPOT纹理.

这是一个备用解决方案,可让您继续使用ES 1.1并保留完整的设备支持.将320x480纹理放在512x512内,用同时绘制的其他背景图块,字形或其他纹理填充空白(以避免多次glBindTexture调用),然后使用我最喜欢的ES 1.1扩展,GL_OES_draw_texture快速复制视口上的320x480部分:

int rect[4] = {0, 0, 480, 320};
glBindTexture(GL_TEXTURE_2D, texBackground);
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect);
glDrawTexiOES(0, 0, z, 480, 320);
Run Code Online (Sandbox Code Playgroud)

侧栏:OpenGL ES 2.0规范本身没有对NPOT纹理指定任何限制; 除非我弄错了,Apple正在施加限制 - 当然,在ES 1.1世界中,NPOT支持根本不存在,所以它是一个补充.