繁体   English   中英

全屏纹理iPhone OpenGL ES

[英]Fullscreen texture iPhone OpenGL ES

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

谢谢

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;

由于这只出现在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纹理指定任何限制; 除非我弄错了,Apple正在施加限制 - 当然,在ES 1.1世界中,NPOT支持根本不存在,所以它是一个补充。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM