我知道在iPhone上使用OpenGL纹理需要是2的幂次方,那么OpenGL 2.0也是这样吗?如果我有一张320 x 480大小的图片并想全屏绘制它,是否有可能使用OpenGL实现?
谢谢。
谢谢。
PowerVR SGX硬件支持NPOT纹理,但有限制。NPOT纹理不能使用mipmaps,必须是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;
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);
512x512
的纹理,并且只使用其中的320x480
。这肯定会起作用。我想这取决于硬件。我曾经创建最接近2的幂次方纹理,例如如果我的纹理是320x480,那么我会创建一个512x512的纹理,其中包含原始纹理数据。这可以确保可移植性,但会消耗更多的内存;)