全屏幕纹理iPhone OpenGL ES

我知道iPhone上的OpenGL纹理必须是2的幂,OpenGL 2.0也是如此吗? 如果我有一个尺寸为320 x 480的图像,并且想要将其全屏绘制,那么可以使用OpenGL进行此操作。

谢谢


PowerVR SGX硬件支持NPOT纹理,但有限制。 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;

由于这只存在于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);

边栏:OpenGL ES 2.0规范本身没有对NPOT纹理指定任何限制; 除非我错了,否则苹果正在施加限制 - 当然,在ES 1.1的世界里,NPOT的支持根本不存在,所以这是一个补充。


假设你没有太多的全屏纹理,你可以使用512x512纹理,只使用320x480 。 它一定会奏效。


我想这取决于硬件。 我用来创建2纹理的最接近的力量,即如果我的纹理是320x480,那么我将创建一个512x512的纹理,它将具有原始纹理数据。 这确保了可移植性但消耗更多内存;)

链接地址: http://www.djcxy.com/p/34011.html

上一篇: Fullscreen texture iPhone OpenGL ES

下一篇: OpenGL ES 2.0 w/ GLKit Transparent Textures