[英]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.