簡體   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